From bc4a0aa611242083403fd11f791f51cbab8d4f3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antti=20M=C3=A4=C3=A4tt=C3=A4?= Date: Thu, 29 Aug 2019 15:03:13 +0300 Subject: Implement two-pass rendering for transparent objects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If object has both opaque parts and transparent parts it will be rendered incorrectly due to no z-buffering. Add two-pass method to render the opaque and transparent parts separately. - Add opaque pixel check to transparency check of images. - Add alpha test rendering to default material shadows too. Task-number: QT3DS-3515 Change-Id: I9700b8fb463df9143c5bb9cbe66c7570081ebf5c Reviewed-by: Miikka Heikkinen Reviewed-by: Tomi Korpipää --- .../Qt3DSRenderDefaultMaterialShaderGenerator.h | 24 +++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h') diff --git a/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h b/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h index 7453e1d..871ab1b 100644 --- a/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h +++ b/src/runtimerender/Qt3DSRenderDefaultMaterialShaderGenerator.h @@ -103,13 +103,35 @@ namespace render { NVDataRef inLights, SRenderableImage *inFirstImage, bool inHasTransparency, const char8_t *inVertexPipelineName, const char8_t *inCustomMaterialName = "") override = 0; + // generate default material shader for depth only pass + virtual NVRenderShaderProgram *GenerateDepthPassShader( + const SGraphObject &inMaterial, SShaderDefaultMaterialKey inShaderDescription, + IShaderStageGenerator &inVertexPipeline, TShaderFeatureSet inFeatureSet, + SRenderableImage *inFirstImage, bool inHasTransparency, + const char8_t *inVertexPipelineName, const char8_t *inCustomMaterialName = "") = 0; + + // generate default material shader cube depth shader + virtual NVRenderShaderProgram *GenerateCubeDepthShader( + const SGraphObject &inMaterial, SShaderDefaultMaterialKey inShaderDescription, + IShaderStageGenerator &inVertexPipeline, TShaderFeatureSet inFeatureSet, + SRenderableImage *inFirstImage, bool inHasTransparency, + const char8_t *inVertexPipelineName, const char8_t *inCustomMaterialName = "") = 0; + + // generate default material shader orthographic depth shader + virtual NVRenderShaderProgram *GenerateOrthoDepthShader( + const SGraphObject &inMaterial, SShaderDefaultMaterialKey inShaderDescription, + IShaderStageGenerator &inVertexPipeline, TShaderFeatureSet inFeatureSet, + SRenderableImage *inFirstImage, bool inHasTransparency, + const char8_t *inVertexPipelineName, const char8_t *inCustomMaterialName = "") = 0; + // Also sets the blend function on the render context. virtual void SetMaterialProperties(NVRenderShaderProgram &inProgram, const SGraphObject &inMaterial, const QT3DSVec2 &inCameraVec, const QT3DSMat44 &inModelViewProjection, const QT3DSMat33 &inNormalMatrix, const QT3DSMat44 &inGlobalTransform, SRenderableImage *inFirstImage, QT3DSF32 inOpacity, - SLayerGlobalRenderProperties inRenderProperties) override = 0; + SLayerGlobalRenderProperties inRenderProperties, + const QT3DSVec2 &alphaOpRef) override = 0; static IDefaultMaterialShaderGenerator & CreateDefaultMaterialShaderGenerator(IQt3DSRenderContext &inRenderContext); -- cgit v1.2.3