From a3399c1af2904e52230aa9c40565070f7fa9ff03 Mon Sep 17 00:00:00 2001 From: Christopher Bruns Date: Wed, 27 Dec 2017 13:05:13 -0800 Subject: [PATCH] Fix: Bind the default framebuffer before testing whether hardware stereo 3D is supported. This allows Nvidia 3D vision glasses to function correctly when gl_light_shadowmap is ON. Doc: Add "requires restart" to "enable quad stereo" option menu label, to help folks trying to setup 3D. --- src/gl/stereo3d/gl_quadstereo.cpp | 16 ++++++++-------- wadsrc/static/language.enu | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/gl/stereo3d/gl_quadstereo.cpp b/src/gl/stereo3d/gl_quadstereo.cpp index b65c109c8..769f28906 100644 --- a/src/gl/stereo3d/gl_quadstereo.cpp +++ b/src/gl/stereo3d/gl_quadstereo.cpp @@ -50,19 +50,19 @@ void QuadStereo::checkInitialRenderContextState() { // Keep trying until we see at least one good OpenGL context to render to static bool bDecentContextWasFound = false; - if (!bDecentContextWasFound) { - // I'm using a "random" OpenGL call (glGetFramebufferAttachmentParameteriv) - // that appears to correlate with whether the context is ready - GLint attachmentType = GL_NONE; - glGetFramebufferAttachmentParameteriv(GL_DRAW_FRAMEBUFFER, GL_FRONT_LEFT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &attachmentType); - if (attachmentType != GL_NONE) // Finally, a useful OpenGL context + static int contextCheckCount = 0; + if ( (! bDecentContextWasFound) && (contextCheckCount < 200) ) + { + contextCheckCount += 1; + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); // This question is about the main screen display context + GLboolean supportsStereo, supportsBuffered; + glGetBooleanv(GL_DOUBLEBUFFER, &supportsBuffered); + if (supportsBuffered) // Finally, a useful OpenGL context { // This block will be executed exactly ONCE during a game run bDecentContextWasFound = true; // now we can stop checking every frame... // Now check whether this context supports hardware stereo - GLboolean supportsStereo, supportsBuffered; glGetBooleanv(GL_STEREO, &supportsStereo); - glGetBooleanv(GL_DOUBLEBUFFER, &supportsBuffered); bQuadStereoSupported = supportsStereo && supportsBuffered; leftEye.bQuadStereoSupported = bQuadStereoSupported; rightEye.bQuadStereoSupported = bQuadStereoSupported; diff --git a/wadsrc/static/language.enu b/wadsrc/static/language.enu index 06af66307..b05981a5a 100644 --- a/wadsrc/static/language.enu +++ b/wadsrc/static/language.enu @@ -2725,7 +2725,7 @@ GLPREFMNU_AMBLIGHT = "Ambient light level"; GLPREFMNU_RENDERQUALITY = "Rendering quality"; GLPREFMNU_MENUBLUR = "Menu Blur"; GLPREFMNU_VRMODE = "Stereo 3D VR"; -GLPREFMNU_VRQUADSTEREO = "Enable Quad Stereo"; +GLPREFMNU_VRQUADSTEREO = "Enable Quad Stereo (Requires Restart)"; GLPREFMNU_MULTISAMPLE = "Multisample"; GLPREFMNU_TONEMAP = "Tonemap Mode"; GLPREFMNU_BLOOM = "Bloom effect";