MCPcopy Create free account
hub / github.com/VirtualGL/virtualgl / setDrawBuffer

Method setDrawBuffer

server/FakePbuffer.cpp:250–296  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

248
249
250void 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
299void FakePbuffer::setDrawBuffers(GLsizei n, const GLenum *bufs, bool deferred)

Callers 4

bindFramebufferFunction · 0.80
drawBufferFunction · 0.80
makeCurrentFunction · 0.80

Calls 1

setDrawBuffersMethod · 0.45

Tested by

no test coverage detected