void RAS_OpenGLRasterizer::SetEye(const StereoEye eye) { m_curreye = eye; switch (m_stereomode) { case RAS_STEREO_QUADBUFFERED: glDrawBuffer(m_curreye == RAS_STEREO_LEFTEYE ? GL_BACK_LEFT : GL_BACK_RIGHT); break; case RAS_STEREO_ANAGLYPH: if (m_curreye == RAS_STEREO_LEFTEYE) { glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE); } else { //glAccum(GL_LOAD, 1.0f); glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_FALSE); ClearDepthBuffer(); } break; case RAS_STEREO_VINTERLACE: { // OpenGL stippling is deprecated, it is no longer possible to affect all shaders // this way, offscreen rendering and then compositing may be the better solution glEnable(GL_POLYGON_STIPPLE); glPolygonStipple((const GLubyte*) ((m_curreye == RAS_STEREO_LEFTEYE) ? left_eye_vinterlace_mask : right_eye_vinterlace_mask)); if (m_curreye == RAS_STEREO_RIGHTEYE) ClearDepthBuffer(); break; } case RAS_STEREO_INTERLACED: { glEnable(GL_POLYGON_STIPPLE); glPolygonStipple((const GLubyte*) &hinterlace_mask[m_curreye == RAS_STEREO_LEFTEYE?0:1]); if (m_curreye == RAS_STEREO_RIGHTEYE) ClearDepthBuffer(); break; } default: break; } }
void RAS_OpenGLRasterizer::SetEye(const StereoEye eye) { m_curreye = eye; switch (m_stereomode) { case RAS_STEREO_QUADBUFFERED: glDrawBuffer(m_curreye == RAS_STEREO_LEFTEYE ? GL_BACK_LEFT : GL_BACK_RIGHT); break; case RAS_STEREO_ANAGLYPH: if (m_curreye == RAS_STEREO_LEFTEYE) { glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE); } else { //glAccum(GL_LOAD, 1.0); glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_FALSE); ClearDepthBuffer(); } break; case RAS_STEREO_VINTERLACE: { glEnable(GL_POLYGON_STIPPLE); glPolygonStipple((const GLubyte*) ((m_curreye == RAS_STEREO_LEFTEYE) ? left_eye_vinterlace_mask : right_eye_vinterlace_mask)); if (m_curreye == RAS_STEREO_RIGHTEYE) ClearDepthBuffer(); break; } case RAS_STEREO_INTERLACED: { glEnable(GL_POLYGON_STIPPLE); glPolygonStipple((const GLubyte*) &hinterlace_mask[m_curreye == RAS_STEREO_LEFTEYE?0:1]); if (m_curreye == RAS_STEREO_RIGHTEYE) ClearDepthBuffer(); break; } default: break; } }