summaryrefslogtreecommitdiffstats
path: root/src/runtimerender/rendererimpl/Qt3DSRendererImpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/runtimerender/rendererimpl/Qt3DSRendererImpl.h')
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImpl.h43
1 files changed, 37 insertions, 6 deletions
diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImpl.h b/src/runtimerender/rendererimpl/Qt3DSRendererImpl.h
index 6311a2d..cd104df 100644
--- a/src/runtimerender/rendererimpl/Qt3DSRendererImpl.h
+++ b/src/runtimerender/rendererimpl/Qt3DSRendererImpl.h
@@ -66,6 +66,7 @@
#include "Qt3DSRenderShaderCache.h"
#include "Qt3DSRenderProfiler.h"
#include "Qt3DSRenderDefaultMaterialShaderGenerator.h"
+#include "Qt3DSRenderLight.h"
namespace qt3ds {
namespace render {
@@ -150,9 +151,12 @@ namespace render {
operator STextShader *() { return m_Shader; }
};
- class QT3DS_AUTOTEST_EXPORT Qt3DSRendererImpl : public IQt3DSRenderer, public IRenderWidgetContext
+ class QT3DS_AUTOTEST_EXPORT Qt3DSRendererImpl : public IQt3DSRenderer,
+ public IRenderWidgetContext
{
typedef nvhash_map<SShaderDefaultMaterialKey, SShaderGeneratorGeneratedShader *> TShaderMap;
+ typedef nvhash_map<SShaderDefaultMaterialKey, SRenderableDepthPrepassShader *>
+ TShadowShaderMap;
typedef nvhash_map<CRegisteredString, NVScopedRefCounted<NVRenderConstantBuffer>>
TStrConstanBufMap;
typedef nvhash_map<SRenderInstanceId, NVScopedRefCounted<SLayerRenderData>,
@@ -210,11 +214,12 @@ namespace render {
Option<NVScopedRefCounted<SLayerProgAABlendShader>> m_LayerProgAAShader;
TShaderMap m_Shaders;
+ TShaderMap m_DepthShaders;
+ TShadowShaderMap m_ShadowMapShaders;
+ TShadowShaderMap m_ShadowCubeShaders;
TStrConstanBufMap m_ConstantBuffers; ///< store the the shader constant buffers
// Option is true if we have attempted to generate the shader.
// This does not mean we were successul, however.
- Option<NVScopedRefCounted<SDefaultMaterialRenderableDepthShader>>
- m_DefaultMaterialDepthPrepassShader;
Option<NVScopedRefCounted<SRenderableDepthPrepassShader>> m_DepthPrepassShader;
Option<NVScopedRefCounted<SRenderableDepthPrepassShader>> m_DepthPrepassShaderDisplaced;
Option<NVScopedRefCounted<SRenderableDepthPrepassShader>> m_DepthTessLinearPrepassShader;
@@ -295,6 +300,10 @@ namespace render {
QHash<SLayer *, SLayerRenderData *> m_initialPrepareData;
QSet<SGraphObject *> m_materialClearDirty;
+ bool m_alphaTest = false;
+ float m_alphaOp = 1.0f;
+ float m_alphaRef = 1.0f;
+
public:
Qt3DSRendererImpl(IQt3DSRenderContext &ctx);
virtual ~Qt3DSRendererImpl();
@@ -313,6 +322,23 @@ namespace render {
void EnableLayerGpuProfiling(bool inEnabled) override;
bool IsLayerGpuProfilingEnabled() const override { return m_LayerGPuProfilingEnabled; }
+ void setAlphaTest(bool enable, float op, float ref) override
+ {
+ m_alphaTest = enable;
+ m_alphaOp = op;
+ m_alphaRef = ref;
+ }
+
+ bool alphaTestEnabled() const
+ {
+ return m_alphaTest;
+ }
+
+ QT3DSVec2 alphaOpRef() const
+ {
+ return QT3DSVec2(m_alphaOp, m_alphaRef);
+ }
+
// Calls prepare layer for render
// and then do render layer.
bool PrepareLayerForRender(SLayer &inLayer, const QT3DSVec2 &inViewportDimensions,
@@ -411,14 +437,19 @@ namespace render {
const char8_t *inFrame);
NVRenderShaderProgram *GenerateShader(SSubsetRenderable &inRenderable,
- TShaderFeatureSet inFeatureSet);
+ TShaderFeatureSet inFeatureSet, bool depth);
+ NVRenderShaderProgram *GenerateShadowShader(SSubsetRenderable &inRenderable,
+ TShaderFeatureSet inFeatureSet,
+ RenderLightTypes::Enum lightType);
SShaderGeneratorGeneratedShader *GetShader(SSubsetRenderable &inRenderable,
- TShaderFeatureSet inFeatureSet);
+ TShaderFeatureSet inFeatureSet, bool depth);
+ SRenderableDepthPrepassShader *GetShadowShader(SSubsetRenderable &inRenderable,
+ TShaderFeatureSet inFeatureSet,
+ RenderLightTypes::Enum lightType);
SDefaultAoPassShader *GetDefaultAoPassShader(TShaderFeatureSet inFeatureSet);
SDefaultAoPassShader *GetFakeDepthShader(TShaderFeatureSet inFeatureSet);
SDefaultAoPassShader *GetFakeCubeDepthShader(TShaderFeatureSet inFeatureSet);
- SDefaultMaterialRenderableDepthShader *GetRenderableDepthShader();
SRenderableDepthPrepassShader *GetParaboloidDepthShader(TessModeValues::Enum inTessMode);
SRenderableDepthPrepassShader *GetParaboloidDepthNoTessShader();