diff --git a/src/runtimerender/graphobjects/qssgrenderlayer_p.h b/src/runtimerender/graphobjects/qssgrenderlayer_p.h index a2400482d0769b5702e6823d565621a6c369b8c9..54724e92bfc2524a299758160b5178820aae3e71 100644 --- a/src/runtimerender/graphobjects/qssgrenderlayer_p.h +++ b/src/runtimerender/graphobjects/qssgrenderlayer_p.h @@ -157,7 +157,7 @@ struct Q_QUICK3DRUNTIMERENDER_EXPORT QSSGRenderLayer : public QSSGRenderNode qint32 aoSamplerate; bool aoDither; - // Direct occlusion + // Direct occlusion [NOT SUPPORTED] float shadowStrength; float shadowDist; float shadowSoftness; diff --git a/src/runtimerender/qssgrendercustommaterialsystem.cpp b/src/runtimerender/qssgrendercustommaterialsystem.cpp index a1cf1633a32698269df7520f0a3853fc21072116..10ecd1b03611a7c0d4c0eb96e3da088e910b9511 100644 --- a/src/runtimerender/qssgrendercustommaterialsystem.cpp +++ b/src/runtimerender/qssgrendercustommaterialsystem.cpp @@ -2045,6 +2045,32 @@ void QSSGMaterialSystem::prepareRhiSubset(QSSGCustomMaterialRenderContext &custo } } + if (shaderPipeline->depthTexture()) { + int binding = bindingForTexture(QByteArrayLiteral("depthTexture"), samplerVars); + if (binding >= 0) { + samplerBindingsSpecified.setBit(binding); + // nearest min/mag, no mipmap + QRhiSampler *sampler = rhiCtx->sampler({ QRhiSampler::Nearest, QRhiSampler::Nearest, QRhiSampler::None, + QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge }); + bindings.append(QRhiShaderResourceBinding::sampledTexture(binding, + QRhiShaderResourceBinding::FragmentStage, + shaderPipeline->depthTexture(), sampler)); + } // else ignore, not an error + } + + if (shaderPipeline->ssaoTexture()) { + int binding = bindingForTexture(QByteArrayLiteral("aoTexture"), samplerVars); + if (binding >= 0) { + samplerBindingsSpecified.setBit(binding); + // linear min/mag, no mipmap + QRhiSampler *sampler = rhiCtx->sampler({ QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None, + QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge }); + bindings.append(QRhiShaderResourceBinding::sampledTexture(binding, + QRhiShaderResourceBinding::FragmentStage, + shaderPipeline->ssaoTexture(), sampler)); + } // else ignore, not an error + } + QVarLengthArray<QRhiShaderResourceBinding::TextureAndSampler, 16> texSamplers; QRhiSampler *dummySampler = rhiCtx->sampler({ QRhiSampler::Nearest, QRhiSampler::Nearest, QRhiSampler::None, QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge }); diff --git a/src/runtimerender/rendererimpl/qssgrendererimpllayerrenderdata_rhi.cpp b/src/runtimerender/rendererimpl/qssgrendererimpllayerrenderdata_rhi.cpp index b729ab04c5cd02f27bf9abe9877b3cb267198cd0..580b718a914314182fcf05bad923809401b5e270 100644 --- a/src/runtimerender/rendererimpl/qssgrendererimpllayerrenderdata_rhi.cpp +++ b/src/runtimerender/rendererimpl/qssgrendererimpllayerrenderdata_rhi.cpp @@ -343,7 +343,8 @@ static bool rhiPrepareDepthPassForObject(QSSGRhiContext *rhiCtx, } } else if (obj->renderableFlags.isCustomMaterialMeshSubset()) { - // ### TODO custom materials + QSSGCustomMaterialRenderable &renderable(static_cast<QSSGCustomMaterialRenderable &>(*obj)); + ps->cullMode = QSSGRhiGraphicsPipelineState::toCullMode(renderable.material.cullMode); } // the rest is common diff --git a/src/runtimerender/res/effectlib/rhi/SSAOCustomMaterial.glsllib b/src/runtimerender/res/effectlib/rhi/SSAOCustomMaterial.glsllib index bd1d500fe56031adba85cf3b6ca1a920edfdb85b..762e51c0e6dfc30aa93199ac3292dde031983866 100644 --- a/src/runtimerender/res/effectlib/rhi/SSAOCustomMaterial.glsllib +++ b/src/runtimerender/res/effectlib/rhi/SSAOCustomMaterial.glsllib @@ -35,7 +35,7 @@ /*{ "uniforms": [ { "type": "sampler2D", "name": "depthTexture", "condition": "QSSG_ENABLE_SSDO" }, - { "type": "sampler2D", "name": "aoTexture" } + { "type": "sampler2D", "name": "aoTexture" , "condition": "QSSG_ENABLE_SSAO" } ] }*/ #endif // QQ3D_SHADER_META