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
Konstante | Wert | Beschreibung |
---|---|---|
QSGRendererInterface::Unknown | 0 | Es wird eine unbekannte Grafik-API verwendet |
QSGRendererInterface::Software | 1 | Der Qt Quick 2D Renderer wird verwendet |
QSGRendererInterface::OpenVG | 2 | OpenVG über EGL |
QSGRendererInterface::OpenGL (since Qt 5.14) | 3 | OpenGL ES 2.0 oder höher über eine Grafikabstraktionsschicht. |
QSGRendererInterface::Direct3D11 (since Qt 5.14) | 4 | Direct3D 11 über eine Grafikabstraktionsschicht. |
QSGRendererInterface::Direct3D12 (since Qt 6.6) | 8 | Direct3D 12 über eine Grafikabstraktionsschicht. |
QSGRendererInterface::Vulkan (since Qt 5.14) | 5 | Vulkan 1.0 über eine Grafikabstraktionsschicht. |
QSGRendererInterface::Metal (since Qt 5.14) | 6 | Metal über eine Grafikabstraktionsschicht. |
QSGRendererInterface::Null (since Qt 5.14) | 7 | Null (keine Ausgabe) über eine Grafikabstraktionsschicht. |
enum QSGRendererInterface::RenderMode
Konstante | Wert | Beschreibung |
---|---|---|
QSGRendererInterface::RenderMode2D | 0 | Normales 2D-Rendering |
QSGRendererInterface::RenderMode2DNoDepthBuffer | 1 | Normales 2D-Rendering mit deaktiviertem Tiefenpuffer |
QSGRendererInterface::RenderMode3D | 2 | Szene wird als Teil eines 3D-Diagramms gerendert |
enum QSGRendererInterface::Resource
Konstante | Wert | Beschreibung |
---|---|---|
QSGRendererInterface::DeviceResource | 0 | Die 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::CommandQueueResource | 1 | Die 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::CommandListResource | 2 | Die 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::PainterResource | 3 | Die 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) | 4 | Die Ressource ist ein Zeiger auf die QRhi Instanz, die vom Scenegraph verwendet wird, falls zutreffend. |
QSGRendererInterface::RhiSwapchainResource (since Qt 6.0) | 5 | Die 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) | 6 | Die 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) | 7 | Die 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) | 8 | Die 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) | 9 | Die Ressource ist ein Zeiger auf die QOpenGLContext, die vom Scenegraph (auf dem Render-Thread) verwendet wird, falls zutreffend. |
QSGRendererInterface::DeviceContextResource (since Qt 5.14) | 10 | Die Ressource ist ein Zeiger auf den vom Szenegraphen verwendeten Gerätekontext, falls zutreffend. Zum Beispiel ein ID3D11DeviceContext * . |
QSGRendererInterface::CommandEncoderResource (since Qt 5.14) | 11 | Die 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) | 12 | Die Ressource ist ein Zeiger auf die vom Szenengraphen verwendete QVulkanInstance, falls zutreffend. |
QSGRendererInterface::RenderPassResource (since Qt 5.14) | 13 | Die 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) | 14 | Die 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) | 15 | Die 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) | 16 | Die 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
Konstante | Wert | Beschreibung |
---|---|---|
QSGRendererInterface::RuntimeCompilation | 0x01 | Laufzeitkompilierung von Shader-Quellcode wird unterstützt |
QSGRendererInterface::OfflineCompilation | 0x02 | Vorkompilierter 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
Konstante | Wert | Beschreibung |
---|---|---|
QSGRendererInterface::ShaderSourceString | 0x01 | Die Shaderquelle kann als String in den entsprechenden Eigenschaften von ShaderEffect |
QSGRendererInterface::ShaderSourceFile | 0x02 | Lokale oder Ressourcendateien mit Shader-Quellcode werden unterstützt |
QSGRendererInterface::ShaderByteCode | 0x04 | Lokale 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
Konstante | Wert | Beschreibung |
---|---|---|
QSGRendererInterface::UnknownShadingLanguage | 0 | Noch nicht bekannt, da kein Fenster und kein Scenegraph zugeordnet sind |
QSGRendererInterface::GLSL | 1 | GLSL oder GLSL ES |
QSGRendererInterface::HLSL | 2 | HLSL |
QSGRendererInterface::RhiShader (since Qt 5.14) | 3 | Verbraucht 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.