Auf dieser Seite

QRhiVulkanInitParams Struct

Vulkan-spezifische Initialisierungsparameter. Mehr...

Header: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
Seit: Qt 6.6
Erbt von: QRhiInitParams

Öffentliche Variablen

QByteArrayList deviceExtensions
QVulkanInstance *inst
QWindow *window

Statische öffentliche Mitglieder

Ausführliche Beschreibung

Hinweis: Hierbei handelt es sich um eine RHI-API mit eingeschränkten Kompatibilitätsgarantien. Weitere Informationen finden Sie unter QRhi.

Ein auf Vulkan basierendes „ QRhi “ benötigt mindestens ein gültiges „ QVulkanInstance “. Es obliegt dem Benutzer, sicherzustellen, dass dieses verfügbar und initialisiert ist. Dies erfolgt in der Regel in der Funktion „main()“ ähnlich wie im folgenden Beispiel:

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, sofern diese verfügbar sind, und aktiviert zudem die von QRhi als wünschenswert gemeldeten Erweiterungen auf Instanzebene (wie z. B. VK_KHR_get_physical_device_properties2), sofern diese von der Vulkan-Implementierung zur Laufzeit unterstützt werden.

Ersteres ist optional und nützlich während der Entwicklungsphase, da „ QVulkanInstance “ Meldungen und Warnungen praktischerweise an „ qDebug “ umleitet. Vermeiden Sie es jedoch, diese Option in Produktionsbuilds zu aktivieren. Letzteres wird dringend empfohlen und ist wichtig, um bestimmte Funktionen funktionsfähig zu machen (zum Beispiel „ QRhi::CustomInstanceStepRate “).

Sobald dies erledigt ist, kann ein Vulkan-basiertes „ QRhi “ erstellt werden, indem die Instanz und ein „ QWindow “ übergeben werden, dessen Oberflächentyp auf „ QSurface::VulkanSurface “ gesetzt ist:

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 sich dann bei der Auswahl einer Grafikwarteschlange nicht sicherstellen lässt, dass die Darstellung unterstützt wird.

Hinweis: Selbst wenn ein Fenster angegeben ist, können „ QRhiSwapChain “-Objekte auch für andere Fenster erstellt werden, solange bei allen die Eigenschaft „ QWindow::surfaceType()“ auf „ QSurface::VulkanSurface “ gesetzt ist.

Um die Aktivierung zusätzlicher Erweiterungen auf dem Vulkan-Gerät anzufordern, listen Sie diese in ` deviceExtensions` auf. Dies kann bei der Integration mit nativem Vulkan-Rendering-Code relevant sein.

Es wird erwartet, dass die vom Backend gewünschte Liste der Instanzerweiterungen durch Aufruf der statischen Funktion ` preferredInstanceExtensions()` abgefragt wird, bevor ein ` QVulkanInstance` initialisiert wird. Die zurückgegebene Liste kann unverändert an ` QVulkanInstance::setExtensions()` übergeben werden, da nicht unterstützte Erweiterungen automatisch herausgefiltert werden. Wird dies nicht getan, werden bestimmte Funktionen, wie z. B. „ QRhi::CustomInstanceStepRate “, möglicherweise als nicht unterstützt gemeldet, selbst wenn die Vulkan-Implementierung auf dem System die entsprechende Funktionalität unterstützt.

Für den vollen Funktionsumfang muss auf dem „ QVulkanInstance “ die API 1.1 aktiviert sein, sofern verfügbar. Das bedeutet, dass ` QVulkanInstance::setApiVersion()` mit der Version 1.1 oder höher aufgerufen werden muss, sobald ` QVulkanInstance::supportedApiVersion()` meldet, dass mindestens Vulkan 1.1 unterstützt wird. Wird dies nicht beachtet, werden bestimmte Funktionen, wie z. B. „ QRhi::RenderTo3DTextureSlice “, möglicherweise als nicht unterstützt gemeldet, 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 erforderlich sein, eine ` QRhi `-Instanz zu erhalten, die dasselbe Vulkan-Gerät verwendet. Dies kann erreicht werden, indem ein Zeiger auf ein ` QRhiVulkanNativeHandles ` an ` QRhi::create()` übergeben wird.

Das physische Gerät muss immer auf einen Wert ungleich Null gesetzt werden. Wenn lediglich ein physisches Gerät angegeben werden soll, die Erstellung des restlichen VkDevice und der Warteschlange jedoch „ QRhi “ überlassen wird, müssen keine weiteren Felder der Struktur ausgefüllt werden. Dies ist beispielsweise bei der Arbeit mit OpenXR der Fall.

Um ein bestehendes ` VkDevice` zu übernehmen, muss das Feld „device“ ebenfalls auf einen Wert ungleich Null gesetzt werden. Zusätzlich ist der Index der Grafikwarteschlangenfamilie erforderlich. Der Warteschlangenindex ist optional, da der Standardwert 0 oft geeignet ist.

Optional kann auch ein vorhandenes „ QRhi “-Objekt angegeben werden. Ebenfalls optional kann „vmemAllocator“ verwendet werden, um denselben Vulkan-Speicherzuordner zwischen zwei „ “-Instanzen gemeinsam zu nutzen.

Der „ QRhi “ übernimmt keine Eigentumsrechte an den externen Objekten.

Anwendungen sollten die Liste der gewünschten Geräteerweiterungen durch Aufruf der statischen Funktion ` preferredExtensionsForImportedDevice()` abfragen und diese auf dem `VkDevice` aktivieren. Andernfalls sind bestimmte Funktionen von „ QRhi “ möglicherweise nicht verfügbar.

Dokumentation der Mitgliedsfunktionen

[static] QByteArrayList QRhiVulkanInitParams::preferredExtensionsForImportedDevice()

Gibt die Liste der Geräteerweiterungen zurück, von denen erwartet wird, dass sie auf dem „ VkDevice “ aktiviert sind, 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, der für das Vulkan-basierte „ QRhi “ verwendet wird.

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

Dokumentation zu Member-Variablen

QByteArrayList QRhiVulkanInitParams::deviceExtensions

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

QVulkanInstance *QRhiVulkanInitParams::inst

Die „ QVulkanInstance “, die bereits erfolgreich unter created veröffentlicht wurde, ist erforderlich.

QWindow *QRhiVulkanInitParams::window

Optional, wird jedoch empfohlen, wenn die Zielgruppe „ QWindow “ ist.

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