diff options
Diffstat (limited to 'src/runtimerender')
4 files changed, 26 insertions, 3 deletions
diff --git a/src/runtimerender/Qt3DSRenderContextCore.h b/src/runtimerender/Qt3DSRenderContextCore.h index dab5be9..9a26876 100644 --- a/src/runtimerender/Qt3DSRenderContextCore.h +++ b/src/runtimerender/Qt3DSRenderContextCore.h @@ -57,7 +57,9 @@ namespace render { enum Enum { Mono, TopBottom, - LeftRight + LeftRight, + AnaglyphRedCyan, + AnaglyphGreenMagenta }; }; diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp index 04b08c1..99d5c45 100644 --- a/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp +++ b/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp @@ -1142,6 +1142,24 @@ namespace render { theShader->m_Dimensions.Set(inDimensions); theShader->m_Sampler.Set(&inQuadTexture); + // Set anaglyph color multiplier based on mode & current eye + // Default non-anaglyph modes use just vec4(1.0,1.0,1.0,1.0) + auto stereoMode = m_qt3dsContext.GetStereoMode(); + auto stereoView = m_qt3dsContext.GetStereoView(); + QT3DSVec4 anaglyphColor(1.0); + if (stereoMode == StereoModes::AnaglyphRedCyan) { + if (stereoView == StereoViews::Left) + anaglyphColor = QT3DSVec4(1.0, 0.0, 0.0, 0.0); + else + anaglyphColor = QT3DSVec4(0.0, 1.0, 1.0, 0.0); + } else if (stereoMode == StereoModes::AnaglyphGreenMagenta) { + if (stereoView == StereoViews::Left) + anaglyphColor = QT3DSVec4(0.0, 1.0, 0.0, 0.0); + else + anaglyphColor = QT3DSVec4(1.0, 0.0, 1.0, 0.0); + } + theShader->m_anaglyphColor.Set(anaglyphColor); + GenerateXYQuad(); theContext.SetInputAssembler(m_QuadInputAssembler); theContext.Draw(NVRenderDrawMode::Triangles, m_QuadIndexBuffer->GetNumIndices(), 0); diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp index c33aaeb..d69e46e 100644 --- a/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp +++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp @@ -2430,10 +2430,11 @@ namespace render { vertexGenerator.Append("}"); fragmentGenerator.AddUniform("layer_image", "sampler2D"); + fragmentGenerator.AddUniform("anaglyphColor", "vec4"); fragmentGenerator.Append("void main() {"); fragmentGenerator.Append("\tvec2 theCoords = uv_coords;\n"); fragmentGenerator.Append("\tvec4 theLayerTexture = texture2D( layer_image, theCoords );\n"); - fragmentGenerator.Append("\tfragOutput = theLayerTexture;\n"); + fragmentGenerator.Append("\tfragOutput = theLayerTexture * anaglyphColor;\n"); fragmentGenerator.Append("}"); NVRenderShaderProgram *theShader = GetProgramGenerator().CompileGeneratedShader( "layer shader", SShaderCacheProgramFlags(), TShaderFeatureSet()); diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.h b/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.h index 9753256..0d77121 100644 --- a/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.h +++ b/src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.h @@ -341,7 +341,8 @@ namespace render { NVRenderCachedShaderProperty<QT3DSVec2> m_Dimensions; // The fourth member of text color is the opacity NVRenderCachedShaderProperty<NVRenderTexture2D *> m_Sampler; - + // Color multiplier for anaglyph stereo modes + NVRenderCachedShaderProperty<QT3DSVec4> m_anaglyphColor; volatile QT3DSI32 mRefCount; SLayerSceneShader(NVRenderShaderProgram &inShader) @@ -349,6 +350,7 @@ namespace render { , m_MVP("model_view_projection", inShader) , m_Dimensions("layer_dimensions", inShader) , m_Sampler("layer_image", inShader) + , m_anaglyphColor("anaglyphColor", inShader) , mRefCount(0) { m_Shader.addRef(); |