diff options
-rw-r--r-- | src/doc/src/qt3drender-framegraph.qdoc | 128 |
1 files changed, 81 insertions, 47 deletions
diff --git a/src/doc/src/qt3drender-framegraph.qdoc b/src/doc/src/qt3drender-framegraph.qdoc index a1fe7df94..2224a1c8d 100644 --- a/src/doc/src/qt3drender-framegraph.qdoc +++ b/src/doc/src/qt3drender-framegraph.qdoc @@ -182,7 +182,7 @@ \badcode Viewport { - rect: Qt.rect(0.0, 0.0, 1.0, 1.0) + normalizedRect: Qt.rect(0.0, 0.0, 1.0, 1.0) property alias camera: cameraSelector.camera ClearBuffers { @@ -221,7 +221,7 @@ \badcode Viewport { - rect: Qt.rect(0.0, 0.0, 1.0, 1.0) + normalizedRect: Qt.rect(0.0, 0.0, 1.0, 1.0) property alias camera: cameraSelector.camera CameraSelector { @@ -237,7 +237,7 @@ \badcode CameraSelector { Viewport { - rect: Qt.rect(0.0, 0.0, 1.0, 1.0) + normalizedRect: Qt.rect(0.0, 0.0, 1.0, 1.0) ClearBuffers { buffers: ClearBuffers.ColorDepthBuffer @@ -259,7 +259,7 @@ \badcode Viewport { id: mainViewport - rect: Qt.rect(0, 0, 1, 1) + normalizedRect: Qt.rect(0, 0, 1, 1) property alias Camera: cameraSelectorTopLeftViewport.camera property alias Camera: cameraSelectorTopRightViewport.camera property alias Camera: cameraSelectorBottomLeftViewport.camera @@ -271,25 +271,25 @@ Viewport { id: topLeftViewport - rect: Qt.rect(0, 0, 0.5, 0.5) + normalizedRect: Qt.rect(0, 0, 0.5, 0.5) CameraSelector { id: cameraSelectorTopLeftViewport } } Viewport { id: topRightViewport - rect: Qt.rect(0.5, 0, 0.5, 0.5) + normalizedRect: Qt.rect(0.5, 0, 0.5, 0.5) CameraSelector { id: cameraSelectorTopRightViewport } } Viewport { id: bottomLeftViewport - rect: Qt.rect(0, 0.5, 0.5, 0.5) + normalizedRect: Qt.rect(0, 0.5, 0.5, 0.5) CameraSelector { id: cameraSelectorBottomLeftViewport } } Viewport { id: bottomRightViewport - rect: Qt.rect(0.5, 0.5, 0.5, 0.5) + normalizedRect: Qt.rect(0.5, 0.5, 0.5, 0.5) CameraSelector { id: cameraSelectorBottomRightViewport } } } @@ -404,48 +404,84 @@ many games due to the ability to use large numbers of dynamic lights at the expense of additional GPU memory usage. - \badcode - Viewport { - rect: Qt.rect(0.0, 0.0, 1.0, 1.0) +\qml +Viewport { + id: root + normalizedRect: Qt.rect(0.0, 0.0, 1.0, 1.0) + + property GBuffer gBuffer + property alias camera: sceneCameraSelector.camera + property alias sceneLayer: sceneLayerFilter.layers + property alias screenQuadLayer: screenQuadLayerFilter.layers - property alias gBuffer: gBufferTargetSelector.target - property alias camera: sceneCameraSelector.camera + RenderSurfaceSelector { - LayerFilter { - layers: "scene" + CameraSelector { + id: sceneCameraSelector - RenderTargetSelector { + // Fill G-Buffer + LayerFilter { + id: sceneLayerFilter + RenderTargetSelector { id: gBufferTargetSelector + target: gBuffer ClearBuffers { - buffers: ClearBuffers.ColorDepthBuffer - - RenderPassFilter { - id: geometryPass - includes: Annotation { name: "pass"; value: "geometry" } - - CameraSelector { - id: sceneCameraSelector - } - } + buffers: ClearBuffers.ColorDepthBuffer + + RenderPassFilter { + id: geometryPass + matchAny: FilterKey { + name: "pass" + value: "geometry" + } + } } - } - } - - LayerFilter { - layers: "screenQuad" - - ClearBuffers { - buffers: ClearBuffers.ColorDepthBuffer - - RenderPassFilter { - id: finalPass - includes: Annotation { name: "pass"; value: "final" } - } - } - } + } + } + + TechniqueFilter { + parameters: [ + Parameter { name: "color"; value: gBuffer.color }, + Parameter { name: "position"; value: gBuffer.position }, + Parameter { name: "normal"; value: gBuffer.normal }, + Parameter { name: "depth"; value: gBuffer.depth } + ] + + RenderStateSet { + // Render FullScreen Quad + renderStates: [ + BlendEquation { blendFunction: BlendEquation.Add }, + BlendEquationArguments { + sourceRgb: BlendEquationArguments.SourceAlpha + destinationRgb: BlendEquationArguments.DestinationColor + } + ] + + LayerFilter { + id: screenQuadLayerFilter + ClearBuffers { + buffers: ClearBuffers.ColorDepthBuffer + RenderPassFilter { + matchAny: FilterKey { + name: "pass" + value: "final" + } + parameters: Parameter { + name: "winSize" + value: Qt.size(1024, 768) + } + } + } + } + } + } + } } - \endcode +} +\endqml + + (Above code is adapted from \e {qt3d/tests/manual/deferred-renderer-qml}.) Graphically, the resulting framegraph looks like: @@ -456,22 +492,20 @@ \list \li RenderView (1) \list + \li Specify which camera should be used \li Define a viewport that fills the whole screen - \li Select all Entities that have a Layer component matching - \c "scene" + \li Select all Entities for layer component sceneLayer \li Set the \c gBuffer as the active render target \li Clear the color and depth on the currently bound render target (the \c gBuffer) \li Select only Entities in the scene that have a Material and Technique matching the annotations in the RenderPassFilter - \li Specify which camera should be used \endlist \li RenderView (2) \list \li Define a viewport that fills the whole screen - \li Select all Entities that have a Layer component matching - \c "screenQuad" + \li Select all Entities for layer component screenQuadLayer \li Clear the color and depth buffers on the currently bound framebuffer (the screen) \li Select only Entities in the scene that have a Material and |