119 if (renderImage.m_texture) {
120 const auto &rhiCtx = data.contextInterface()->rhiContext();
121 const auto &renderer = data.contextInterface()->renderer();
122 QRhiResourceUpdateBatch *rub = rhiCtx->rhi()->nextResourceUpdateBatch();
123 renderer->rhiQuadRenderer()->prepareQuad(rhiCtx.get(), rub);
127 virtual void render(QSSGFrameData &data)
final
129 if (renderImage.m_texture) {
130 const auto &rhiCtx = data.contextInterface()->rhiContext();
131 const auto &renderer = data.contextInterface()->renderer();
132 const auto &shaderCache = data.contextInterface()->shaderCache();
134 QSSGRhiGraphicsPipelineState ps = data.getPipelineState();
135 QRhiCommandBuffer *cb = rhiCtx->commandBuffer();
136 cb->debugMarkBegin(QByteArrayLiteral(
"QtQuick3D Blit Pass"));
138 const auto tonemapMode = QSSGLayerRenderData::getCurrent(data)->layer.tonemapMode;
139 const auto &shaderPipeline = shaderCache->getBuiltInRhiShaders().getRhiSimpleQuadShader(ps.viewCount, tonemapMode);
141 QRhiSampler *sampler = rhiCtx->sampler({ QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
142 QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge });
143 QSSGRhiShaderResourceBindingList bindings;
144 bindings.addTexture(0, QRhiShaderResourceBinding::FragmentStage, renderImage.m_texture, sampler);
151 if (!srb || bindings != srbBindings) {
157 srb = rhiCtx->rhi()->newShaderResourceBindings();
158 srb->setBindings(bindings.v, bindings.v + bindings.p);
159 srbBindings = bindings;
160 if (!srb->create()) {
161 qWarning(
"Failed to build srb for the simple quad renderer");
169 QSSGRhiGraphicsPipelineStatePrivate::setShaderPipeline(ps, shaderPipeline.get());
170 renderer->rhiQuadRenderer()->recordRenderQuad(rhiCtx.get(), &ps, srb, rhiCtx->mainRenderPassDescriptor(), QSSGRhiQuadRenderer::UvCoords | QSSGRhiQuadRenderer::PremulBlend);