![]() |
Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
|
#include <qquick3dscenerenderer_p.h>
Public Member Functions | |
~QQuick3DSGRenderNode () | |
void | prepare () override |
Called from the frame preparation phase. | |
StateFlags | changedStates () const override |
This function should return a mask where each bit represents graphics states changed by the \l render() function. | |
void | render (const RenderState *state) override |
This function is called by the renderer and should paint this node with directly invoking commands via QRhi or directly via the underlying graphics API (OpenGL, Direct3D, etc.). | |
void | releaseResources () override |
This function is called when all custom graphics resources allocated by this node have to be freed immediately. | |
RenderingFlags | flags () const override |
Public Member Functions inherited from QSGRenderNode | |
QSGRenderNode () | |
~QSGRenderNode () override | |
Destructs the render node. | |
virtual QRectF | rect () const |
const QMatrix4x4 * | projectionMatrix () const |
const QMatrix4x4 * | projectionMatrix (qsizetype index) const |
const QMatrix4x4 * | matrix () const |
const QSGClipNode * | clipList () const |
qreal | inheritedOpacity () const |
QRhiRenderTarget * | renderTarget () const |
QRhiCommandBuffer * | commandBuffer () const |
Public Member Functions inherited from QSGNode | |
QSGNode () | |
Constructs a new node. | |
virtual | ~QSGNode () |
Destroys the node. | |
QSGNode * | parent () const |
Returns the parent node of this node. | |
void | removeChildNode (QSGNode *node) |
Removes node from this node's list of children. | |
void | removeAllChildNodes () |
Removes all child nodes from this node's list of children. | |
void | prependChildNode (QSGNode *node) |
Prepends node to this node's the list of children. | |
void | appendChildNode (QSGNode *node) |
Appends node to this node's list of children. | |
void | insertChildNodeBefore (QSGNode *node, QSGNode *before) |
Inserts node to this node's list of children before the node specified with before. | |
void | insertChildNodeAfter (QSGNode *node, QSGNode *after) |
Inserts node to this node's list of children after the node specified with after. | |
void | reparentChildNodesTo (QSGNode *newParent) |
int | childCount () const |
Returns the number of child nodes. | |
QSGNode * | childAtIndex (int i) const |
Returns the child at index i. | |
QSGNode * | firstChild () const |
Returns the first child of this node. | |
QSGNode * | lastChild () const |
Returns the last child of this node. | |
QSGNode * | nextSibling () const |
Returns the node after this in the parent's list of children. | |
QSGNode * | previousSibling () const |
Returns the node before this in the parent's list of children. | |
NodeType | type () const |
Returns the type of this node. | |
QT_DEPRECATED void | clearDirty () |
void | markDirty (DirtyState bits) |
Notifies all connected renderers that the node has dirty bits. | |
QT_DEPRECATED DirtyState | dirtyState () const |
virtual bool | isSubtreeBlocked () const |
Returns whether this node and its subtree is available for use. | |
Flags | flags () const |
Returns the set of flags for this node. | |
void | setFlag (Flag, bool=true) |
Sets the flag f on this node if enabled is true; otherwise clears the flag. | |
void | setFlags (Flags, bool=true) |
Sets the flags f on this node if enabled is true; otherwise clears the flags. | |
virtual void | preprocess () |
Override this function to do processing on the node before it is rendered. |
Public Attributes | |
QQuickWindow * | window = nullptr |
QQuick3DSceneRenderer * | renderer = nullptr |
Additional Inherited Members | |
Public Types inherited from QSGRenderNode | |
enum | StateFlag { DepthState = 0x01 , StencilState = 0x02 , ScissorState = 0x04 , ColorState = 0x08 , BlendState = 0x10 , CullState = 0x20 , ViewportState = 0x40 , RenderTargetState = 0x80 } |
This enum contains the possible values for use in the bitmask returned from changedStates(). More... | |
enum | RenderingFlag { BoundedRectRendering = 0x01 , DepthAwareRendering = 0x02 , OpaqueRendering = 0x04 , NoExternalRendering = 0x08 } |
Possible values for the bitmask returned from flags(). More... | |
Public Types inherited from QSGNode | |
enum | NodeType { BasicNodeType , GeometryNodeType , TransformNodeType , ClipNodeType , OpacityNodeType , RootNodeType , RenderNodeType } |
Can be used to figure out the type of node. More... | |
enum | Flag { OwnedByParent = 0x0001 , UsePreprocess = 0x0002 , OwnsGeometry = 0x00010000 , OwnsMaterial = 0x00020000 , OwnsOpaqueMaterial = 0x00040000 , IsVisitableNode = 0x01000000 } |
The QSGNode::Flag enum describes flags on the QSGNode. More... | |
enum | DirtyStateBit { DirtySubtreeBlocked = 0x0080 , DirtyMatrix = 0x0100 , DirtyNodeAdded = 0x0400 , DirtyNodeRemoved = 0x0800 , DirtyGeometry = 0x1000 , DirtyMaterial = 0x2000 , DirtyOpacity = 0x4000 , DirtyForceUpdate = 0x8000 , DirtyUsePreprocess = UsePreprocess , DirtyPropagationMask } |
Used in QSGNode::markDirty() to indicate how the scene graph has changed. More... | |
Protected Member Functions inherited from QSGNode | |
QSGNode (NodeType type) | |
Constructs a new node with the given node type. | |
QSGNode (QSGNodePrivate &dd, NodeType type) | |
Constructs a new node with the given node type. | |
Protected Attributes inherited from QSGNode | |
QScopedPointer< QSGNodePrivate > | d_ptr |
Definition at line 186 of file qquick3dscenerenderer_p.h.
QQuick3DSGRenderNode::~QQuick3DSGRenderNode | ( | ) |
Definition at line 1606 of file qquick3dscenerenderer.cpp.
References renderer.
|
overridevirtual |
This function should return a mask where each bit represents graphics states changed by the \l render() function.
\value ViewportState Viewport \value ScissorState Scissor test enabled state, scissor rectangle \value DepthState This value has no effect in Qt 6. \value StencilState This value has no effect in Qt 6. \value ColorState This value has no effect in Qt 6. \value BlendState This value has no effect in Qt 6. \value CullState This value has no effect in Qt 6. \value RenderTargetState This value has no effect in Qt 6.
software
backend exposes its QPainter and saves and restores before and after invoking render(). Therefore reporting any changed states from here is not necessary.The default implementation returns 0, meaning no relevant state was changed in render().
Reimplemented from QSGRenderNode.
Definition at line 1514 of file qquick3dscenerenderer.cpp.
|
overridevirtual |
The default implementation returns 0.
Reimplemented from QSGRenderNode.
Definition at line 1657 of file qquick3dscenerenderer.cpp.
|
overridevirtual |
Called from the frame preparation phase.
There is a call to this function before each invocation of render().
Unlike render(), this function is called before the scenegraph starts recording the render pass for the current frame on the underlying command buffer. This is useful when doing rendering with graphics APIs, such as Vulkan, where copy type of operations will need to be recorded before the render pass.
The default implementation is empty.
When implementing a QSGRenderNode that uses QRhi to render, query the QRhi object from the QQuickWindow via \l{QQuickWindow::rhi()}. To get a QRhiCommandBuffer for submitting work to, call commandBuffer(). To query information about the active render target, call renderTarget(). See the \l{{Scene Graph - Custom QSGRenderNode}} example for details.
Reimplemented from QSGRenderNode.
Definition at line 1611 of file qquick3dscenerenderer.cpp.
References QQuick3DSceneRenderer::beginFrame(), and renderer.
|
overridevirtual |
This function is called when all custom graphics resources allocated by this node have to be freed immediately.
In case the node does not directly allocate graphics resources (buffers, textures, render targets, fences, etc.) through the graphics API that is in use, there is nothing to do here.
Failing to release all custom resources can lead to incorrect behavior in graphics device loss scenarios on some systems since subsequent reinitialization of the graphics system may fail.
Unlike with the destructor, it is expected that render() can reinitialize all resources it needs when called after a call to releaseResources().
With OpenGL, the scenegraph's OpenGL context will be current both when calling the destructor and this function.
Reimplemented from QSGRenderNode.
Definition at line 1653 of file qquick3dscenerenderer.cpp.
|
overridevirtual |
This function is called by the renderer and should paint this node with directly invoking commands via QRhi or directly via the underlying graphics API (OpenGL, Direct3D, etc.).
The effective opacity can be retrieved with \l inheritedOpacity().
The projection matrix is available through state, while the model-view matrix can be fetched with \l matrix(). The combined matrix is then the projection matrix times the model-view matrix. The correct stacking of the items in the scene is ensured by the projection matrix.
When using the provided matrices, the coordinate system for vertex data follows the usual QQuickItem conventions: top-left is (0, 0), bottom-right is the corresponding QQuickItem's width() and height() minus one. For example, assuming a two float (x-y) per vertex coordinate layout, a triangle covering half of the item can be specified as (width - 1, height - 1), (0, 0), (0, height - 1) using counter-clockwise direction.
Clip information is calculated before the function is called. Implementations wishing to take clipping into account can set up scissoring or stencil based on the information in state. The stencil buffer is filled with the necessary clip shapes, but it is up to the implementation to enable stencil testing.
Some scenegraph backends, software in particular, use no scissor or stencil. There the clip region is provided as an ordinary QRegion.
When implementing a QSGRenderNode that uses QRhi to render, query the QRhi object from the QQuickWindow via \l{QQuickWindow::rhi()}. To get a QRhiCommandBuffer for submitting work to, call commandBuffer(). To query information about the active render target, call renderTarget(). See the \l{{Scene Graph - Custom QSGRenderNode}} example for details.
With Qt 6 and its QRhi-based scene graph renderer, no assumptions should be made about the active (OpenGL) state when this function is called, even when OpenGL is in use. Assume nothing about the pipelines and dynamic states bound on the command list/buffer when this function is called.
With some graphics APIs, including when using QRhi directly, it can be necessary to reimplement prepare() in addition, or alternatively connect to the QQuickWindow::beforeRendering() signal. These are called/emitted before recording the beginning of a renderpass on the command buffer (vkCmdBeginRenderPass with Vulkan, or starting to encode via MTLRenderCommandEncoder in case of Metal. Recording copy operations cannot be done inside render() with such APIs. Rather, do such operations either in prepare() or the slot connected to beforeRendering (with DirectConnection).
Implements QSGRenderNode.
Definition at line 1634 of file qquick3dscenerenderer.cpp.
References QQuick3DSceneRenderer::endFrame(), renderer, and QQuick3DSceneRenderer::rhiRender().
QQuick3DSceneRenderer* QQuick3DSGRenderNode::renderer = nullptr |
Definition at line 197 of file qquick3dscenerenderer_p.h.
Referenced by ~QQuick3DSGRenderNode(), prepare(), and render().
QQuickWindow* QQuick3DSGRenderNode::window = nullptr |
Definition at line 196 of file qquick3dscenerenderer_p.h.