QSGRendererInterface Class

Eine Schnittstelle, die Zugang zu einigen der Grafik-API-spezifischen Interna des Scenegraphs bietet. Mehr...

Kopfzeile: #include <QSGRendererInterface>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick

Öffentliche Typen

enum GraphicsApi { Unknown, Software, OpenVG, OpenGL, Direct3D11, …, Null }
enum RenderMode { RenderMode2D, RenderMode2DNoDepthBuffer, RenderMode3D }
enum Resource { DeviceResource, CommandQueueResource, CommandListResource, PainterResource, RhiResource, …, GraphicsQueueIndexResource }
enum ShaderCompilationType { RuntimeCompilation, OfflineCompilation }
flags ShaderCompilationTypes
enum ShaderSourceType { ShaderSourceString, ShaderSourceFile, ShaderByteCode }
flags ShaderSourceTypes
enum ShaderType { UnknownShadingLanguage, GLSL, HLSL, RhiShader }

Öffentliche Funktionen

virtual void *getResource(QQuickWindow *window, QSGRendererInterface::Resource resource) const
virtual void *getResource(QQuickWindow *window, const char *resource) const
virtual QSGRendererInterface::GraphicsApi graphicsApi() const = 0
virtual QSGRendererInterface::ShaderCompilationTypes shaderCompilationType() const = 0
virtual QSGRendererInterface::ShaderSourceTypes shaderSourceType() const = 0
virtual QSGRendererInterface::ShaderType shaderType() const = 0

Statische öffentliche Mitglieder

bool isApiRhiBased(QSGRendererInterface::GraphicsApi api)

Detaillierte Beschreibung

Renderer-Schnittstellen ermöglichen den Zugriff auf Grafik-API-spezifische Funktionen im Szenegraphen. Solche Interna werden normalerweise nicht offengelegt. Bei der Integration von benutzerdefiniertem Rendering, z.B. über QSGRenderNode, kann es jedoch notwendig werden, bestimmte Werte abzufragen, z.B. das Grafikgerät (z.B. das Direct3D- oder Vulkan-Gerät), das vom Scenegraph verwendet wird.

Die Funktionen des QSGRendererInterface sind unterschiedlich verfügbar. API- und Sprachabfragen wie graphicsApi() oder shaderType() sind immer verfügbar, d.h. es genügt, ein QQuickWindow oder QQuickView zu konstruieren, und die verwendete Grafik-API oder Shading-Sprache kann direkt danach über QQuickWindow::rendererInterface() abgefragt werden. Dies garantiert, dass Hilfsmittel wie der GraphicsInfo QML-Typ so früh wie möglich die richtigen Werte melden können, ohne dass bedingte Eigenschaftswerte - abhängig von z.B. shaderType() - zu unerwarteten Werten evaluiert werden.

Engine-spezifische Accessors, wie getResource(), sind jedoch erst nach der Initialisierung des Szenegraphen verfügbar. Außerdem kann es Backend-spezifische Einschränkungen geben, wann solche Funktionen aufgerufen werden können. Der einzige Weg, der garantiert zum Erfolg führt, ist der Aufruf, wenn das Rendering eines Knotens (d.h. die Vorbereitung der Befehlsliste für das nächste Bild) aktiv ist. In der Praxis bedeutet dies typischerweise QSGRenderNode::render().

Dokumentation der Mitgliedstypen

enum QSGRendererInterface::GraphicsApi

KonstanteWertBeschreibung
QSGRendererInterface::Unknown0Es wird eine unbekannte Grafik-API verwendet
QSGRendererInterface::Software1Der Qt Quick 2D Renderer wird verwendet
QSGRendererInterface::OpenVG2OpenVG über EGL
QSGRendererInterface::OpenGL (since Qt 5.14)3OpenGL ES 2.0 oder höher über eine Grafikabstraktionsschicht.
QSGRendererInterface::Direct3D11 (since Qt 5.14)4Direct3D 11 über eine Grafikabstraktionsschicht.
QSGRendererInterface::Direct3D12 (since Qt 6.6)8Direct3D 12 über eine Grafikabstraktionsschicht.
QSGRendererInterface::Vulkan (since Qt 5.14)5Vulkan 1.0 über eine Grafikabstraktionsschicht.
QSGRendererInterface::Metal (since Qt 5.14)6Metal über eine Grafikabstraktionsschicht.
QSGRendererInterface::Null (since Qt 5.14)7Null (keine Ausgabe) über eine Grafikabstraktionsschicht.

