| 157 | |
| 158 | |
| 159 | unsigned int checkBufferColor(void) |
| 160 | { |
| 161 | int i, viewport[4], ps = 3; unsigned int ret = 0; |
| 162 | unsigned char *buf = NULL; |
| 163 | |
| 164 | try |
| 165 | { |
| 166 | viewport[0] = viewport[1] = viewport[2] = viewport[3] = 0; |
| 167 | glGetIntegerv(GL_VIEWPORT, viewport); |
| 168 | if(viewport[2] < 1 || viewport[3] < 1) |
| 169 | THROW("Invalid viewport dimensions"); |
| 170 | |
| 171 | if((buf = (unsigned char *)malloc(viewport[2] * viewport[3] * ps)) == NULL) |
| 172 | THROW("Could not allocate buffer"); |
| 173 | memset(buf, 128, viewport[2] * viewport[3] * ps); |
| 174 | |
| 175 | glPixelStorei(GL_PACK_ALIGNMENT, 1); |
| 176 | glReadPixels(0, 0, viewport[2], viewport[3], GL_RGB, GL_UNSIGNED_BYTE, |
| 177 | buf); |
| 178 | for(i = 3; i < viewport[2] * viewport[3] * ps; i += ps) |
| 179 | { |
| 180 | if(buf[i] != buf[0] || buf[i + 1] != buf[1] || buf[i + 2] != buf[2]) |
| 181 | THROW("Bogus data read back"); |
| 182 | } |
| 183 | ret = buf[0] | (buf[1] << 8) | (buf[2] << 16); |
| 184 | free(buf); |
| 185 | return ret; |
| 186 | } |
| 187 | catch(...) |
| 188 | { |
| 189 | free(buf); |
| 190 | throw; |
| 191 | } |
| 192 | } |
| 193 | |
| 194 | |
| 195 | void checkWindowColor(Display *dpy, Window win, unsigned int color, |
no test coverage detected