From 7d046c30a9cc95991d013af41612756d0431265a Mon Sep 17 00:00:00 2001 From: Bradley Austin Davis Date: Tue, 8 Mar 2016 12:23:29 -0800 Subject: [PATCH] Bypass baffling OSX GL error --- .../display-plugins/OpenGLDisplayPlugin.cpp | 22 +++++++------------ .../src/display-plugins/OpenGLDisplayPlugin.h | 3 +-- .../display-plugins/hmd/HmdDisplayPlugin.cpp | 8 +++---- libraries/gl/src/gl/OglplusHelpers.cpp | 5 ++--- 4 files changed, 15 insertions(+), 23 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index 5cda3130d0..7af97678a7 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -293,14 +293,12 @@ void OpenGLDisplayPlugin::customizeContext() { auto uniforms = _program->ActiveUniforms(); while (!uniforms.Empty()) { auto uniform = uniforms.Front(); - if (uniform.Name() == "Projection") { - _projectionUniform = uniform.Index(); - } else if (uniform.Name() == "ModelView") { - _modelViewUniform = uniform.Index(); + if (uniform.Name() == "mvp") { + _mvpUniform = uniform.Index(); } uniforms.Next(); } - + _plane = loadPlane(_program); _compositeFramebuffer = std::make_shared(); @@ -410,16 +408,14 @@ void OpenGLDisplayPlugin::compositeOverlay() { using namespace oglplus; // Overlay draw if (isStereo()) { - Uniform(*_program, _projectionUniform).Set(mat4()); - Uniform(*_program, _modelViewUniform).Set(mat4()); + Uniform(*_program, _mvpUniform).Set(mat4()); for_each_eye([&](Eye eye) { eyeViewport(eye); drawUnitQuad(); }); } else { // Overlay draw - Uniform(*_program, _projectionUniform).Set(mat4()); - Uniform(*_program, _modelViewUniform).Set(mat4()); + Uniform(*_program, _mvpUniform).Set(mat4()); drawUnitQuad(); } } @@ -427,7 +423,7 @@ void OpenGLDisplayPlugin::compositeOverlay() { void OpenGLDisplayPlugin::compositePointer() { using namespace oglplus; auto compositorHelper = DependencyManager::get(); - Uniform(*_program, _modelViewUniform).Set(compositorHelper->getReticleTransform(glm::mat4())); + Uniform(*_program, _mvpUniform).Set(compositorHelper->getReticleTransform(glm::mat4())); if (isStereo()) { for_each_eye([&](Eye eye) { eyeViewport(eye); @@ -436,8 +432,7 @@ void OpenGLDisplayPlugin::compositePointer() { } else { drawUnitQuad(); } - Uniform(*_program, _projectionUniform).Set(mat4()); - Uniform(*_program, _modelViewUniform).Set(mat4()); + Uniform(*_program, _mvpUniform).Set(mat4()); } void OpenGLDisplayPlugin::compositeLayers() { @@ -452,8 +447,7 @@ void OpenGLDisplayPlugin::compositeLayers() { Context::Clear().DepthBuffer(); glBindTexture(GL_TEXTURE_2D, getSceneTextureId()); _program->Bind(); - Uniform(*_program, _projectionUniform).Set(mat4()); - Uniform(*_program, _modelViewUniform).Set(mat4()); + Uniform(*_program, _mvpUniform).Set(mat4()); drawUnitQuad(); auto overlayTextureId = getOverlayTextureId(); if (overlayTextureId) { diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h index 590123437f..576d6d8eff 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h @@ -85,8 +85,7 @@ protected: virtual void updateFrameData(); ProgramPtr _program; - int32_t _modelViewUniform { -1 }; - int32_t _projectionUniform { -1 }; + int32_t _mvpUniform { -1 }; ShapeWrapperPtr _plane; mutable Mutex _mutex; diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp index 9470194180..92bfef0dc8 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp @@ -66,8 +66,8 @@ void HmdDisplayPlugin::compositeOverlay() { for_each_eye([&](Eye eye) { eyeViewport(eye); auto modelView = glm::inverse(_currentRenderEyePoses[eye]); // *glm::translate(mat4(), vec3(0, 0, -1)); - Uniform(*_program, _modelViewUniform).Set(modelView); - Uniform(*_program, _projectionUniform).Set(_eyeProjections[eye]); + auto mvp = _eyeProjections[eye] * modelView; + Uniform(*_program, _mvpUniform).Set(mvp); _sphereSection->Draw(); }); } @@ -82,8 +82,8 @@ void HmdDisplayPlugin::compositePointer() { using namespace oglplus; eyeViewport(eye); auto reticleTransform = compositorHelper->getReticleTransform(_currentRenderEyePoses[eye], headPosition); - Uniform(*_program, _modelViewUniform).Set(reticleTransform); - Uniform(*_program, _projectionUniform).Set(_eyeProjections[eye]); + auto mvp = _eyeProjections[eye] * reticleTransform; + Uniform(*_program, _mvpUniform).Set(mvp); _plane->Draw(); }); } diff --git a/libraries/gl/src/gl/OglplusHelpers.cpp b/libraries/gl/src/gl/OglplusHelpers.cpp index aa129bb755..a579f061b7 100644 --- a/libraries/gl/src/gl/OglplusHelpers.cpp +++ b/libraries/gl/src/gl/OglplusHelpers.cpp @@ -15,8 +15,7 @@ using namespace oglplus::shapes; static const char * SIMPLE_TEXTURED_VS = R"VS(#version 410 core #pragma line __LINE__ -uniform mat4 Projection = mat4(1); -uniform mat4 ModelView = mat4(1); +uniform mat4 mvp = mat4(1); in vec3 Position; in vec2 TexCoord; @@ -24,7 +23,7 @@ in vec2 TexCoord; out vec2 vTexCoord; void main() { - gl_Position = Projection * ModelView * vec4(Position, 1); + gl_Position = mvp * vec4(Position, 1); vTexCoord = TexCoord ; }