summaryrefslogtreecommitdiffstats
path: root/src/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp')
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/src/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp b/src/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
index 2705b18..095badc 100644
--- a/src/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
+++ b/src/runtimerender/rendererimpl/Qt3DSRenderableObjects.cpp
@@ -290,9 +290,31 @@ namespace render {
}
}
- context.SetCullingEnabled(true);
+ context.SetCullingEnabled(m_Material.m_CullMode != DefaultMaterialCullMode::None);
context.SetInputAssembler(m_Subset.m_InputAssembler);
- context.Draw(m_Subset.m_PrimitiveType, m_Subset.m_Count, m_Subset.m_Offset);
+ if (m_Material.m_CullMode != DefaultMaterialCullMode::None) {
+ NVScopedRefCounted<qt3ds::render::NVRenderRasterizerState> rsdefaultstate =
+ context.CreateRasterizerState(0.0, 0.0, qt3ds::render::NVRenderFaces::Back);
+ qt3ds::render::NVRenderFaces::Enum face = qt3ds::render::NVRenderFaces::Back;
+ switch (m_Material.m_CullMode) {
+ case DefaultMaterialCullMode::Front:
+ face = qt3ds::render::NVRenderFaces::Front;
+ break;
+ case DefaultMaterialCullMode::FrontAndBack:
+ face = qt3ds::render::NVRenderFaces::FrontAndBack;
+ break;
+ default:
+ break;
+ }
+
+ NVScopedRefCounted<qt3ds::render::NVRenderRasterizerState> rasterState =
+ context.CreateRasterizerState(0.0, 0.0, face);
+ context.SetRasterizerState(rasterState);
+ context.Draw(m_Subset.m_PrimitiveType, m_Subset.m_Count, m_Subset.m_Offset);
+ context.SetRasterizerState(rsdefaultstate);
+ } else {
+ context.Draw(m_Subset.m_PrimitiveType, m_Subset.m_Count, m_Subset.m_Offset);
+ }
}
void SSubsetRenderable::RenderShadow(const QT3DSVec2 &inCameraVec,