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

Method setDrawBuffers

server/FakePbuffer.cpp:299–394  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

297
298
299void FakePbuffer::setDrawBuffers(GLsizei n, const GLenum *bufs, bool deferred)
300{
301 if(n < 0)
302 {
303 // Trigger GL_INVALID_ENUM by passing n < 0 to the real glDrawBuffers()
304 // function.
305 _glDrawBuffers(n, bufs);
306 return;
307 }
308 GLint maxDrawBufs = 16;
309 _glGetIntegerv(GL_MAX_DRAW_BUFFERS, &maxDrawBufs);
310 if(n > min(maxDrawBufs, 16))
311 {
312 // Trigger GL_INVALID_VALUE by passing n > the real value of
313 // GL_MAX_DRAW_BUFFERS to the real glDrawBuffers() function.
314 _glDrawBuffers(maxDrawBufs + 1, bufs);
315 return;
316 }
317
318 GLenum actualBufs[4] = { 0, 0, 0, 0 };
319 int nActualBufs = 0;
320
321 for(GLsizei i = 0; i < n; i++)
322 {
323 if((bufs[i] >= GL_COLOR_ATTACHMENT0 && bufs[i] <= GL_DEPTH_ATTACHMENT)
324 || (bufs[i] == GL_BACK && n > 1))
325 {
326 // Trigger GL_INVALID_OPERATION by passing an FBO-incompatible value to
327 // the real glDrawBuffer() function.
328 _glDrawBuffer(GL_FRONT_LEFT);
329 return;
330 }
331 if((bufs[i] < GL_FRONT_LEFT || bufs[i] > GL_BACK_RIGHT)
332 && bufs[i] != GL_NONE && (bufs[i] != GL_BACK || n != 1))
333 {
334 // Trigger GL_INVALID_ENUM by passing an invalid value to the real
335 // glDrawBuffers() function.
336 GLenum buf = 0xFFFF;
337 _glDrawBuffers(1, &buf);
338 return;
339 }
340 if(i > 0)
341 {
342 for(GLsizei j = 0; j < i; j++)
343 {
344 if(bufs[j] == bufs[i] && bufs[i] != GL_NONE)
345 {
346 // Trigger GL_INVALID_OPERATION by passing the FBO-incompatible value
347 // to the real glDrawBuffer() function.
348 _glDrawBuffer(bufs[i]);
349 return;
350 }
351 }
352 }
353 if(((bufs[i] == GL_FRONT_RIGHT || bufs[i] == GL_RIGHT)
354 && !config->attr.stereo)
355 || ((bufs[i] == GL_BACK_LEFT || bufs[i] == GL_BACK)
356 && !config->attr.doubleBuffer)

Callers 5

bindFramebufferFunction · 0.45
drawBuffersFunction · 0.45
makeCurrentFunction · 0.45
setDrawBufferMethod · 0.45

Calls 1

minFunction · 0.50

Tested by

no test coverage detected