QRhiVulkanInitParams Struct

Vulkan-spezifische Initialisierungsparameter. Mehr...

Kopfzeile: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
Since: Qt 6.6
Vererbt: QRhiInitParams

Öffentliche Variablen

QByteArrayList deviceExtensions
QVulkanInstance *inst
QWindow *window

Statische öffentliche Mitglieder

Detaillierte Beschreibung

Hinweis: Dies ist eine RHI-API mit begrenzten Kompatibilitätsgarantien, siehe QRhi für Details.

Eine Vulkan-basierte QRhi benötigt mindestens eine gültige QVulkanInstance. Es ist Aufgabe des Benutzers, sicherzustellen, dass diese verfügbar und initialisiert ist. Dies geschieht in der Regel in main(), ähnlich wie im Folgenden:

int main(int argc, char **argv)
{
    ...

    QVulkanInstance inst;
    inst.setLayers({ "VK_LAYER_KHRONOS_validation" }); // for debugging only, not for release builds
    inst.setExtensions(QRhiVulkanInitParams::preferredInstanceExtensions());
    if (!inst.create())
        qFatal("Vulkan not available");

    ...
}

Dieses Beispiel aktiviert die Vulkan-Validierungsschichten, wenn sie verfügbar sind, und aktiviert auch die Erweiterungen auf Instanzebene, die QRhi als wünschenswert meldet (z. B. VK_KHR_get_physical_device_properties2), sofern sie von der Vulkan-Implementierung zur Laufzeit unterstützt werden.

Ersteres ist optional und ist während der Entwicklungsphase nützlich: QVulkanInstance leitet Meldungen und Warnungen bequem an qDebug weiter. Vermeiden Sie es jedoch, sie in Produktions-Builds zu aktivieren. Letzteres wird dringend empfohlen und ist wichtig, um bestimmte Funktionen zu ermöglichen (z. B. QRhi::CustomInstanceStepRate).

Sobald dies geschehen ist, kann eine Vulkan-basierte QRhi erstellt werden, indem die Instanz und eine QWindow mit dem Oberflächentyp QSurface::VulkanSurface übergeben wird:

QRhiVulkanInitParams params;
params.inst = vulkanInstance;
params.window = window;
rhi = QRhi::create(QRhi::Vulkan, &params);

Das Fenster ist optional und kann weggelassen werden. Dies wird jedoch nicht empfohlen, da es dann keine Möglichkeit gibt, sicherzustellen, dass die Darstellung unterstützt wird, während eine Grafikwarteschlange ausgewählt wird.

Hinweis: Auch wenn ein Fenster angegeben wird, können QRhiSwapChain Objekte auch für andere Fenster erstellt werden, solange deren QWindow::surfaceType() auf QSurface::VulkanSurface gesetzt ist.

Um die Aktivierung zusätzlicher Erweiterungen auf dem Vulkan-Gerät anzufordern, führen Sie diese in deviceExtensions auf. Dies kann bei der Integration mit nativem Vulkan-Rendering-Code von Bedeutung sein.

Es wird erwartet das die vom Backend gewünschte Liste von Instanzerweiterungen durch den Aufruf der statischen Funktion preferredInstanceExtensions() vor der Initialisierung einer QVulkanInstance abgefragt wird. Die zurückgegebene Liste kann sicher an QVulkanInstance::setExtensions() übergeben werden, da nicht unterstützte Erweiterungen automatisch herausgefiltert werden. Wenn dies nicht geschieht, können bestimmte Funktionen wie QRhi::CustomInstanceStepRate als nicht unterstützt gemeldet werden, selbst wenn die Vulkan-Implementierung auf dem System die entsprechende Funktionalität unterstützt.

Um die volle Funktionalität zu erhalten, muss auf QVulkanInstance die API 1.1 aktiviert sein, sofern verfügbar. Dies bedeutet, dass QVulkanInstance::setApiVersion() mit 1.1 oder höher aufgerufen werden muss, wenn QVulkanInstance::supportedApiVersion() meldet, dass mindestens Vulkan 1.1 unterstützt wird. Ist dies nicht der Fall, können bestimmte Funktionen wie QRhi::RenderTo3DTextureSlice als nicht unterstützt gemeldet werden, selbst wenn die Vulkan-Implementierung auf dem System Vulkan 1.1 oder neuer unterstützt.

Arbeiten mit vorhandenen Vulkan-Geräten

Bei der Zusammenarbeit mit einer anderen Grafik-Engine kann es notwendig sein, eine QRhi -Instanz zu erhalten, die das gleiche Vulkan-Gerät verwendet. Dies kann erreicht werden, indem ein Zeiger auf ein QRhiVulkanNativeHandles an QRhi::create() übergeben wird.

Das physikalische Gerät muss immer auf einen Nicht-Null-Wert gesetzt werden. Wenn die Absicht ist, nur ein physikalisches Gerät zu spezifizieren, aber den Rest der VkDevice und Warteschlangenerstellung QRhi zu überlassen, dann müssen keine anderen Mitglieder in der Struktur ausgefüllt werden. Dies ist zum Beispiel der Fall, wenn man mit OpenXR arbeitet.

Um ein bestehendes VkDevice zu übernehmen, muss das Gerätefeld ebenfalls auf einen Nicht-Null-Wert gesetzt werden. Darüber hinaus ist der Index der Grafikwarteschlangenfamilie erforderlich. Der Queue-Index ist optional, da der Standardwert von 0 oft geeignet ist.

Optional kann auch ein vorhandenes Befehlspool-Objekt angegeben werden. Ebenfalls optional kann vmemAllocator verwendet werden, um denselben Vulkan-Speicher-Allokator zwischen zwei QRhi -Instanzen zu teilen.

Die QRhi übernimmt nicht die Eigentümerschaft an den externen Objekten.

Anwendungen wird empfohlen, die Liste der gewünschten Geräteerweiterungen durch Aufruf der statischen Funktion preferredExtensionsForImportedDevice() abzufragen und sie auf dem VkDevice zu aktivieren. Andernfalls könnten bestimmte QRhi Funktionen nicht verfügbar sein.

Dokumentation der Mitgliedsfunktionen

[static] QByteArrayList QRhiVulkanInitParams::preferredExtensionsForImportedDevice()

Gibt die Liste der Geräteerweiterungen zurück, die auf VkDevice aktiviert sein sollen, wenn ein Vulkan-basiertes QRhi mit einem extern erstellten VkDevice Objekt erstellt wird.

[static] QByteArrayList QRhiVulkanInitParams::preferredInstanceExtensions()

Gibt die Liste der Instanzerweiterungen zurück, von denen erwartet wird, dass sie auf dem QVulkanInstance aktiviert sind, das für die Vulkan-basierte QRhi verwendet wird.

Die zurückgegebene Liste kann sicher an QVulkanInstance::setExtensions() übergeben werden, da nicht unterstützte Erweiterungen automatisch herausgefiltert werden.

Dokumentation der Mitgliedsvariablen

QByteArrayList QRhiVulkanInitParams::deviceExtensions

Optional, standardmäßig leer. Die Liste der zu aktivierenden Vulkan-Geräteerweiterungen. Nicht unterstützte Erweiterungen werden gnädigerweise ignoriert.

QVulkanInstance *QRhiVulkanInitParams::inst

Die QVulkanInstance, die bereits erfolgreich created war, wird benötigt.

QWindow *QRhiVulkanInitParams::window

Optional, aber empfohlen, wenn Sie eine QWindow anvisieren.

© 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.