QSGRendererInterface Class

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

Header: #include <QSGRendererInterface>
qmake: QT += quick
Since: Qt 5.8

This class was introduced in Qt 5.8.

Public Types

enum GraphicsApi { Unknown, Software, OpenGL, Direct3D12, OpenVG, …, NullRhi }
enum Resource { DeviceResource, CommandQueueResource, CommandListResource, PainterResource, RhiResource, …, RenderPassResource }
enum ShaderCompilationType { RuntimeCompilation, OfflineCompilation }
enum ShaderSourceType { ShaderSourceString, ShaderSourceFile, ShaderByteCode }
enum ShaderType { UnknownShadingLanguage, GLSL, HLSL, RhiShader }

Detailed Description

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().

Member Type Documentation

enum QSGRendererInterface::GraphicsApi

ConstantValueDescription
QSGRendererInterface::Unknown0An unknown graphics API is in use
QSGRendererInterface::Software1The Qt Quick 2D Renderer is in use
QSGRendererInterface::OpenGL2OpenGL ES 2.0 or higher
QSGRendererInterface::Direct3D123Direct3D 12
QSGRendererInterface::OpenVG4OpenVG via EGL
QSGRendererInterface::OpenGLRhi5OpenGL ES 2.0 or higher via a graphics abstraction layer. This value was introduced in Qt 5.14.
QSGRendererInterface::Direct3D11Rhi6Direct3D 11 via a graphics abstraction layer. This value was introduced in Qt 5.14.
QSGRendererInterface::VulkanRhi7Vulkan 1.0 via a graphics abstraction layer. This value was introduced in Qt 5.14.
QSGRendererInterface::MetalRhi8Metal via a graphics abstraction layer. This value was introduced in Qt 5.14.
QSGRendererInterface::NullRhi9Null (no output) via a graphics abstraction layer. This value was introduced in Qt 5.14.

enum QSGRendererInterface::Resource

ConstantValueDescription
QSGRendererInterface::DeviceResource0The 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.
QSGRendererInterface::CommandQueueResource1The 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.
QSGRendererInterface::CommandListResource2The 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.
QSGRendererInterface::PainterResource3The resource is a pointer to the active QPainter used by the scenegraph, when running with the software backend.
QSGRendererInterface::RhiResource4The resource is a pointer to the QRhi instance used by the scenegraph, when applicable. This value was introduced in Qt 5.14.
QSGRendererInterface::PhysicalDeviceResource5The 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. This value was introduced in Qt 5.14.
QSGRendererInterface::OpenGLContextResource6The resource is a pointer to the QOpenGLContext used by the scenegraph (on the render thread), when applicable. This value was introduced in Qt 5.14.
QSGRendererInterface::DeviceContextResource7The resource is a pointer to the device context used by the scenegraph, when applicable. For example, a ID3D11DeviceContext *. This value was introduced in Qt 5.14.
QSGRendererInterface::CommandEncoderResource8The 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. This value was introduced in Qt 5.14.
QSGRendererInterface::VulkanInstanceResource9The resource is a pointer to the QVulkanInstance used by the scenegraph, when applicable. This value was introduced in Qt 5.14.
QSGRendererInterface::RenderPassResource10The resource is a pointer to the render pass used by the scenegraph, describing the color and depth/stecil attachments and how they are used. For example, a VkRenderPass *. This value was introduced in Qt 5.14.

enum QSGRendererInterface::ShaderCompilationType

ConstantValueDescription
QSGRendererInterface::RuntimeCompilation0x01Runtime compilation of shader source code is supported
QSGRendererInterface::OfflineCompilation0x02Pre-compiled bytecode supported

enum QSGRendererInterface::ShaderSourceType

ConstantValueDescription
QSGRendererInterface::ShaderSourceString0x01Shader source can be provided as a string in the corresponding properties of ShaderEffect
QSGRendererInterface::ShaderSourceFile0x02Local or resource files containing shader source code are supported
QSGRendererInterface::ShaderByteCode0x04Local or resource files containing shader bytecode are supported

enum QSGRendererInterface::ShaderType

ConstantValueDescription
QSGRendererInterface::UnknownShadingLanguage0Not yet known due to no window and scenegraph associated
QSGRendererInterface::GLSL1GLSL or GLSL ES
QSGRendererInterface::HLSL2HLSL
QSGRendererInterface::RhiShader3Consumes QShader instances containing shader variants for multiple target languages and intermediate formats. This value was introduced in Qt 5.14.