diff options
Diffstat (limited to 'src/runtime/dragon/qdragonrenderaspect.cpp')
-rw-r--r-- | src/runtime/dragon/qdragonrenderaspect.cpp | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/src/runtime/dragon/qdragonrenderaspect.cpp b/src/runtime/dragon/qdragonrenderaspect.cpp index e6d57c0..2f53d16 100644 --- a/src/runtime/dragon/qdragonrenderaspect.cpp +++ b/src/runtime/dragon/qdragonrenderaspect.cpp @@ -216,60 +216,65 @@ QDragonRenderAspect::QDragonRenderAspect(Renderer::RenderType renderType) registerBackendType<Quick::QScene2D>(m_scene2ds); // Custom functors - registerBackendType<QRenderSettings>(QSharedPointer<RenderSettingsFunctor>::create(this)); + registerBackendType<QRenderSettings>(QSharedPointer<RenderSettingsFunctor>::create(this, &m_nodeTree)); // Framegraph registerBackendType<QFrameGraphNode>( - NodeFunctorPtr<FrameGraphNode, FrameGraphNode>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, FrameGraphNode>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QCameraSelector>( - NodeFunctorPtr<FrameGraphNode, CameraSelector>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, CameraSelector>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QClearBuffers>( - NodeFunctorPtr<FrameGraphNode, ClearBuffers>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, ClearBuffers>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QDispatchCompute>( - NodeFunctorPtr<FrameGraphNode, DispatchCompute>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, DispatchCompute>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QFrustumCulling>( - NodeFunctorPtr<FrameGraphNode, FrustumCulling>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, FrustumCulling>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QLayerFilter>( - NodeFunctorPtr<FrameGraphNode, LayerFilterNode>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, LayerFilterNode>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QNoDraw>( - NodeFunctorPtr<FrameGraphNode, NoDraw>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, NoDraw>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QRenderPassFilter>( - NodeFunctorPtr<FrameGraphNode, RenderPassFilter>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, RenderPassFilter>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QRenderStateSet>( - NodeFunctorPtr<FrameGraphNode, StateSetNode>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, StateSetNode>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QRenderSurfaceSelector>( - NodeFunctorPtr<FrameGraphNode, RenderSurfaceSelector>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, RenderSurfaceSelector>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QRenderTargetSelector>( - NodeFunctorPtr<FrameGraphNode, RenderTargetSelector>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, RenderTargetSelector>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QSortPolicy>( - NodeFunctorPtr<FrameGraphNode, SortPolicy>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, SortPolicy>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QTechniqueFilter>( - NodeFunctorPtr<FrameGraphNode, TechniqueFilter>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, TechniqueFilter>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QViewport>( - NodeFunctorPtr<FrameGraphNode, ViewportNode>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, ViewportNode>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QRenderCapture>( - NodeFunctorPtr<FrameGraphNode, RenderCapture>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, RenderCapture>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QBufferCapture>( - NodeFunctorPtr<FrameGraphNode, BufferCapture>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, BufferCapture>::create(&m_nodeTree, &m_frameGraphNodesContainer)); // TODO add this back when MemoryBarrier is expanded correctly on MinGW... // registerBackendType<QMemoryBarrier>( // NodeFunctorPtr<FrameGraphNode, MemoryBarrier>::create(&m_frameGraphNodesContainer)); registerBackendType<QProximityFilter>( - NodeFunctorPtr<FrameGraphNode, ProximityFilter>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, ProximityFilter>::create(&m_nodeTree, &m_frameGraphNodesContainer)); registerBackendType<QBlitFramebuffer>( - NodeFunctorPtr<FrameGraphNode, BlitFramebuffer>::create(&m_frameGraphNodesContainer)); + NodeFunctorPtr<FrameGraphNode, BlitFramebuffer>::create(&m_nodeTree, &m_frameGraphNodesContainer)); + + // Catch-all for other nodes. Necessary to gather information about the hierarchy. + registerBackendType<Qt3DCore::QNode>(m_otherNodes); // TODO could be done in header or initializer // TODO syntax could be improved, consider adding a createEdge/setInput function m_calculateWorldTransforms = TaskPtr<ValueContainer<Matrix4x4>>::create( - calculateWorldTransforms, Self, m_entities, m_transforms, m_rootEntitySource); + calculateWorldTransforms, Self, &m_nodeTree, m_entities, m_transforms, m_rootEntitySource); + + m_loadBuffers = TaskPtr<LoadedBuffers>::create(loadBuffers, Self, m_buffers); m_calculateLocalBoundingVolumes = TaskPtr<LocalBoundingVolumes>::create( calculateLocalBoundingVolumes, Self, m_entities, m_attributes, - m_geometryRenderers, m_geometries, m_buffers); + m_geometryRenderers, m_geometries, m_loadBuffers); m_calculateWorldBoundingVolumes = TaskPtr<WorldBoundingVolumes>::create( calculateWorldBoundingVolumes, Self, m_calculateLocalBoundingVolumes, @@ -293,13 +298,12 @@ QDragonRenderAspect::QDragonRenderAspect(Renderer::RenderType renderType) m_renderTargetOutputs, m_shareContextSource); - // TODO might as well upload them as well... - m_loadBuffers = TaskPtr<LoadedBuffers>::create(loadBuffers, Self, m_buffers); // m_loadShaders = TaskPtr<ValueContainer<GLShader>>::create(uploadShaders, Self, m_shaders); - m_generateFrameGraph = TaskPtr<TreeInfo>::create(generateInheritanceTable<ValueContainer<FrameGraphNode>>, + m_generateFrameGraph = TaskPtr<TreeInfo>::create(generateInheritanceTable, Self, + &m_nodeTree, m_frameGraphNodes, m_rootFrameGraphNodeSource); |