QQuickGraphicsConfiguration Class
„QQuickGraphicsConfiguration“ steuert die Grafik-Einstellungen auf niedrigerer Ebene für den „ QQuickWindow “. Mehr...
| Überschrift: | #include <QQuickGraphicsConfiguration> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| Seit: | Qt 6.0 |
Öffentliche Funktionen
| QQuickGraphicsConfiguration() | |
| ~QQuickGraphicsConfiguration() | |
| QByteArrayList | deviceExtensions() const |
(since 6.5) bool | isAutomaticPipelineCacheEnabled() const |
| bool | isDebugLayerEnabled() const |
| bool | isDebugMarkersEnabled() const |
| bool | isDepthBufferEnabledFor2D() const |
| QString | pipelineCacheLoadFile() const |
| QString | pipelineCacheSaveFile() const |
| bool | prefersSoftwareDevice() const |
(since 6.5) void | setAutomaticPipelineCache(bool enable) |
(since 6.5) void | setDebugLayer(bool enable) |
(since 6.5) void | setDebugMarkers(bool enable) |
| void | setDepthBufferFor2D(bool enable) |
| void | setDeviceExtensions(const QByteArrayList &extensions) |
(since 6.5) void | setPipelineCacheLoadFile(const QString &filename) |
(since 6.5) void | setPipelineCacheSaveFile(const QString &filename) |
(since 6.5) void | setPreferSoftwareDevice(bool enable) |
(since 6.6) void | setTimestamps(bool enable) |
(since 6.6) bool | timestampsEnabled() const |
Statische öffentliche Mitglieder
(since 6.1) QByteArrayList | preferredInstanceExtensions() |
Ausführliche Beschreibung
Die Klasse `QQuickGraphicsConfiguration` ist ein Container für Low-Level-Grafikeinstellungen, die Einfluss darauf haben können, wie die zugrunde liegende Grafik-API, wie z. B. Vulkan, durch den Szenenbaum von ` Qt Quick ` initialisiert wird. Sie kann außerdem bestimmte Aspekte des Szenenbaum-Renderers steuern.
Hinweis: Die Einstellung einer `QQuickGraphicsConfiguration` für eine ` QQuickWindow ` muss früh genug erfolgen, noch bevor der Szenengraph zum ersten Mal für dieses Fenster initialisiert wird. Bei Bildschirmfenstern bedeutet dies, dass der Aufruf erfolgen muss, bevor `show()` auf ` QQuickWindow ` oder ` QQuickView` aufgerufen wird. Bei „ QQuickRenderControl “ muss die Konfiguration abgeschlossen sein, bevor ` initialize()` aufgerufen wird.
Konfiguration für externe Rendering-Engines oder XR-APIs
Beim Erstellen und Anzeigen eines „ QQuickWindow “, das zum Rendern Vulkan verwendet, werden eine Vulkan-Instanz (VkInstance), ein physisches Gerät (VkPhysicalDevice), ein Gerät (VkDevice) und zugehörige Objekte (Warteschlangen, Pools) über die Vulkan-API initialisiert. Das Gleiche gilt größtenteils auch, wenn „ QQuickRenderControl “ verwendet wird, um das Rendering in ein benutzerdefiniertes Renderziel, wie beispielsweise eine Textur, umzuleiten. Während die Erstellung von „ QVulkanInstance “ dann unter der Kontrolle der Anwendung steht, erfolgt die Initialisierung anderer Grafikobjekte in „ QQuickRenderControl::initialize()“ auf dieselbe Weise wie bei einem Bildschirm- QQuickWindow.
Für die meisten Anwendungen ist keine zusätzliche Konfiguration erforderlich, da Qt Quick für viele Low-Level-Grafikeinstellungen sinnvolle Standardwerte bereitstellt, beispielsweise welche Geräteerweiterungen aktiviert werden sollen.
Dies reicht jedoch nicht immer aus. In fortgeschrittenen Anwendungsfällen, bei der Integration von direktem Vulkan- oder anderem Grafik-API-Inhalt oder bei der Anbindung an eine externe 3D- oder VR-Engine wie beispielsweise OpenXR, möchte die Anwendung ihre eigenen Einstellungen für Details festlegen, beispielsweise welche Geräteerweiterungen aktiviert werden sollen.
Genau das ermöglicht diese Klasse. Sie erlaubt es beispielsweise, eine Liste von Geräteerweiterungen anzugeben, die dann bei der Verwendung von Vulkan oder anderen Grafik-APIs, bei denen das Konzept anwendbar ist, vom Szenengraphen übernommen wird. Wo bestimmte Konzepte nicht anwendbar sind, werden die entsprechenden Einstellungen einfach ignoriert.
Beispiele für Funktionen in dieser Kategorie sind „ setDeviceExtensions()“ und „ preferredInstanceExtensions()“. Letztere ist nützlich, wenn die Anwendung ihren eigenen „ QVulkanInstance “ verwaltet, der dann über „ QWindow::setVulkanInstance()“ mit dem „ QQuickWindow “ verknüpft wird.
Qt Quick Konfiguration des Szenengraph-Renderers
Eine weitere Klasse von Einstellungen bezieht sich auf den Renderer des Szenengraphen. In manchen Fällen möchten Anwendungen möglicherweise bestimmte Verhaltensweisen steuern, wie beispielsweise die Verwendung des Tiefenpuffers beim Rendern von 2D-Inhalten. In Qt 5 waren solche Einstellungen entweder gar nicht steuerbar oder wurden über Umgebungsvariablen verwaltet. In Qt 6 bietet `QQuickGraphicsConfiguration` einen neuen Speicherort für diese Einstellungen, wobei die Unterstützung für die bisherigen Umgebungsvariablen, soweit zutreffend, beibehalten wird.
Ein Beispiel aus dieser Kategorie ist ` setDepthBufferFor2D()`.
Konfiguration von Grafikgeräten
Wenn die Grafikinstanz und die Geräteobjekte (z. B. `VkInstance` und `VkDevice` bei Vulkan, `ID3D11Device` bei Direct 3D usw.) von Qt bei der Initialisierung eines ` QQuickWindow` erstellt werden, gibt es Einstellungen, die Anwendungen oder Bibliotheken unter bestimmten Umständen steuern möchten.
Vor Qt 6.5 konnten einige dieser Einstellungen über Umgebungsvariablen gesteuert werden. Zum Beispiel „ QSG_RHI_DEBUG_LAYER “ oder „ QSG_RHI_PREFER_SOFTWARE_RENDERER “. Diese sind weiterhin verfügbar und funktionieren wie bisher. „QQuickGraphicsConfiguration“ stellt zusätzlich C++-Setter zur Verfügung.
Die folgende `main()`-Funktion öffnet beispielsweise eine ` QQuickView ` und legt dabei fest, dass die Vulkan-Validierung oder die Direct3D-Debug-Ebene aktiviert sein soll:
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQuickGraphicsConfiguration config;
config.setDebugLayer(true);
QQuickView *view = new QQuickView;
view->setGraphicsConfiguration(config);
view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));
view->show();
return app.exec();
}Speichern und Laden des Pipeline-Caches
Qt Quick unterstützt das Speichern des Grafik-/Rechen-Pipeline-Caches auf Festplatte und das erneute Laden bei nachfolgenden Ausführungen einer Anwendung. Was genau der Pipeline-Cache enthält, wie das Abrufen funktioniert und was genau beschleunigt wird, hängt vom Qt-RHI-Backend und der zugrunde liegenden nativen Grafik-API ab, die zur Laufzeit verwendet wird. Verschiedene 3D-APIs verfolgen unterschiedliche Konzepte in Bezug auf Shader, Programme und Pipeline-Zustandsobjekte sowie die entsprechenden Cache-Mechanismen. Das hier verwendete übergeordnete Pipeline-Cache-Konzept abstrahiert all dies auf das Speichern und Abrufen eines einzigen binären Blobs in eine bzw. aus einer Datei.
Hinweis: Das Speichern des Caches auf der Festplatte kann bei nachfolgenden Ausführungen der Anwendung zu Verbesserungen führen, die mitunter erheblich sind.
Wenn dasselbe Shader-Programm und/oder derselbe Pipeline-Zustand wie bei einem vorherigen Lauf vorliegt, werden wahrscheinlich eine Reihe von Operationen übersprungen, was zu schnelleren Initialisierungszeiten für Shader und Materialien führt. Dies bedeutet, dass der Start schneller erfolgen kann und Verzögerungen sowie „Ruckler“ während des Renderings reduziert oder vermieden werden können.
Bei der Verwendung einer Grafik-API, bei der das Abrufen und Neuladen des Pipeline-Caches (oder der Shader-/Programm-Binärdateien) nicht möglich oder nicht unterstützt ist, hat der Versuch, den Cache über eine Datei zu speichern und zu laden, keine Wirkung.
Hinweis: In vielen Fällen sind die abgerufenen Daten vom Grafiktreiber (und möglicherweise dessen exakter Version) abhängig und an diesen gebunden. Qt führt die erforderlichen Prüfungen automatisch durch, indem zusätzliche Metadaten in der Pipeline-Cache-Datei gespeichert werden. Stimmen die Daten in der Datei zur Laufzeit nicht mit dem Grafikgerät und der Treiberversion überein, wird der Inhalt für die Anwendung transparent ignoriert. Es ist daher unbedenklich, auf einen Cache zu verweisen, der auf einem anderen Gerät oder mit einem anderen Treiber erstellt wurde.
Es gibt Ausnahmen vom Problem der Treiberabhängigkeit, insbesondere bei Direct 3D 11, wo der „Pipeline-Cache“ ausschließlich zum Speichern der Ergebnisse der HLSL->DXBC-Kompilierung zur Laufzeit verwendet wird und daher geräte- und herstellerunabhängig ist.
In manchen Fällen kann es wünschenswert sein, die Leistung beim allerersten Start der Anwendung zu verbessern, indem der Cache „vorab gefüllt“ wird. Dies ist möglich, indem die aus einem früheren Lauf gespeicherte Cache-Datei mitgeliefert und auf einem anderen Rechner oder Gerät referenziert wird. Auf diese Weise stehen der Anwendung oder dem Gerät bereits beim ersten Start die Shader-Programme bzw. Pipelines zur Verfügung, die bereits bei dem Lauf vorhanden waren, bei dem die Cache-Datei gespeichert wurde. Das Mitführen und Bereitstellen der Cache-Datei ist nur dann sinnvoll, wenn das Gerät und die Grafiktreiber auf dem Zielsystem identisch sind; andernfalls wird die Cache-Datei ignoriert, wenn das Gerät oder die Treiberversion nicht übereinstimmt (mit Ausnahme von D3D11), wie oben beschrieben.
Sobald der Cache-Inhalt geladen ist, besteht weiterhin die Möglichkeit, dass die Anwendung Grafik- und Rechenpipelines erstellt, die in früheren Durchläufen noch nicht aufgetreten sind. In diesen Fällen wird der Cache erweitert, indem die Pipelines bzw. Shader-Programme hinzugefügt werden. Wenn die Anwendung zudem den Inhalt speichert (möglicherweise sogar in derselben Datei), werden sowohl die alten als auch die neuen Pipelines gespeichert. Das Laden aus und Speichern in dieselbe Datei bei jedem Durchlauf ermöglicht einen ständig wachsenden Cache, der alle angetroffenen Pipelines und Shader-Programme speichert.
In der Praxis lässt sich davon ausgehen, dass der Qt-Pipeline-Cache den folgenden nativen Grafik-API-Funktionen entspricht:
- Vulkan – VkPipelineCache – Beim Speichern des Pipeline-Caches wird im Wesentlichen der über vkGetPipelineCacheData abgerufene Blob gespeichert, ergänzt um zusätzliche Metadaten zur sicheren Identifizierung des Geräts und des Treibers, da der Pipeline-Cache-Blob vom jeweiligen Treiber abhängt.
- Metal – MTLBinaryArchive – Bei aktiviertem Speichern des Pipeline-Caches speichert Qt alle angetroffenen Render- und Compute-Pipelines in einem MTLBinaryArchive. Beim Speichern des Pipeline-Caches wird der aus dem Archiv abgerufene Blob zusammen mit zusätzlichen Metadaten zur Identifizierung des Geräts gespeichert. Hinweis: Derzeit ist die Verwendung von MTLBinaryArchive unter macOS und iOS aufgrund verschiedener Probleme bei einigen Hardware- und Betriebssystemversionen deaktiviert.
- OpenGL – Es gibt kein natives Konzept von Pipelines; der „Pipeline-Cache“ speichert eine Sammlung von Programm-Binärdateien, die über `glGetProgramBinary` abgerufen wurden. Die Programm-Binärdateien werden in einem einzigen Blob gebündelt, zusammen mit zusätzlichen Metadaten zur Identifizierung des Geräts, des Treibers und der Treiberversion, aus der die Binärdateien abgerufen wurden. Das dauerhafte Zwischenspeichern von Programm-Binärdateien ist in Qt nichts Neues: Qt 5 verfügte bereits über eine ähnliche Funktionalität in „ QOpenGLShaderProgram “; siehe beispielsweise addCacheableShaderFromSourceCode(). Tatsächlich ist dieser Mechanismus auch in Qt 6 immer aktiv, wenn „ Qt Quick “ mit OpenGL verwendet wird. Bei Verwendung der hier bereitgestellten neuen, von der Grafik-API unabhängigen Pipeline-Cache-Abstraktion wird der Programm-Binärcode-Cache aus der Qt-5-Ära jedoch automatisch deaktiviert, da derselbe Inhalt nun im „Pipeline-Cache“ gebündelt ist.
- Direct 3D 11 – Es gibt kein natives Konzept für Pipelines oder das Abrufen von Binärdateien für die zweite Kompilierungsphase (in der der herstellerunabhängige Zwischen-Bytecode in den gerätespezifischen Befehlssatz kompiliert wird). Treiber setzen auf dieser Ebene in der Regel ein eigenes Caching-System ein. Stattdessen wird der „ Qt Quick “-Pipeline-Cache verwendet, um Fälle zu beschleunigen, in denen die Shader HLSL-Quellcode enthalten, der zunächst in das Zwischen-Bytecode-Format kompiliert werden muss. Dies kann zu erheblichen Leistungssteigerungen in Anwendungen und Bibliotheken führen, die Shader-Code zur Laufzeit zusammenstellen, da bei nachfolgenden Durchläufen die potenziell aufwendigen, nicht zwischengespeicherten Aufrufe von `D3DCompile()` vermieden werden können, wenn der Bytecode für den auftretenden HLSL-Shader bereits verfügbar ist. Ein gutes Beispiel ist Qt Quick 3D, wo die zur Laufzeit generierten Shader für Materialien die Verarbeitung von HLSL-Quellcode erfordern. Das Speichern und erneute Laden des „ Qt Quick “-Pipeline-Caches kann daher in Szenen mit einem oder mehreren „ View3D “-Elementen zu erheblichen Verbesserungen führen. Ein Gegenbeispiel könnte Qt Quick selbst sein: Da die meisten integrierten Shader für 2D-Inhalte mit DirectX-Bytecode ausgeliefert werden, der bereits bei der Erstellung generiert wurde, wird der Cache hier keine nennenswerten Verbesserungen bringen.
Shader ToolsAll dies ist unabhängig von der Shader-Verarbeitung, die vom Qt XML-ph-0000@deepl.internal-Modul und seinen Befehlszeilentools wie qsb durchgeführt wird. Nehmen wir als Beispiel Vulkan. Es ist sinnvoll, den Vulkan-kompatiblen GLSL-Quellcode entweder offline oder zur Erstellungszeit (direkt über qsb oder CMake) zu SPIR-V zu kompilieren, da so die rechenintensive Kompilierung aus dem Quellcode zur Laufzeit vermieden wird. SPIR-V ist jedoch ein herstellerunabhängiges Zwischenformat. Zur Laufzeit findet beim Aufbau von Grafik- oder Rechenpipelines wahrscheinlich eine weitere Kompilierungsrunde statt, diesmal vom Zwischenformat zum herstellerspezifischen Befehlssatz der GPU (und dies kann auch von bestimmten Zuständen in der Grafikpipeline und den Renderzielen abhängen). Der Pipeline-Cache hilft bei dieser letzten Phase.
Hinweis: Viele Grafikschnittstellen-Implementierungen nutzen ihren eigenen persistenten Festplatten-Cache, der für die Anwendungen transparent ist. Die Verwendung der Pipeline-Cache-Funktion von „ Qt Quick “ wird in diesem Fall wahrscheinlich zu Verbesserungen führen, doch die Gewinne könnten geringer ausfallen.
Rufen Sie ` setPipelineCacheSaveFile()` und ` setPipelineCacheLoadFile()` auf, um zu steuern, in welche Dateien ein ` QQuickWindow ` oder ` QQuickView ` den Pipeline-Cache speichert bzw. von dort lädt.
Um einen Eindruck von den Auswirkungen der Aktivierung der Festplattenspeicherung des Pipeline-Caches zu erhalten, aktivieren Sie die wichtigsten Szenengrafik- und Grafikprotokolle entweder über die Umgebungsvariable QSG_INFO=1 oder über die Protokollierungskategorien qt.scenegraph.general und qt.rhi.general. Beim Schließen der QQuickWindow erscheint eine Protokollmeldung wie die folgende:
Total time spent on pipeline creation during the lifetime of the QRhi was 123 msDies vermittelt einen ungefähren Eindruck davon, wie viel Zeit während der Lebensdauer des Fensters für die Erstellung der Grafik- und Rechenpipeline (die verschiedene Phasen der Shader-Kompilierung umfassen kann) aufgewendet wurde.
Wenn das Laden aus einer Pipeline-Cache-Datei aktiviert ist, wird dies durch folgende Meldung bestätigt:
Attempting to seed pipeline cache from 'filename'Um zu überprüfen, ob das Speichern des Caches erfolgreich aktiviert wurde, suchen Sie nach einer Meldung wie dieser:
Writing pipeline cache contents to 'filename'Der automatische Pipeline-Cache
Wenn kein Dateiname zum Speichern und Laden angegeben wird, kommt die Strategie des automatischen Pipeline-Cachings zum Einsatz. Dabei werden Daten am anwendungsspezifischen Cache-Speicherort des Systems (QStandardPaths::CacheLocation) abgelegt.
Dies kann auf eine der folgenden Weisen deaktiviert werden:
- Setzen Sie das Anwendungsattribut ` Qt::AA_DisableShaderDiskCache`. (Deaktiviert die automatische Speicherung vollständig.)
- Setzen Sie die Umgebungsvariable `QT_DISABLE_SHADER_DISK_CACHE` auf einen Wert ungleich Null. (Deaktiviert die automatische Speicherung vollständig.)
- Setzen Sie die Umgebungsvariable `QSG_RHI_DISABLE_SHADER_DISK_CACHE` auf einen Wert ungleich Null. (Deaktiviert die automatische Zwischenspeicherung vollständig.)
- Rufen Sie `setAutomaticPiplineCache()` auf, wobei das Argument `enable` auf `false` gesetzt ist. (deaktiviert die automatische Speicherung vollständig)
- Legen Sie einen Dateinamen fest, indem Sie ` setPipelineCacheLoadFile()` aufrufen. (Deaktiviert nur das Laden aus dem automatischen Speicher und verwendet stattdessen die angegebene Datei.)
- Legen Sie einen Dateinamen fest, indem Sie ` setPipelineCacheSaveFile()` aufrufen. (Deaktiviert lediglich das Schreiben in den automatischen Speicher und bevorzugt stattdessen die angegebene Datei)
Die ersten beiden sind bereits seit Qt 5.9 vorhandene Mechanismen zur Steuerung des OpenGL-Programm-Binär-Caches. Aus Gründen der Kompatibilität und Vertrautheit werden dieselben Attribute und Umgebungsvariablen auch für den erweiterten Pipeline-Cache von Qt 6 unterstützt.
Der automatische Pipeline-Cache verwendet eine einzige Datei pro Anwendung, jedoch eine unterschiedliche für jedes RHI-Backend (Grafik-API). Das bedeutet, dass ein Wechsel zu einer anderen Grafik-API beim nächsten Start der Anwendung nicht zum Verlust des im vorherigen Durchlauf generierten Pipeline-Caches führt. Anwendungen mit mehreren gleichzeitig angezeigten „ QQuickWindow “-Instanzen profitieren jedoch möglicherweise nicht zu 100 %, da der automatische Cache jeweils nur die von einem RHI-Objekt gesammelten Daten speichern kann. (Und bei der Standard-Render-Schleife „ threaded “ verfügt jedes Fenster über ein eigenes RHI, da das Rendering unabhängig in dedizierten Threads erfolgt.) Um den Vorteile des Festplatten-Caches in Anwendungen mit mehreren Fenstern voll auszuschöpfen, sollten Sie den Dateinamen explizit pro Fenster über ` setPipelineCacheSaveFile()` festlegen.
Siehe auch QQuickWindow::setGraphicsConfiguration(), QQuickWindow und QQuickRenderControl.
Dokumentation zu den Member-Funktionen
QQuickGraphicsConfiguration::QQuickGraphicsConfiguration()
Erstellt eine Standard-QQuickGraphicsConfiguration, die keine zusätzlichen Einstellungen festlegt, die der Szenenbaum berücksichtigen soll.
[noexcept] QQuickGraphicsConfiguration::~QQuickGraphicsConfiguration()
Destruktor.
QByteArrayList QQuickGraphicsConfiguration::deviceExtensions() const
Gibt die Liste der angeforderten zusätzlichen Geräteerweiterungen zurück.
Siehe auch setDeviceExtensions().
[since 6.5] bool QQuickGraphicsConfiguration::isAutomaticPipelineCacheEnabled() const
Gibt „true“ zurück, wenn der automatische Pipeline-Cache aktiviert ist.
Standardmäßig ist dies der Fall, sofern nicht bestimmte Anwendungsattribute oder Umgebungsvariablen gesetzt sind. Weitere Informationen finden Sie unter The Automatic Pipeline Cache.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch setAutomaticPipelineCache().
bool QQuickGraphicsConfiguration::isDebugLayerEnabled() const
Gibt „true“ zurück, wenn die Debug- und Validierungsschichten aktiviert werden sollen.
Standardmäßig ist der Wert „false“.
Siehe auch ` setDebugLayer()`.
bool QQuickGraphicsConfiguration::isDebugMarkersEnabled() const
Gibt „true“ zurück, wenn Debug-Marker aktiviert sind.
Standardmäßig ist der Wert „false“.
Siehe auch ` setDebugMarkers()`.
bool QQuickGraphicsConfiguration::isDepthBufferEnabledFor2D() const
Gibt „true“ zurück, wenn die Verwendung des Tiefenpuffers für 2D-Inhalte aktiviert ist.
Standardmäßig ist der Wert „true“, sofern nicht die Umgebungsvariable „ QSG_NO_DEPTH_BUFFER “ gesetzt ist.
QString QQuickGraphicsConfiguration::pipelineCacheLoadFile() const
Gibt den aktuell festgelegten Dateinamen zum Laden des Pipeline-Caches zurück.
Standardmäßig ist der Wert eine leere Zeichenkette.
Siehe auch ` setPipelineCacheLoadFile()`.
QString QQuickGraphicsConfiguration::pipelineCacheSaveFile() const
Gibt den aktuell festgelegten Dateinamen für die Speicherung des Pipeline-Caches zurück.
Standardmäßig ist der Wert eine leere Zeichenkette.
Siehe auch ` setPipelineCacheSaveFile()`.
[static, since 6.1] QByteArrayList QQuickGraphicsConfiguration::preferredInstanceExtensions()
Gibt die Liste der Vulkan-Instanzerweiterungen zurück, die Qt Quick vorzugsweise für die VkInstance aktiviert haben möchte.
In den meisten Fällen ist „ Qt Quick “ für die Erstellung einer „ QVulkanInstance “ verantwortlich. In diesem Fall ist diese Funktion nicht relevant. Wird hingegen „ QQuickRenderControl “ in Kombination mit Vulkan-basiertem Rendering verwendet, ist es Aufgabe der Anwendung, eine „ QVulkanInstance “ zu erstellen und diese mit der (Offscreen-)„ QQuickWindow “ zu verknüpfen. In diesem Fall wird erwartet, dass die Anwendung die Liste der zu aktivierenden Instanzerweiterungen abfragt und diese an „ QVulkanInstance::setExtensions()“ übergibt, bevor „ QVulkanInstance::create()“ aufgerufen wird.
Diese Funktion wurde in Qt 6.1 eingeführt.
bool QQuickGraphicsConfiguration::prefersSoftwareDevice() const
Gibt „true“ zurück, wenn ein auf einem Software-Rasterizer basierendes Grafikgerät priorisiert ist.
Standardmäßig ist der Wert „false“.
Siehe auch ` setPreferSoftwareDevice()`.
[since 6.5] void QQuickGraphicsConfiguration::setAutomaticPipelineCache(bool enable)
Ändert die Verwendung des automatischen Pipeline-Caches basierend auf enable.
Der Standardwert ist „true“, sofern nicht bestimmte Anwendungsattribute oder Umgebungsvariablen gesetzt sind. Weitere Informationen finden Sie unter The Automatic Pipeline Cache.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch isAutomaticPipelineCacheEnabled().
[since 6.5] void QQuickGraphicsConfiguration::setDebugLayer(bool enable)
Aktiviert die Debug- oder Validierungs-Ebenen der Grafik-API-Implementierung, sofern verfügbar.
In der Praxis wird dies von Vulkan und Direct 3D 11 unterstützt, vorausgesetzt, die erforderliche Unterstützung (Validierungsschichten, Windows SDK) ist installiert und zur Laufzeit verfügbar. Wenn „ enable “ auf „true“ gesetzt ist, versucht Qt, die Standard-Validierungsschicht für die „VkInstance“ zu aktivieren oder „ D3D11_CREATE_DEVICE_DEBUG “ für das Grafikgerät festzulegen.
Für Metal unter macOS sollten Sie stattdessen vor dem Start der Anwendung die Umgebungsvariable ` METAL_DEVICE_WRAPPER_TYPE=1 ` setzen.
Der Aufruf dieser Funktion bei einem Wert von „true“ für „ enable “ entspricht der Einstellung der Umgebungsvariable „ QSG_RHI_DEBUG_LAYER “ auf einen Wert ungleich Null.
Der Standardwert ist „false“.
Hinweis: Das Aktivieren von Debug- oder Validierungs-Layern kann nicht unerhebliche Auswirkungen auf die Leistung haben. Es wird dringend davon abgeraten, Anwendungen mit aktiviertem Flag in die Produktion zu bringen.
Hinweis: Beachten Sie , dass diese Einstellung aufgrund von Unterschieden im Design der zugrunde liegenden Grafik-APIs nicht immer pro „QQuickWindow “ erfolgen kann, auch wenn jedes „ QQuickWindow “ über ein eigenes „ QQuickGraphicsConfiguration “ verfügt. Insbesondere bei Vulkan wird das Instanzobjekt (VkInstance) nur einmal erstellt und dann von allen Fenstern der Anwendung gemeinsam genutzt. Daher wirkt sich die Aktivierung der Validierungsschicht auf alle Fenster aus. Das bedeutet auch, dass der Versuch, die Validierung über ein Fenster zu aktivieren, das erst angezeigt wird, nachdem einige andere Fenster bereits mit dem Rendern begonnen haben, bei Vulkan keine Wirkung zeigt. Andere APIs, wie beispielsweise D3D11, stellen das Konzept der Debug-Ebene als gerätebezogene (ID3D11Device) Einstellung bereit, sodass es tatsächlich auf Fensterbasis gesteuert wird (vorausgesetzt, die Render-Schleife des Szenengraphen verwendet für jedes Fenster ein eigenes Grafik QQuickWindow).
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch isDebugLayerEnabled().
[since 6.5] void QQuickGraphicsConfiguration::setDebugMarkers(bool enable)
Gegebenenfalls steuert „ enable “ das Einfügen von Debug-Markern und Objektnamen in den Grafikbefehlsstrom.
Einige Frameworks, wie beispielsweise „ Qt Quick 3D “, bieten die Möglichkeit, die von ihnen erstellten Grafikobjekte (Puffer, Texturen) mit Namen zu versehen und zudem den Anfang und das Ende von Render-Durchläufen im Befehlspuffer zu kennzeichnen. Diese sind dann in Frame-Aufnahmen sichtbar, die mit Tools wie RenderDoc oder XCode erstellt wurden.
Grafik-APIs, bei denen davon ausgegangen werden kann, dass dies unterstützt wird, sind Vulkan (sofern VK_EXT_debug_utils verfügbar ist), Direct 3D 11 und Metal.
Der Aufruf dieser Funktion mit dem Parameter „ enable “ auf „true“ gesetzt entspricht der Einstellung der Umgebungsvariable „ QSG_RHI_PROFILE “ auf einen Wert ungleich Null.
Der Standardwert ist „false“.
Hinweis: Das Aktivieren von Debug-Markern kann sich auf die Leistung auswirken. Es wird nicht empfohlen, Anwendungen mit aktiviertem Flag in die Produktion zu überführen.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch ` isDebugMarkersEnabled()`.
void QQuickGraphicsConfiguration::setDepthBufferFor2D(bool enable)
Legt die Verwendung des Tiefenpuffers für 2D-Inhalte auf „ enable “ fest. Wenn diese Option deaktiviert ist, schreibt der Szenenbaum „ Qt Quick “ niemals in den Tiefenpuffer.
Standardmäßig ist der Wert „true“, es sei denn, die Umgebungsvariable „ QSG_NO_DEPTH_BUFFER “ ist gesetzt.
Der Standardwert „true“ ist für die überwiegende Mehrheit der Szenen die optimale Einstellung. Das Deaktivieren der Verwendung des Tiefenpuffers verringert die Effizienz des Batchings des Szenengraphen.
Es gibt jedoch Fälle, in denen es nicht ideal ist, das Schreiben von 2D-Inhalten in den Tiefenpuffer zuzulassen. Stellen Sie sich eine 3D-Szene als „Overlay“ über der 2D-Szene vor, die über „ Qt Quick 3D “ mithilfe eines „ View3D “ gerendert wird, bei dem „ renderMode “ auf „ Overlay “ gesetzt ist. In diesem Fall kann ein mit 2D-Inhalten gefüllter Tiefenpuffer zu unerwarteten Ergebnissen führen. Dies liegt daran, dass die Art und Weise, wie der 2D-Szenengraph-Renderer Tiefenwerte generiert und verarbeitet, nicht unbedingt mit der Funktionsweise einer 3D-Szene kompatibel ist. Dies kann zu Konflikten bei den Tiefenwerten, Kollisionen und unerwarteten Fehlern bei der Tiefenprüfung führen. Daher ist es hier am sichersten, diese Funktion mit der Einstellung „ enable “ auf „false“ aufzurufen und das Schreiben in den Tiefenpuffer für die 2D-Inhalte in der Datei „ QQuickWindow “ zu deaktivieren.
Hinweis: Dieses Flag ist nicht vollständig identisch mit der Einstellung der Umgebungsvariable „ QSG_NO_DEPTH_BUFFER “. Dieses Flag steuert nicht das Vorhandensein der Tiefen- und Stencil-Puffer. Es ist vielmehr für die Rendering-Pipeline relevant. Um zu erzwingen, dass überhaupt keine Tiefen-/Stencil-Anhänge vorhanden sind, setzen Sie „ QSG_NO_DEPTH_BUFFER “ und „ QSG_NO_STENCIL_BUFFER “. Beachten Sie jedoch, dass ein solches ` QQuickWindow` und alle darin enthaltenen Item-Ebenen dann möglicherweise nicht mehr mit Elementen wie ` View3D ` in bestimmten Betriebsmodi kompatibel sind, da 3D-Inhalte einen Tiefenpuffer erfordern. Der Aufruf dieser Funktion ist immer sicher, kann jedoch dazu führen, dass Ressourcen wie Tiefenpuffer erstellt werden, obwohl sie nicht aktiv genutzt werden.
void QQuickGraphicsConfiguration::setDeviceExtensions(const QByteArrayList &extensions)
Legt die Liste der zusätzlichen „ extensions “ fest, die auf dem Grafikgerät aktiviert werden sollen (z. B. „ VkDevice “).
Beim Rendern mit einer Grafik-API, bei der dieses Konzept nicht anwendbar ist, werden die „ extensions “ ignoriert.
Hinweis: Die Liste gibt zusätzliche, über die Grundausstattung hinausgehende Erweiterungen an. ` Qt Quick ` aktiviert immer die Erweiterungen, die vom Szenengraphen benötigt werden.
Siehe auch ` deviceExtensions()`.
[since 6.5] void QQuickGraphicsConfiguration::setPipelineCacheLoadFile(const QString &filename)
Legt den „ filename “ fest, aus dem der „ QQuickWindow “ den Anfangsinhalt seines Grafik-/Rechen-Pipeline-Caches laden soll. Der Standardwert ist leer, was bedeutet, dass das Laden des Pipeline-Caches deaktiviert ist.
Eine Erläuterung zu Pipeline-Caches finden Sie unter „ Pipeline Cache Save and Load “.
Das dauerhafte Speichern des Pipeline-Caches kann zu Leistungsverbesserungen bei zukünftigen Ausführungen der Anwendung führen, da aufwendige Schritte wie die Shader-Kompilierung und der Aufbau der Pipeline vermieden werden können.
Wann genau das Laden des Dateiinhalts erfolgt, ist nicht festgelegt; feststeht lediglich, dass es zu einem bestimmten Zeitpunkt während der Initialisierung des Szenengrafiks des „ QQuickWindow “ geschieht. Daher muss die Datei nach dem Aufruf dieser Funktion weiterhin vorhanden sein. „ QQuickGraphicsConfiguration “ speichert lediglich den Dateinamen; es kann selbst keine tatsächlichen E/A- und Grafikoperationen ausführen. Die eigentliche Arbeit wird später erfolgen, möglicherweise in einem anderen Thread.
Bei der Verwendung einer Grafik-API, bei der das Abrufen und Neuladen des Pipeline-Caches (oder von Shader-/Programm-Binärdateien) nicht möglich oder nicht unterstützt ist, hat der Aufruf dieser Funktion keine Auswirkung.
Der Aufruf dieser Funktion entspricht im Wesentlichen dem Setzen der Umgebungsvariablen ` QSG_RHI_PIPELINE_CACHE_LOAD ` auf ` filename`, mit einem wichtigen Unterschied: Diese Funktion steuert den Pipeline-Cache-Speicher ausschließlich für den zugehörigen ` QQuickWindow `. Anwendungen mit mehreren ` QQuickWindow `- oder ` QQuickView `-Instanzen können daher den Cache-Inhalt über für jedes Fenster dedizierte Dateien speichern und später wieder laden. Die Umgebungsvariable lässt dies nicht zu.
Hinweis: Wenn die Daten in der Datei nicht mit dem Grafikgerät und der Treiberversion zur Laufzeit übereinstimmen, wird der Inhalt für die Anwendung transparent ignoriert. Dies gilt für eine Reihe von Grafik-APIs, und die erforderlichen Prüfungen werden von Qt übernommen. Es gibt Ausnahmen, insbesondere Direct 3D 11, wo der „Pipeline-Cache“ ausschließlich zum Speichern der Ergebnisse der HLSL->DXBC-Kompilierung zur Laufzeit verwendet wird und daher geräte- und herstellerunabhängig ist.
Warnung: Die serialisierten Pipeline-Cache-Daten gelten als vertrauenswürdiger Inhalt. Anwendungsentwicklern wird empfohlen, niemals Daten aus nicht vertrauenswürdigen Quellen zu übergeben.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch pipelineCacheLoadFile() und setPipelineCacheSaveFile().
[since 6.5] void QQuickGraphicsConfiguration::setPipelineCacheSaveFile(const QString &filename)
Legt den „ filename “ fest, in dem der „ QQuickWindow “ den Inhalt seines Grafik-/Rechen-Pipeline-Caches speichern soll. Der Standardwert ist leer, was bedeutet, dass das Laden des Pipeline-Caches deaktiviert ist.
Eine Erläuterung zu Pipeline-Caches finden Sie unter „ Pipeline Cache Save and Load “.
Das dauerhafte Speichern des Pipeline-Caches kann zu Leistungsverbesserungen bei zukünftigen Ausführungen der Anwendung führen, da aufwendige Schritte wie die Shader-Kompilierung und der Aufbau der Pipeline vermieden werden können.
Wann das Schreiben der Datei erfolgt, ist nicht definiert. Es wird wahrscheinlich zu einem Zeitpunkt geschehen, an dem der Szenengrafikbaum aufgrund des Schließens des Fensters abgebaut wird. Daher sollten Anwendungen nicht von der Verfügbarkeit der Datei ausgehen, bis der „ QQuickWindow “ vollständig zerstört ist. „ QQuickGraphicsConfiguration “ speichert lediglich den Dateinamen, führt jedoch selbst keine tatsächlichen E/A- und Grafikoperationen durch.
Bei der Verwendung einer Grafik-API, bei der das Abrufen des Pipeline-Caches (oder der Shader-/Programm-Binärdateien) nicht möglich oder nicht unterstützt wird, hat der Aufruf dieser Funktion keine Auswirkung.
Der Aufruf dieser Funktion entspricht im Wesentlichen dem Setzen der Umgebungsvariablen ` QSG_RHI_PIPELINE_CACHE_SAVE ` auf ` filename`, mit einem wichtigen Unterschied: Diese Funktion steuert die Speicherung des Pipeline-Caches ausschließlich für das zugehörige ` QQuickWindow `. Anwendungen mit mehreren ` QQuickWindow `- oder ` QQuickView `-Instanzen können daher den Cache-Inhalt über für jedes Fenster dedizierte Dateien speichern und später wieder laden. Die Umgebungsvariable lässt dies nicht zu.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch pipelineCacheLoadFile() und pipelineCacheSaveFile().
[since 6.5] void QQuickGraphicsConfiguration::setPreferSoftwareDevice(bool enable)
Fordert die Auswahl eines Adapters oder eines physischen Geräts an, das softwarebasierte Rasterisierung verwendet. Gilt nur, wenn die zugrunde liegende API die Aufzählung von Adaptern unterstützt (z. B. Direct 3D oder Vulkan); andernfalls wird dies ignoriert.
Wenn in der Grafik-API-Implementierung kein solcher Grafikadapter oder kein solches physisches Gerät verfügbar ist, wird die Anforderung ignoriert. Bei Direct 3D ist davon auszugehen, dass stets ein WARP-basierter Rasterizer verfügbar ist. Bei Vulkan hat das Flag nur dann eine Auswirkung, wenn „ lavapipe “ von Mesa oder ein anderes physisches Gerät mit dem Status „ VK_PHYSICAL_DEVICE_TYPE_CPU “ verfügbar ist.
Der Aufruf dieser Funktion mit „ enable “ auf „true“ gesetzt entspricht der Einstellung der Umgebungsvariable „ QSG_RHI_PREFER_SOFTWARE_RENDERER “ auf einen Wert ungleich Null.
Der Standardwert ist „false“.
Diese Funktion wurde in Qt 6.5 eingeführt.
Siehe auch ` prefersSoftwareDevice()`.
[since 6.6] void QQuickGraphicsConfiguration::setTimestamps(bool enable)
Wenn diese Option aktiviert ist, werden GPU-Timing-Daten aus Befehlspuffern auf Plattformen und über 3D-APIs erfasst, die dies unterstützen. Diese Daten werden anschließend in den Renderer-Protokollen ausgegeben, die über die Umgebungsvariable ` QSG_RENDER_TIMING ` oder Protokollierungskategorien wie ` qt.scenegraph.time.renderloop` aktiviert werden können, und können auch für andere Module sichtbar gemacht werden, beispielsweise über den Eintrag „ DebugView “ unter ` Qt Quick 3D`.
Standardmäßig ist diese Funktion deaktiviert, da das Erfassen der Daten je nach der zugrunde liegenden Grafik-API zusätzlichen Aufwand erfordern kann, wie beispielsweise das Einfügen von Zeitstempelabfragen in den Befehlsstrom. Um sie zu aktivieren, rufen Sie diese Funktion entweder mit dem Wert „true“ für „ enable “ auf oder setzen Sie die Umgebungsvariable „ QSG_RHI_PROFILE “ auf einen Wert ungleich Null.
Grafik-APIs, bei denen davon ausgegangen werden kann, dass dies unterstützt wird, sind Direct 3D 11, Direct 3D 12, Vulkan (sofern die zugrunde liegende Vulkan-Implementierung Zeitstempelabfragen unterstützt), Metal und OpenGL mit einem Core- oder Kompatibilitätsprofil-Kontext für Version 3.3 oder neuer. Zeitstempel werden unter OpenGL ES nicht unterstützt.
Diese Funktion wurde in Qt 6.6 eingeführt.
Siehe auch „ timestampsEnabled()“ und „ setDebugMarkers()“.
[since 6.6] bool QQuickGraphicsConfiguration::timestampsEnabled() const
Gibt „true“ zurück, wenn die Erfassung von GPU-Zeitdaten aktiviert ist.
Standardmäßig ist der Wert „false“.
Diese Funktion wurde in Qt 6.6 eingeführt.
Siehe auch ` setTimestamps()`.
© 2026 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.