enum QSGRendererInterface::RenderMode

KonstanteWertBeschreibung
QSGRendererInterface::RenderMode2D0Normales 2D-Rendering
QSGRendererInterface::RenderMode2DNoDepthBuffer1Normales 2D-Rendering mit deaktiviertem Tiefenpuffer
QSGRendererInterface::RenderMode3D2Szene wird als Teil eines 3D-Diagramms gerendert

enum QSGRendererInterface::Resource

KonstanteWertBeschreibung
QSGRendererInterface::DeviceResource0Die Ressource ist ein Zeiger auf das Grafikgerät, falls zutreffend. Zum Beispiel ein VkDevice *, MTLDevice * oder ID3D11Device *. Beachten Sie, dass bei Vulkan der zurückgegebene Wert ein Zeiger auf das VkDevice ist, nicht das Handle selbst. Dies liegt daran, dass Vulkan-Handles keine Zeiger sind und eine andere Größe als die Zeigergröße der Architektur verwenden können, so dass ein einfaches Casting auf/von void * falsch ist.
QSGRendererInterface::CommandQueueResource1Die Ressource ist ein Zeiger auf die Grafikbefehlswarteschlange, die vom Scenegraph verwendet wird, falls zutreffend. Zum Beispiel ein VkQueue * oder MTLCommandQueue *. Beachten Sie, dass bei Vulkan der zurückgegebene Wert ein Zeiger auf die VkQueue ist, nicht das Handle selbst.
QSGRendererInterface::CommandListResource2Die Ressource ist ein Zeiger auf die Befehlsliste oder den Puffer, der vom Scenegraph verwendet wird, falls zutreffend. Zum Beispiel ein VkCommandBuffer * oder MTLCommandBuffer *. Dieses Objekt hat eine begrenzte Gültigkeit und ist nur gültig, während der Szenegraph das nächste Bild vorbereitet. Beachten Sie, dass bei Vulkan der zurückgegebene Wert ein Zeiger auf den VkCommandBuffer ist, nicht der Handle selbst.
QSGRendererInterface::PainterResource3Die Ressource ist ein Zeiger auf die aktive QPainter, die vom Szenengraphen verwendet wird, wenn er mit dem Software-Backend läuft.
QSGRendererInterface::RhiResource (since Qt 5.14)4Die Ressource ist ein Zeiger auf die QRhi Instanz, die vom Scenegraph verwendet wird, falls zutreffend.
QSGRendererInterface::RhiSwapchainResource (since Qt 6.0)5Die Ressource ist ein Zeiger auf eine QRhiSwapchain-Instanz, die mit dem Fenster verbunden ist. Der Wert ist null, wenn das Fenster in Kombination mit QQuickRenderControl verwendet wird.
QSGRendererInterface::RhiRedirectCommandBuffer (since Qt 6.0)6Die Ressource ist ein Zeiger auf eine QRhiCommandBuffer -Instanz, die mit dem Fenster und seiner QQuickRenderControl verbunden ist. Der Wert ist null, wenn das Fenster nicht mit einem QQuickRenderControl verknüpft ist.
QSGRendererInterface::RhiRedirectRenderTarget (since Qt 6.0)7Die Ressource ist ein Zeiger auf eine QRhiTextureRenderTarget Instanz, die mit dem Fenster und dessen QQuickRenderControl verbunden ist. Der Wert ist null, wenn das Fenster nicht mit einem QQuickRenderControl verbunden ist. Beachten Sie, dass der Wert immer das Haupttextur-Rendering-Ziel widerspiegelt und nicht von der Qt Quick Szene abhängt, was bedeutet, dass er keine zusätzlichen Textur-Ziel-Rendering-Durchläufe berücksichtigt, die von ShaderEffect oder QQuickItem Ebenen erzeugt werden.
QSGRendererInterface::PhysicalDeviceResource (since Qt 5.14)8Die Ressource ist ein Zeiger auf das physikalische Geräteobjekt, das vom Szenegraphen verwendet wird, falls zutreffend. Zum Beispiel ein VkPhysicalDevice *. Beachten Sie, dass bei Vulkan der zurückgegebene Wert ein Zeiger auf das VkPhysicalDevice ist, nicht das Handle selbst.
QSGRendererInterface::OpenGLContextResource (since Qt 5.14)9Die Ressource ist ein Zeiger auf die QOpenGLContext, die vom Scenegraph (auf dem Render-Thread) verwendet wird, falls zutreffend.
QSGRendererInterface::DeviceContextResource (since Qt 5.14)10Die Ressource ist ein Zeiger auf den vom Szenegraphen verwendeten Gerätekontext, falls zutreffend. Zum Beispiel ein ID3D11DeviceContext *.
QSGRendererInterface::CommandEncoderResource (since Qt 5.14)11Die Ressource ist ein Zeiger auf das vom Szenengraphen verwendete, derzeit aktive Render Command Encoder-Objekt, falls zutreffend. Zum Beispiel ein MTLRenderCommandEncoder *. Dieses Objekt hat eine begrenzte Gültigkeit und ist nur gültig, während der Szenegraph einen Renderpass für das nächste Bild aufzeichnet.
QSGRendererInterface::VulkanInstanceResource (since Qt 5.14)12Die Ressource ist ein Zeiger auf die vom Szenengraphen verwendete QVulkanInstance, falls zutreffend.
QSGRendererInterface::RenderPassResource (since Qt 5.14)13Die Ressource ist ein Zeiger auf den vom Szenengraphen verwendeten Haupt-Rendering-Pass, der die Farb- und Tiefen-/Stecil-Anhänge und deren Verwendung beschreibt. Zum Beispiel ein VkRenderPass *. Beachten Sie, dass der Wert immer das Haupt-Rendering-Ziel widerspiegelt (entweder das Bildschirmfenster oder die Textur, auf die QQuickRenderControl umleitet) und nicht von der Qt Quick Szene abhängt, was bedeutet, dass er keine zusätzlichen Rendering-Durchläufe für Texturen berücksichtigt, die von ShaderEffect oder QQuickItem Ebenen erzeugt werden.
QSGRendererInterface::RedirectPaintDevice (since Qt 6.4)14Die Ressource ist ein Zeiger auf die QPaintDevice Instanz, die mit dem Fenster und seiner QQuickRenderControl verbunden ist. Der Wert ist Null, wenn das Fenster nicht mit einer QQuickRenderControl verbunden ist.
QSGRendererInterface::GraphicsQueueFamilyIndexResource (since Qt 6.6)15Die Ressource ist ein Zeiger auf den Index der Grafik-Warteschlangen-Familie, die vom Scenegraph verwendet wird, falls zutreffend. Bei Vulkan ist dies ein Zeiger auf einen uint32_t Indexwert.
QSGRendererInterface::GraphicsQueueIndexResource (since Qt 6.6)16Die Ressource ist ein Zeiger auf den Index der Grafikwarteschlange (uint32_t), der vom Scenegraph verwendet wird, sofern zutreffend. Bei Vulkan ist dies ein Zeiger auf einen uint32_t Indexwert, der in der Praxis der Index der VkQueue ist, der für CommandQueueResource gemeldet wird.

