Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
QSGRendererInterface Class Referenceabstract

An interface providing access to some of the graphics API specific internals of the scenegraph. More...

#include <qsgrendererinterface.h>

+ Inheritance diagram for QSGRendererInterface:
+ Collaboration diagram for QSGRendererInterface:

Public Types

enum  GraphicsApi {
  Unknown , Software , OpenVG , OpenGL ,
  Direct3D11 , Vulkan , Metal , Null ,
  Direct3D12 , OpenGLRhi = OpenGL , Direct3D11Rhi = Direct3D11 , VulkanRhi = Vulkan ,
  MetalRhi = Metal , NullRhi = Null
}
 \value Unknown An unknown graphics API is in use \value Software The Qt Quick 2D Renderer is in use \value OpenVG OpenVG via EGL \value [since 5.14] OpenGL OpenGL ES 2.0 or higher via a graphics abstraction layer. More...
 
enum  Resource {
  DeviceResource , CommandQueueResource , CommandListResource , PainterResource ,
  RhiResource , RhiSwapchainResource , RhiRedirectCommandBuffer , RhiRedirectRenderTarget ,
  PhysicalDeviceResource , OpenGLContextResource , DeviceContextResource , CommandEncoderResource ,
  VulkanInstanceResource , RenderPassResource , RedirectPaintDevice , GraphicsQueueFamilyIndexResource ,
  GraphicsQueueIndexResource
}
 \value DeviceResource The resource is a pointer to the graphics device, when applicable. More...
 
enum  ShaderType { UnknownShadingLanguage , GLSL , HLSL , RhiShader }
 \value UnknownShadingLanguage Not yet known due to no window and scenegraph associated \value GLSL GLSL or GLSL ES \value HLSL HLSL \value [since 5.14] RhiShader Consumes QShader instances containing shader variants for multiple target languages and intermediate formats. More...
 
enum  ShaderCompilationType { RuntimeCompilation = 0x01 , OfflineCompilation = 0x02 }
 \value RuntimeCompilation Runtime compilation of shader source code is supported \value OfflineCompilation Pre-compiled bytecode supported More...
 
enum  ShaderSourceType { ShaderSourceString = 0x01 , ShaderSourceFile = 0x02 , ShaderByteCode = 0x04 }
 \value ShaderSourceString Shader source can be provided as a string in the corresponding properties of ShaderEffect More...
 
enum  RenderMode { RenderMode2D , RenderMode2DNoDepthBuffer , RenderMode3D }
 \value RenderMode2D Normal 2D rendering \value RenderMode2DNoDepthBuffer Normal 2D rendering with depth buffer disabled \value RenderMode3D Scene is rendered as part of a 3D graph More...
 

Public Member Functions

virtual ~QSGRendererInterface ()
 
virtual GraphicsApi graphicsApi () const =0
 Returns the graphics API that is in use by the Qt Quick scenegraph.
 
virtual voidgetResource (QQuickWindow *window, Resource resource) const
 Queries a graphics resource in window.
 
virtual voidgetResource (QQuickWindow *window, const char *resource) const
 Queries a graphics resource.
 
virtual ShaderType shaderType () const =0
 
virtual ShaderCompilationTypes shaderCompilationType () const =0
 
virtual ShaderSourceTypes shaderSourceType () const =0
 

Static Public Member Functions

static bool isApiRhiBased (GraphicsApi api)
 

Detailed Description

An interface providing access to some of the graphics API specific internals of the scenegraph.

\inmodule QtQuick

Since
5.8

Renderer interfaces allow accessing graphics API specific functionality in the scenegraph. Such internals are not typically exposed. However, when integrating custom rendering via QSGRenderNode for example, it may become necessary to query certain values, for instance the graphics device (e.g. the Direct3D or Vulkan device) that is used by the scenegraph.

QSGRendererInterface's functions have varying availability. API and language queries, such as, graphicsApi() or shaderType() are always available, meaning it is sufficient to construct a QQuickWindow or QQuickView, and the graphics API or shading language in use can be queried right after via QQuickWindow::rendererInterface(). This guarantees that utilities like the GraphicsInfo QML type are able to report the correct values as early as possible, without having conditional property values - depending on for instance shaderType() - evaluate to unexpected values.

