62 m_extensionId = m_ext ? QQuick3DExtensionHelpers::getExtensionId(*m_ext) : QSSGExtensionId::Invalid;
63 if (QQuick3DExtensionHelpers::isNull(m_extensionId))
76 data.scheduleRenderResults(QSSGFrameData::RenderResults(m_builtInPass));
79 QSSGFrameData::Result extResult = data.getRenderResult(m_builtInPass);
80 if (extResult.texture) {
81 QSSGRenderExtensionHelpers::registerRenderResult(data, m_extensionId, extResult.texture);
90 if (userPassId != QSSGResourceId::Invalid) {
92 data.scheduleRenderResults(userPassId);
95 QSSGFrameData::Result extResult = data.getRenderResult(userPassId, attachmentSelector);
96 if (extResult.texture) {
98 QSSGRenderExtensionHelpers::registerRenderResult(data, m_extensionId, extResult.texture);
114 Q_ASSERT(!QQuick3DExtensionHelpers::isNull(m_extensionId));
116 QSSGFrameData::Result extResult;
118 extResult = data.getRenderResult(m_builtInPass);
119 else if (m_sourceType == SourceType::UserPass && userPassId != QSSGResourceId::Invalid)
120 extResult = data.getRenderResult(userPassId, attachmentSelector);
122 if (userPassId != QSSGResourceId::Invalid) {
123 if (extResult.texture) {
124 QSSGRenderExtensionHelpers::registerRenderResult(data, m_extensionId, extResult.texture);
173QSSGRenderGraphObject *QQuick3DRenderOutputProvider::updateSpatialNode(QSSGRenderGraphObject *node)
177 node =
new QSSGRenderOutputProviderExtension(
this);
179 QQuick3DTextureProviderExtension::updateSpatialNode(node);
181 QSSGRenderOutputProviderExtension *providerNode =
static_cast<QSSGRenderOutputProviderExtension *>(node);
183 providerNode->m_isDirty = (m_dirtyAttributes != 0);
185 if (m_dirtyAttributes & TextureSourceDirty) {
186 switch (m_textureSource) {
187 case QQuick3DRenderOutputProvider::TextureSource::None:
188 providerNode->m_sourceType = QSSGRenderOutputProviderExtension::SourceType::None;
191 case QQuick3DRenderOutputProvider::TextureSource::UserPassTexture:
192 providerNode->m_sourceType = QSSGRenderOutputProviderExtension::SourceType::UserPass;
194 case QQuick3DRenderOutputProvider::TextureSource::AoTexture:
195 providerNode->m_sourceType = QSSGRenderOutputProviderExtension::SourceType::BuiltInPass;
196 providerNode->m_builtInPass = QSSGFrameData::RenderResult::AoTexture;
198 case QQuick3DRenderOutputProvider::TextureSource::DepthTexture:
199 providerNode->m_sourceType = QSSGRenderOutputProviderExtension::SourceType::BuiltInPass;
200 providerNode->m_builtInPass = QSSGFrameData::RenderResult::DepthTexture;
202 case QQuick3DRenderOutputProvider::TextureSource::ScreenTexture:
203 providerNode->m_sourceType = QSSGRenderOutputProviderExtension::SourceType::BuiltInPass;
204 providerNode->m_builtInPass = QSSGFrameData::RenderResult::ScreenTexture;
206 case QQuick3DRenderOutputProvider::TextureSource::NormalTexture:
207 providerNode->m_sourceType = QSSGRenderOutputProviderExtension::SourceType::BuiltInPass;
208 providerNode->m_builtInPass = QSSGFrameData::RenderResult::NormalTexture;
210 case QQuick3DRenderOutputProvider::TextureSource::MotionVectorTexture:
211 providerNode->m_sourceType = QSSGRenderOutputProviderExtension::SourceType::BuiltInPass;
212 providerNode->m_builtInPass = QSSGFrameData::RenderResult::MotionVectorTexture;
217 if (m_dirtyAttributes & UserPassTextureDirty) {
219 QSSGResourceId userPassId = m_renderPass ? QQuick3DExtensionHelpers::getResourceId(*m_renderPass) : QSSGResourceId::Invalid;
220 providerNode->userPassId = userPassId;
221 providerNode->attachmentSelector = QSSGFrameData::AttachmentSelector(m_attachmentSelector);
224 m_dirtyAttributes = 0;
261void QQuick3DRenderOutputProvider::setTextureSource(TextureSource newTextureSource)
263 if (m_textureSource == newTextureSource)
265 m_textureSource = newTextureSource;
266 emit textureSourceChanged();
267 markDirty(TextureSourceDirty);
284void QQuick3DRenderOutputProvider::setRenderPass(QQuick3DRenderPass *newRenderPass)
286 if (m_renderPass == newRenderPass)
289 QQuick3DObjectPrivate::attachWatcher(
this, &QQuick3DRenderOutputProvider::setRenderPass, newRenderPass, m_renderPass);
291 m_renderPass = newRenderPass;
293 setTextureSource(m_renderPass ? TextureSource::UserPassTexture : TextureSource::None);
295 markDirty(UserPassTextureDirty);
297 emit renderPassChanged();