enum QSGRendererInterface::ShaderCompilationType
flags QSGRendererInterface::ShaderCompilationTypes

KonstanteWertBeschreibung
QSGRendererInterface::RuntimeCompilation0x01Laufzeitkompilierung von Shader-Quellcode wird unterstützt
QSGRendererInterface::OfflineCompilation0x02Vorkompilierter Bytecode wird unterstützt

Der Typ ShaderCompilationTypes ist ein Typedef für QFlags<ShaderCompilationType>. Er speichert eine OR-Kombination von ShaderCompilationType-Werten.

enum QSGRendererInterface::ShaderSourceType
flags QSGRendererInterface::ShaderSourceTypes

KonstanteWertBeschreibung
QSGRendererInterface::ShaderSourceString0x01Die Shaderquelle kann als String in den entsprechenden Eigenschaften von ShaderEffect
QSGRendererInterface::ShaderSourceFile0x02Lokale oder Ressourcendateien mit Shader-Quellcode werden unterstützt
QSGRendererInterface::ShaderByteCode0x04Lokale oder Ressourcendateien, die Shader Bytecode enthalten, werden unterstützt

Der Typ ShaderSourceTypes ist ein Typedef für QFlags<ShaderSourceType>. Er speichert eine OR-Kombination von ShaderSourceType-Werten.