Engine-specific accessors, like getResource(), are however available only after the scenegraph is initialized. Additionally, there may be backend-specific limitations on when such functions can be called. The only way that is guaranteed to succeed is calling them when the rendering of a node (i.e. the preparation of the command list for the next frame) is active. In practice this typically means QSGRenderNode::render().

Definition at line 13 of file qsgrendererinterface.h.

Member Enumeration Documentation

◆ GraphicsApi

\value Unknown An unknown graphics API is in use \value Software The Qt Quick 2D Renderer is in use \value OpenVG OpenVG via EGL \value [since 5.14] OpenGL OpenGL ES 2.0 or higher via a graphics abstraction layer.

\value [since 5.14] Direct3D11 Direct3D 11 via a graphics abstraction layer. \value [since 6.6] Direct3D12 Direct3D 12 via a graphics abstraction layer. \value [since 5.14] Vulkan Vulkan 1.0 via a graphics abstraction layer. \value [since 5.14] Metal Metal via a graphics abstraction layer. \value [since 5.14] Null Null (no output) via a graphics abstraction layer. \omitvalue OpenGLRhi \omitvalue Direct3D11Rhi \omitvalue VulkanRhi \omitvalue MetalRhi \omitvalue NullRhi

Enumerator
Unknown 
Software 
OpenVG 
OpenGL 
Direct3D11 
Vulkan 
Metal 
Null 
Direct3D12 
OpenGLRhi 
Direct3D11Rhi 
VulkanRhi 
MetalRhi 
NullRhi 

Definition at line 16 of file qsgrendererinterface.h.

◆ RenderMode

\value RenderMode2D Normal 2D rendering \value RenderMode2DNoDepthBuffer Normal 2D rendering with depth buffer disabled \value RenderMode3D Scene is rendered as part of a 3D graph

Enumerator
RenderMode2D 
RenderMode2DNoDepthBuffer 
RenderMode3D 

Definition at line 74 of file qsgrendererinterface.h.

◆ Resource

\value DeviceResource The resource is a pointer to the graphics device, when applicable.

For example, a {VkDevice *}, {MTLDevice *} or {ID3D11Device *}. Note that with Vulkan the returned value is a pointer to the VkDevice, not the handle itself. This is because Vulkan handles may not be pointers, and may use a different size from the architecture's pointer size so merely casting to/from {void *} is wrong.

\value CommandQueueResource The resource is a pointer to the graphics command queue used by the scenegraph, when applicable. For example, a {VkQueue *} or {MTLCommandQueue *}. Note that with Vulkan the returned value is a pointer to the VkQueue, not the handle itself.

\value CommandListResource The resource is a pointer to the command list or buffer used by the scenegraph, when applicable. For example, a {VkCommandBuffer *} or {MTLCommandBuffer *}. This object has limited validity, and is only valid while the scene graph is preparing the next frame. Note that with Vulkan the returned value is a pointer to the VkCommandBuffer, not the handle itself.

\value PainterResource The resource is a pointer to the active QPainter used by the scenegraph, when running with the software backend.

\value [since 5.14] RhiResource The resource is a pointer to the QRhi instance used by the scenegraph, when applicable.

\value [since 6.0] RhiSwapchainResource The resource is a pointer to a QRhiSwapchain instance that is associated with the window. The value is null when the window is used in combination with QQuickRenderControl.

\value [since 6.0] RhiRedirectCommandBuffer The resource is a pointer to a QRhiCommandBuffer instance that is associated with the window and its QQuickRenderControl. The value is null when the window is not associated with a QQuickRenderControl.

\value [since 6.0] RhiRedirectRenderTarget The resource is a pointer to a QRhiTextureRenderTarget instance that is associated with the window and its QQuickRenderControl. The value is null when the window is not associated with a QQuickRenderControl. Note that the value always reflects the main texture render target and it does not depend on the Qt Quick scene, meaning it does not take any additional texture-targeting render passes generated by ShaderEffect or QQuickItem layers into account.

