Merge pull request #7279 from jherico/osx_gl_fix

Bypass baffling OSX GL error
This commit is contained in:
Clément Brisset 2016-03-08 13:08:49 -08:00
commit fc98408922
4 changed files with 15 additions and 23 deletions

View file

@ -293,14 +293,12 @@ void OpenGLDisplayPlugin::customizeContext() {
auto uniforms = _program->ActiveUniforms(); auto uniforms = _program->ActiveUniforms();
while (!uniforms.Empty()) { while (!uniforms.Empty()) {
auto uniform = uniforms.Front(); auto uniform = uniforms.Front();
if (uniform.Name() == "Projection") { if (uniform.Name() == "mvp") {
_projectionUniform = uniform.Index(); _mvpUniform = uniform.Index();
} else if (uniform.Name() == "ModelView") {
_modelViewUniform = uniform.Index();
} }
uniforms.Next(); uniforms.Next();
} }
_plane = loadPlane(_program); _plane = loadPlane(_program);
_compositeFramebuffer = std::make_shared<BasicFramebufferWrapper>(); _compositeFramebuffer = std::make_shared<BasicFramebufferWrapper>();
@ -410,16 +408,14 @@ void OpenGLDisplayPlugin::compositeOverlay() {
using namespace oglplus; using namespace oglplus;
// Overlay draw // Overlay draw
if (isStereo()) { if (isStereo()) {
Uniform<glm::mat4>(*_program, _projectionUniform).Set(mat4()); Uniform<glm::mat4>(*_program, _mvpUniform).Set(mat4());
Uniform<glm::mat4>(*_program, _modelViewUniform).Set(mat4());
for_each_eye([&](Eye eye) { for_each_eye([&](Eye eye) {
eyeViewport(eye); eyeViewport(eye);
drawUnitQuad(); drawUnitQuad();
}); });
} else { } else {
// Overlay draw // Overlay draw
Uniform<glm::mat4>(*_program, _projectionUniform).Set(mat4()); Uniform<glm::mat4>(*_program, _mvpUniform).Set(mat4());
Uniform<glm::mat4>(*_program, _modelViewUniform).Set(mat4());
drawUnitQuad(); drawUnitQuad();
} }
} }
@ -427,7 +423,7 @@ void OpenGLDisplayPlugin::compositeOverlay() {
void OpenGLDisplayPlugin::compositePointer() { void OpenGLDisplayPlugin::compositePointer() {
using namespace oglplus; using namespace oglplus;
auto compositorHelper = DependencyManager::get<CompositorHelper>(); auto compositorHelper = DependencyManager::get<CompositorHelper>();
Uniform<glm::mat4>(*_program, _modelViewUniform).Set(compositorHelper->getReticleTransform(glm::mat4())); Uniform<glm::mat4>(*_program, _mvpUniform).Set(compositorHelper->getReticleTransform(glm::mat4()));
if (isStereo()) { if (isStereo()) {
for_each_eye([&](Eye eye) { for_each_eye([&](Eye eye) {
eyeViewport(eye); eyeViewport(eye);
@ -436,8 +432,7 @@ void OpenGLDisplayPlugin::compositePointer() {
} else { } else {
drawUnitQuad(); drawUnitQuad();
} }
Uniform<glm::mat4>(*_program, _projectionUniform).Set(mat4()); Uniform<glm::mat4>(*_program, _mvpUniform).Set(mat4());
Uniform<glm::mat4>(*_program, _modelViewUniform).Set(mat4());
} }
void OpenGLDisplayPlugin::compositeLayers() { void OpenGLDisplayPlugin::compositeLayers() {
@ -452,8 +447,7 @@ void OpenGLDisplayPlugin::compositeLayers() {
Context::Clear().DepthBuffer(); Context::Clear().DepthBuffer();
glBindTexture(GL_TEXTURE_2D, getSceneTextureId()); glBindTexture(GL_TEXTURE_2D, getSceneTextureId());
_program->Bind(); _program->Bind();
Uniform<glm::mat4>(*_program, _projectionUniform).Set(mat4()); Uniform<glm::mat4>(*_program, _mvpUniform).Set(mat4());
Uniform<glm::mat4>(*_program, _modelViewUniform).Set(mat4());
drawUnitQuad(); drawUnitQuad();
auto overlayTextureId = getOverlayTextureId(); auto overlayTextureId = getOverlayTextureId();
if (overlayTextureId) { if (overlayTextureId) {

View file

@ -85,8 +85,7 @@ protected:
virtual void updateFrameData(); virtual void updateFrameData();
ProgramPtr _program; ProgramPtr _program;
int32_t _modelViewUniform { -1 }; int32_t _mvpUniform { -1 };
int32_t _projectionUniform { -1 };
ShapeWrapperPtr _plane; ShapeWrapperPtr _plane;
mutable Mutex _mutex; mutable Mutex _mutex;

View file

@ -66,8 +66,8 @@ void HmdDisplayPlugin::compositeOverlay() {
for_each_eye([&](Eye eye) { for_each_eye([&](Eye eye) {
eyeViewport(eye); eyeViewport(eye);
auto modelView = glm::inverse(_currentRenderEyePoses[eye]); // *glm::translate(mat4(), vec3(0, 0, -1)); auto modelView = glm::inverse(_currentRenderEyePoses[eye]); // *glm::translate(mat4(), vec3(0, 0, -1));
Uniform<glm::mat4>(*_program, _modelViewUniform).Set(modelView); auto mvp = _eyeProjections[eye] * modelView;
Uniform<glm::mat4>(*_program, _projectionUniform).Set(_eyeProjections[eye]); Uniform<glm::mat4>(*_program, _mvpUniform).Set(mvp);
_sphereSection->Draw(); _sphereSection->Draw();
}); });
} }
@ -82,8 +82,8 @@ void HmdDisplayPlugin::compositePointer() {
using namespace oglplus; using namespace oglplus;
eyeViewport(eye); eyeViewport(eye);
auto reticleTransform = compositorHelper->getReticleTransform(_currentRenderEyePoses[eye], headPosition); auto reticleTransform = compositorHelper->getReticleTransform(_currentRenderEyePoses[eye], headPosition);
Uniform<glm::mat4>(*_program, _modelViewUniform).Set(reticleTransform); auto mvp = _eyeProjections[eye] * reticleTransform;
Uniform<glm::mat4>(*_program, _projectionUniform).Set(_eyeProjections[eye]); Uniform<glm::mat4>(*_program, _mvpUniform).Set(mvp);
_plane->Draw(); _plane->Draw();
}); });
} }

View file

@ -15,8 +15,7 @@ using namespace oglplus::shapes;
static const char * SIMPLE_TEXTURED_VS = R"VS(#version 410 core static const char * SIMPLE_TEXTURED_VS = R"VS(#version 410 core
#pragma line __LINE__ #pragma line __LINE__
uniform mat4 Projection = mat4(1); uniform mat4 mvp = mat4(1);
uniform mat4 ModelView = mat4(1);
in vec3 Position; in vec3 Position;
in vec2 TexCoord; in vec2 TexCoord;
@ -24,7 +23,7 @@ in vec2 TexCoord;
out vec2 vTexCoord; out vec2 vTexCoord;
void main() { void main() {
gl_Position = Projection * ModelView * vec4(Position, 1); gl_Position = mvp * vec4(Position, 1);
vTexCoord = TexCoord ; vTexCoord = TexCoord ;
} }