enum QSGRendererInterface::ShaderType

KonstanteWertBeschreibung
QSGRendererInterface::UnknownShadingLanguage0Noch nicht bekannt, da kein Fenster und kein Scenegraph zugeordnet sind
QSGRendererInterface::GLSL1GLSL oder GLSL ES
QSGRendererInterface::HLSL2HLSL
QSGRendererInterface::RhiShader (since Qt 5.14)3Verbraucht QShader Instanzen, die Shader-Varianten für mehrere Zielsprachen und Zwischenformate enthalten.

Dokumentation der Mitgliedsfunktionen

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

Fragt eine Grafik resource in window ab. Gibt null zurück, wenn die betreffende Ressource nicht unterstützt wird oder nicht verfügbar ist.

Bei Erfolg ist der zurückgegebene Zeiger entweder ein direkter Zeiger auf eine Schnittstelle oder ein Zeiger auf ein undurchsichtiges Handle, das erst dereferenziert werden muss (z. B. VkDevice dev = *static_cast<VkDevice *>(result)). Letzteres ist notwendig, da solche Handles eine andere Größe als ein Zeiger haben können.

Hinweis: Das Eigentum an dem zurückgegebenen Zeiger wird nie an den Aufrufer übertragen.

Hinweis: Diese Funktion darf nur auf dem Render-Thread aufgerufen werden.

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

Fragt eine Grafikressource ab. resource ist ein Backend-spezifischer Schlüssel. Dies ermöglicht die Unterstützung zukünftiger Ressourcen, die nicht in der Ressourcenaufzählung aufgeführt sind.

Hinweis: Der Besitz des zurückgegebenen Zeigers wird nie an den Aufrufer übertragen.

Hinweis: Diese Funktion darf nur im Render-Thread aufgerufen werden.

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

Gibt die Grafik-API zurück, die vom Qt Quick scenegraph verwendet wird.

Hinweis: Diese Funktion kann in jedem Thread aufgerufen werden.

[static] bool QSGRendererInterface::isApiRhiBased(QSGRendererInterface::GraphicsApi api)

Gibt true zurück, wenn api auf einer Grafikabstraktionsschicht (QRhi) basiert, anstatt direkt die native Grafik-API aufzurufen.

Hinweis: Diese Funktion kann auf jedem Thread aufgerufen werden.

[pure virtual] QSGRendererInterface::ShaderCompilationTypes QSGRendererInterface::shaderCompilationType() const

Gibt eine Bitmaske der Shader-Kompilierungsansätze zurück, die von dem Qt Quick Backend unterstützt werden, das die Anwendung verwendet.

Hinweis: Diese Funktion kann auf jedem Thread aufgerufen werden.

Siehe auch QtQuick::GraphicsInfo.

[pure virtual] QSGRendererInterface::ShaderSourceTypes QSGRendererInterface::shaderSourceType() const

Gibt eine Bitmaske der unterstützten Möglichkeiten zur Bereitstellung von Shader-Quellen in ShaderEffect items zurück.

Hinweis: Diese Funktion kann auf jedem Thread aufgerufen werden.

Siehe auch QtQuick::GraphicsInfo.

[pure virtual] QSGRendererInterface::ShaderType QSGRendererInterface::shaderType() const

Gibt die Schattierungssprache zurück, die von dem Qt Quick Backend unterstützt wird, das die Anwendung verwendet.

Hinweis: Diese Funktion kann auf jedem Thread aufgerufen werden.

Siehe auch QtQuick::GraphicsInfo.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.