summaryrefslogtreecommitdiffstats
path: root/src/runtimerender
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtimerender')
-rw-r--r--src/runtimerender/Qt3DSRenderContextCore.h4
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp18
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.cpp3
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImplShaders.h4
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();