\value [since 5.14] PhysicalDeviceResource The resource is a pointer to the pysical device object used by the scenegraph, when applicable. For example, a {VkPhysicalDevice *}. Note that with Vulkan the returned value is a pointer to the VkPhysicalDevice, not the handle itself.

\value [since 5.14] OpenGLContextResource The resource is a pointer to the QOpenGLContext used by the scenegraph (on the render thread), when applicable.

\value [since 5.14] DeviceContextResource The resource is a pointer to the device context used by the scenegraph, when applicable. For example, a {ID3D11DeviceContext *}.

\value [since 5.14] CommandEncoderResource The resource is a pointer to the currently active render command encoder object used by the scenegraph, when applicable. For example, a {MTLRenderCommandEncoder *}. This object has limited validity, and is only valid while the scene graph is recording a render pass for the next frame.

\value [since 5.14] VulkanInstanceResource The resource is a pointer to the QVulkanInstance used by the scenegraph, when applicable.

\value [since 5.14] RenderPassResource The resource is a pointer to the main render pass used by the scenegraph, describing the color and depth/stecil attachments and how they are used. For example, a {VkRenderPass *}. Note that the value always reflects the main render target (either the on-screen window or the texture QQuickRenderControl redirects to) and it does not depend on the Qt Quick scene, meaning it does not take any additional texture-targeting render passes generated by ShaderEffect or QQuickItem layers into account.

\value [since 6.4] RedirectPaintDevice The resource is a pointer to QPaintDevice instance that is associated with the window and its QQuickRenderControl. The value is null when the window is not associated with a QQuickRenderControl.

\value [since 6.6] GraphicsQueueFamilyIndexResource The resource is a pointer to the graphics queue family index used by the scenegraph, when applicable. With Vulkan, this is a pointer to a uint32_t index value.

\value [since 6.6] GraphicsQueueIndexResource The resource is a pointer to the graphics queue index (uint32_t) used by the scenegraph, when applicable. With Vulkan, this is a pointer to a uint32_t index value, which in practice is the index of the VkQueue reported for CommandQueueResource.

Enumerator
DeviceResource 
CommandQueueResource 
CommandListResource 
PainterResource 
RhiResource 
RhiSwapchainResource 
RhiRedirectCommandBuffer 
RhiRedirectRenderTarget 
PhysicalDeviceResource 
OpenGLContextResource 
DeviceContextResource 
CommandEncoderResource 
VulkanInstanceResource 
RenderPassResource 
RedirectPaintDevice 
GraphicsQueueFamilyIndexResource 
GraphicsQueueIndexResource 

Definition at line 34 of file qsgrendererinterface.h.

◆ ShaderCompilationType

\value RuntimeCompilation Runtime compilation of shader source code is supported \value OfflineCompilation Pre-compiled bytecode supported

Enumerator
RuntimeCompilation 
OfflineCompilation 

Definition at line 61 of file qsgrendererinterface.h.

◆ ShaderSourceType

\value ShaderSourceString Shader source can be provided as a string in the corresponding properties of ShaderEffect

\value ShaderSourceFile Local or resource files containing shader source code are supported

\value ShaderByteCode Local or resource files containing shader bytecode are supported

Enumerator
ShaderSourceString 
ShaderSourceFile 
ShaderByteCode 

Definition at line 67 of file qsgrendererinterface.h.

◆ ShaderType

\value UnknownShadingLanguage Not yet known due to no window and scenegraph associated \value GLSL GLSL or GLSL ES \value HLSL HLSL \value [since 5.14] RhiShader Consumes QShader instances containing shader variants for multiple target languages and intermediate formats.

Enumerator
UnknownShadingLanguage 
GLSL 
HLSL 
RhiShader 

Definition at line 54 of file qsgrendererinterface.h.

Constructor & Destructor Documentation

◆ ~QSGRendererInterface()

QSGRendererInterface::~QSGRendererInterface ( )
virtual

Definition at line 181 of file qsgrendererinterface.cpp.

Member Function Documentation

