28QSSGFrameData::Result QSSGFrameData::getRenderResult(RenderResult id)
const
30 using RenderResultT = std::underlying_type_t<RenderResult>;
31 const QSSGRhiRenderableTexture *res =
nullptr;
32 auto *data = QSSGLayerRenderData::getCurrent(*m_ctx->renderer());
33 if (QSSG_GUARD(data && (std::size(data->renderResults) > RenderResultT(id))))
34 res = data->getRenderResult(id);
36 return res ? Result{ res->texture, res->depthStencil } : Result{};
51void QSSGFrameData::scheduleRenderResults(RenderResults results)
const
53 auto *data = QSSGLayerRenderData::getCurrent(*m_ctx->renderer());
54 QSSG_ASSERT(data,
return);
56 auto &prepResult = data->layerPrepResult;
58 if (prepResult.getState() != QSSGLayerRenderPreparationResult::State::DataPrep) {
59 qWarning(
"QSSGFrameData::requestRenderResults: "
60 "Requesting render results should only be done during the prepare phase in prepareData().");
64 if (results.testFlag(QSSGFrameData::RenderResult::DepthTexture))
65 prepResult.flags.setRequiresDepthTexture(
true);
66 if (results.testFlag(QSSGFrameData::RenderResult::ScreenTexture))
67 prepResult.flags.setRequiresScreenTexture(
true);
68 if (results.testFlag(RenderResult::AoTexture)) {
70 prepResult.flags.setRequiresSsaoPass(
true);
71 prepResult.flags.setRequiresDepthTexture(
true);
73 if (results.testFlag(RenderResult::NormalTexture))
74 prepResult.flags.setRequiresNormalTexture(
true);
90QSSGCameraId QSSGFrameData::activeCamera()
const
92 QSSGCameraId ret { QSSGCameraId::Invalid };
93 auto *data = QSSGLayerRenderData::getCurrent(*m_ctx->renderer());
94 QSSG_ASSERT(data,
return ret);
95 if (
auto *ac = data->activeCamera())
96 ret = QSSGRenderGraphObjectUtils::getCameraId(*ac);
109QSSGNodeIdList QSSGFrameData::getLayerNodes(quint32 layerMask, TypeMask typeMask)
const
111 QSSG_ASSERT(m_ctx,
return {});
113 auto *layer = getCurrent();
114 QSSG_ASSERT_X(layer,
"No active layer for renderer!",
return {});
115 const auto &layerNodes = layer->layerNodes;
117 return QSSGLayerRenderData::filter(layerNodes, layerMask, typeMask);;
124QSSGNodeIdList QSSGFrameData::getLayerNodes(QSSGCameraId cameraId, TypeMask typeMask)
const
126 auto *camera = QSSGRenderGraphObjectUtils::getNode<QSSGRenderCamera>(QSSGNodeId(cameraId));
127 const quint32 layerMask = camera ? camera->tag.value() : 0 ;
129 return (layerMask != 0) ? getLayerNodes(layerMask, typeMask) : QSSGNodeIdList{};
170QSSGRenderExtension::QSSGRenderExtension(Type inType, FlagT inFlags)
171 : QSSGRenderGraphObject(
static_cast<Type>(TypeT(inType) | TypeT(QSSGRenderGraphObject::BaseType::Extension)), inFlags)
173 Q_ASSERT_X((QSSGRenderGraphObjectUtils::getBaseType(type) == QSSGRenderGraphObject::BaseType::Extension) ||
174 (QSSGRenderGraphObjectUtils::getBaseType(type) == (QSSGRenderGraphObject::BaseType::Extension | QSSGRenderGraphObject::BaseType::User)),
175 "QSSGRenderExtension()",
176 "The type must be a combination of QSSGRenderGraphObject::BaseType::Extension "
177 "and optionally QSSGRenderGraphObject::BaseType::User.");