| 248 | |
| 249 | |
| 250 | void FakePbuffer::setDrawBuffer(GLenum drawBuf, bool deferred) |
| 251 | { |
| 252 | if(((drawBuf == GL_FRONT_RIGHT || drawBuf == GL_RIGHT) |
| 253 | && !config->attr.stereo) |
| 254 | || ((drawBuf == GL_BACK_LEFT || drawBuf == GL_BACK) |
| 255 | && !config->attr.doubleBuffer) |
| 256 | || (drawBuf == GL_BACK_RIGHT |
| 257 | && (!config->attr.stereo || !config->attr.doubleBuffer)) |
| 258 | || (drawBuf >= GL_COLOR_ATTACHMENT0 && drawBuf <= GL_DEPTH_ATTACHMENT)) |
| 259 | { |
| 260 | // Trigger GL_INVALID_OPERATION by passing an FBO-incompatible value to |
| 261 | // the real glDrawBuffer() function. |
| 262 | _glDrawBuffer(GL_FRONT_LEFT); |
| 263 | return; |
| 264 | } |
| 265 | |
| 266 | GLenum actualBufs[4] = { 0, 0, 0, 0 }; |
| 267 | int nActualBufs = 0; |
| 268 | |
| 269 | // 0 = front left, 1 = back left, 2 = front right, 3 = back right |
| 270 | if(drawBuf == GL_FRONT_LEFT || drawBuf == GL_FRONT || drawBuf == GL_LEFT |
| 271 | || drawBuf == GL_FRONT_AND_BACK) |
| 272 | actualBufs[nActualBufs++] = GL_COLOR_ATTACHMENT0; |
| 273 | if(drawBuf == GL_FRONT_RIGHT |
| 274 | || (drawBuf == GL_FRONT && config->attr.stereo) |
| 275 | || (drawBuf == GL_RIGHT && config->attr.stereo) |
| 276 | || (drawBuf == GL_FRONT_AND_BACK && config->attr.stereo)) |
| 277 | actualBufs[nActualBufs++] = GL_COLOR_ATTACHMENT2; |
| 278 | if(drawBuf == GL_BACK_LEFT || drawBuf == GL_BACK |
| 279 | || (drawBuf == GL_LEFT && config->attr.doubleBuffer) |
| 280 | || (drawBuf == GL_FRONT_AND_BACK && config->attr.doubleBuffer)) |
| 281 | actualBufs[nActualBufs++] = GL_COLOR_ATTACHMENT1; |
| 282 | if(drawBuf == GL_BACK_RIGHT |
| 283 | || (drawBuf == GL_BACK && config->attr.stereo && config->attr.doubleBuffer) |
| 284 | || (drawBuf == GL_RIGHT && config->attr.stereo |
| 285 | && config->attr.doubleBuffer) |
| 286 | || (drawBuf == GL_FRONT_AND_BACK && config->attr.stereo |
| 287 | && config->attr.doubleBuffer)) |
| 288 | actualBufs[nActualBufs++] = GL_COLOR_ATTACHMENT3; |
| 289 | if(nActualBufs == 0) |
| 290 | actualBufs[nActualBufs++] = drawBuf; |
| 291 | if(deferred) |
| 292 | _glNamedFramebufferDrawBuffers(fbo, nActualBufs, actualBufs); |
| 293 | else |
| 294 | _glDrawBuffers(nActualBufs, actualBufs); |
| 295 | CTXHASHEGL.setDrawBuffers(_eglGetCurrentContext(), 1, &drawBuf); |
| 296 | } |
| 297 | |
| 298 | |
| 299 | void FakePbuffer::setDrawBuffers(GLsizei n, const GLenum *bufs, bool deferred) |
no test coverage detected