◆ getResource() [1/2]

void * QSGRendererInterface::getResource ( QQuickWindow * window,
const char * resource ) const
virtual

Queries a graphics resource.

resource is a backend-specific key. This allows supporting any future resources that are not listed in the Resource enum.

Note
The ownership of the returned pointer is never transferred to the caller.
This function must only be called on the render thread.

Definition at line 223 of file qsgrendererinterface.cpp.

References Q_UNUSED, and window().

+ Here is the call graph for this function:

◆ getResource() [2/2]

void * QSGRendererInterface::getResource ( QQuickWindow * window,
Resource resource ) const
virtual

Queries a graphics resource in window.

Returns null when the resource in question is not supported or not available.

When successful, the returned pointer is either a direct pointer to an interface, or a pointer to an opaque handle that needs to be dereferenced first (for example, {VkDevice dev = *static_cast<VkDevice >(result)}). The latter is necessary since such handles may have sizes different from a pointer.

Note
The ownership of the returned pointer is never transferred to the caller.
This function must only be called on the render thread.

Reimplemented in QSGSoftwareContext, and QSGDefaultContext.

Definition at line 207 of file qsgrendererinterface.cpp.

References Q_UNUSED, and window().

+ Here is the call graph for this function:

◆ graphicsApi()

QSGRendererInterface::GraphicsApi QSGRendererInterface::graphicsApi ( ) const
pure virtual

Returns the graphics API that is in use by the Qt Quick scenegraph.

Note
This function can be called on any thread.

Implemented in QSGOpenVGRenderContext, QSGSoftwareContext, and QSGDefaultContext.

Referenced by QQuickShapeGenericRenderer::endSync(), and QQuickRenderControlPrivate::grab().

+ Here is the caller graph for this function:

◆ isApiRhiBased()

bool QSGRendererInterface::isApiRhiBased ( GraphicsApi api)
static
Returns
true if api is based on a graphics abstraction layer (QRhi) instead of directly calling the native graphics API.
Note
This function can be called on any thread.
Since
5.14

Definition at line 238 of file qsgrendererinterface.cpp.

References api, Direct3D11, Direct3D12, Metal, Null, OpenGL, and Vulkan.

Referenced by QQuick3DSGDirectRenderer::QQuick3DSGDirectRenderer(), QSGRhiSupport::configure(), QQuickShapeGenericMaterialFactory::createConicalGradient(), QQuickShapeGenericMaterialFactory::createLinearGradient(), QQuickShapePrivate::createNode(), QQuickShapeGenericMaterialFactory::createRadialGradient(), QQuick3DViewport::createRenderer(), QQuickShapeGenericMaterialFactory::createVertexColor(), QQuickShapePrivate::selectRendererType(), and QQuickImageParticle::updatePaintNode().

+ Here is the caller graph for this function:

◆ shaderCompilationType()

QSGRendererInterface::ShaderCompilationTypes QSGRendererInterface::shaderCompilationType ( ) const
pure virtual
Returns
a bitmask of the shader compilation approaches supported by the Qt Quick backend the application is using.
Note
This function can be called on any thread.
See also
QtQuick::GraphicsInfo

Implemented in QSGOpenVGRenderContext, QSGSoftwareContext, and QSGDefaultContext.

◆ shaderSourceType()

QSGRendererInterface::ShaderSourceTypes QSGRendererInterface::shaderSourceType ( ) const
pure virtual
Returns
a bitmask of the supported ways of providing shader sources in ShaderEffect items.
Note
This function can be called on any thread.
See also
QtQuick::GraphicsInfo

Implemented in QSGOpenVGRenderContext, QSGSoftwareContext, and QSGDefaultContext.

◆ shaderType()

QSGRendererInterface::ShaderType QSGRendererInterface::shaderType ( ) const
pure virtual
Returns
the shading language supported by the Qt Quick backend the application is using.
Note
This function can be called on any thread.
See also
QtQuick::GraphicsInfo

Implemented in QSGOpenVGRenderContext, QSGSoftwareContext, and QSGDefaultContext.


The documentation for this class was generated from the following files: