/* * These are special functions for stereoscopic support * differences in MacOS X. */ void glDrawBuffer(GLenum mode) { GLXContext gc = glXGetCurrentContext(); if (gc && apple_glx_context_uses_stereo(gc->apple)) { GLenum buf[2]; GLsizei n = 0; switch (mode) { case GL_BACK: buf[0] = GL_BACK_LEFT; buf[1] = GL_BACK_RIGHT; n = 2; break; case GL_FRONT: buf[0] = GL_FRONT_LEFT; buf[1] = GL_FRONT_RIGHT; n = 2; break; default: buf[0] = mode; n = 1; break; } __gl_api.DrawBuffers(n, buf); } else { __gl_api.DrawBuffer(mode); } }
/* * These are special functions for stereoscopic support * differences in MacOS X. */ void __applegl_glDrawBuffer(GLenum mode) { struct glx_context * gc = __glXGetCurrentContext(); if (gc && apple_glx_context_uses_stereo(gc->driContext)) { GLenum buf[2]; GLsizei n = 0; switch (mode) { case GL_BACK: buf[0] = GL_BACK_LEFT; buf[1] = GL_BACK_RIGHT; n = 2; break; case GL_FRONT: buf[0] = GL_FRONT_LEFT; buf[1] = GL_FRONT_RIGHT; n = 2; break; default: buf[0] = mode; n = 1; break; } __ogl_framework_api->DrawBuffers(n, buf); } else { __ogl_framework_api->DrawBuffer(mode); } }
void glDrawBuffers(GLsizei n, const GLenum * bufs) { GLXContext gc = glXGetCurrentContext(); if (gc && apple_glx_context_uses_stereo(gc->apple)) { GLenum newbuf[n + 2]; GLsizei i, outi = 0; bool have_back = false; bool have_front = false; for (i = 0; i < n; ++i) { if (GL_BACK == bufs[i]) { have_back = true; } else if (GL_FRONT == bufs[i]) { have_back = true; } else { newbuf[outi++] = bufs[i]; } } if (have_back) { newbuf[outi++] = GL_BACK_LEFT; newbuf[outi++] = GL_BACK_RIGHT; } if (have_front) { newbuf[outi++] = GL_FRONT_LEFT; newbuf[outi++] = GL_FRONT_RIGHT; } __gl_api.DrawBuffers(outi, newbuf); } else { __gl_api.DrawBuffers(n, bufs); } }