QRhiRenderPassDescriptor Class
Render-Pass-Ressource. 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: | QRhiResource |
Öffentliche Funktionen
| virtual bool | isCompatible(const QRhiRenderPassDescriptor *other) const = 0 |
| virtual const QRhiNativeHandles * | nativeHandles() |
| virtual QRhiRenderPassDescriptor * | newCompatibleRenderPassDescriptor() const = 0 |
| virtual QVector<quint32> | serializedFormat() const = 0 |
Neu implementierte öffentliche Funktionen
| virtual QRhiResource::Type | resourceType() const override |
Ausführliche Beschreibung
Ein Render-Pass – sofern ein solches Konzept in der zugrunde liegenden Grafik-API existiert – ist eine Sammlung von Attachments (Farbe, Tiefe, Stencil) und beschreibt, wie diese Attachments verwendet werden.
Hinweis: Dies ist eine RHI-API mit eingeschränkten Kompatibilitätsgarantien; weitere Informationen finden Sie unter QRhi.
Dokumentation der Mitgliedsfunktionen
[pure virtual] bool QRhiRenderPassDescriptor::isCompatible(const QRhiRenderPassDescriptor *other) const
Gibt „true“ zurück, wenn der „ other “ QRhiRenderPassDescriptor mit diesem kompatibel ist, was bedeutet, dass this und other in QRhiGraphicsPipeline::setRenderPassDescriptor() austauschbar verwendet werden können.
Das Konzept der Kompatibilität von Renderpass-Deskriptoren ähnelt dem der layout compatibility von QRhiShaderResourceBindings -Instanzen. Sie ermöglichen eine bessere Wiederverwendung von QRhiGraphicsPipeline -Instanzen: So wird beispielsweise erwartet, dass ein QRhiGraphicsPipeline -Instanz-Cache diese Funktionen nutzt, um nach einer passenden Pipeline zu suchen, anstatt lediglich Zeiger zu vergleichen. Dadurch können verschiedene QRhiRenderPassDescriptor und QRhiShaderResourceBindings in Kombination mit der Pipeline verwendet werden, solange sie kompatibel sind.
Die genauen Details der Kompatibilität hängen von der zugrunde liegenden Grafik-API ab. Zwei Renderpass-Deskriptoren created aus demselben QRhiTextureRenderTarget sind immer kompatibel.
Ähnlich wie bei „ QRhiShaderResourceBindings “ kann die Kompatibilität auch geprüft werden, ohne dass zwei Objekte vorhanden sein müssen. Durch das Extrahieren des undurchsichtigen Blobs mittels des Aufrufs von ` serializedFormat()` lässt sich die Kompatibilität prüfen, indem der zurückgegebene Vektor mit dem ` serializedFormat()` eines anderen ` QRhiRenderPassDescriptor` verglichen wird. Dies bietet in bestimmten Situationen Vorteile, da so die Kompatibilität eines ` QRhiRenderPassDescriptor ` mit einem ` QRhiGraphicsPipeline ` geprüft werden kann, selbst wenn der ` QRhiRenderPassDescriptor `, mit dem die Pipeline ursprünglich erstellt wurde, nicht mehr verfügbar ist (die von dessen ` serializedFormat()` zurückgegebenen Daten jedoch weiterhin vorhanden sind).
Siehe auch „ newCompatibleRenderPassDescriptor()“ und „ serializedFormat()“.
[virtual] const QRhiNativeHandles *QRhiRenderPassDescriptor::nativeHandles()
Gibt einen Zeiger auf eine backend-spezifische Unterklasse von ` QRhiNativeHandles ` zurück, beispielsweise ` QRhiVulkanRenderPassNativeHandles`. Der Rückgabewert ist ` nullptr `, wenn das Backend die Offenlegung der zugrunde liegenden nativen Ressourcen nicht unterstützt.
Siehe auch „ QRhiVulkanRenderPassNativeHandles “.
[pure virtual] QRhiRenderPassDescriptor *QRhiRenderPassDescriptor::newCompatibleRenderPassDescriptor() const
Gibt ein neues ` QRhiRenderPassDescriptor ` zurück, das mit diesem Objekt ` compatible ` ist.
Diese Funktion ermöglicht das Klonen eines ` QRhiRenderPassDescriptor`. Das zurückgegebene Objekt ist sofort einsatzbereit, und die Eigentumsrechte werden auf den Aufrufer übertragen. Das Klonen eines „ QRhiRenderPassDescriptor “-Objekts kann in Situationen nützlich sein, in denen das Objekt in Datenstrukturen gespeichert ist, die mit Grafik-Pipelines in Verbindung stehen (um die Erstellung neuer Pipelines zu ermöglichen, die wiederum ein „Renderpass-Descriptor“-Objekt erfordern), und die Lebensdauer des aus einem Render-Target erstellten Renderpass-Descriptors kürzer sein kann als die der Pipelines. (Beispielsweise, weil die Engine Renderpasses zusammen mit den Texturen und Renderzielen, aus denen sie erstellt wurden, verwaltet und löscht.) In einer solchen Situation kann es von Vorteil sein, eine geklonte Version in den Datenstrukturen zu speichern und damit auch die Eigentumsrechte zu übertragen.
Siehe auch isCompatible().
[override virtual] QRhiResource::Type QRhiRenderPassDescriptor::resourceType() const
Implementiert neu: ` QRhiResource::resourceType()` const.
Gibt den Ressourcentyp zurück.
[pure virtual] QVector<quint32> QRhiRenderPassDescriptor::serializedFormat() const
Gibt einen Vektor aus Ganzzahlen zurück, der einen undurchsichtigen Blob enthält, der die für „ compatibility “ relevanten Daten beschreibt.
Sind zwei „ QRhiRenderPassDescriptor “-Objekte „ rp1 “ und „ rp2 “ gegeben, gilt: Sind die von dieser Funktion zurückgegebenen Daten identisch, dann gilt rp1->isCompatible(rp2), und umgekehrt gilt ebenfalls.
Hinweis: Die zurückgegebenen Daten sind für die Speicherung im Arbeitsspeicher und für Vergleiche während der Lebensdauer des „ QRhi “-Objekts vorgesehen, zu dem das Objekt gehört. Sie sind nicht für die Speicherung auf Festplatte, die Wiederverwendung zwischen Prozessen oder die Verwendung mit mehreren „ QRhi “-Instanzen mit potenziell unterschiedlichen Backends gedacht.
Hinweis: Der Aufruf dieser Funktion soll eine kostengünstige Operation sein, da die Backends die Daten in dieser Funktion nicht berechnen sollen, sondern eine bereits berechnete Datenreihe zurückgeben.
Beim Erstellen wiederverwendbarer Komponenten als Teil einer Bibliothek, in der Grafikpipelines erstellt und verwaltet werden, während sie auf ein vom Kunden der Bibliothek verwaltetes „ QRhiRenderTarget “ (sei es eine Swapchain oder eine Textur) ausgerichtet sind, müssen die Komponenten in der Lage sein, mit einem sich ändernden „ QRhiRenderPassDescriptor “ umzugehen. Beispielsweise, weil sich das Renderziel ändert und dadurch die zuvor QRhiRenderPassDescriptor (zumindest in Bezug auf das neue Renderziel) ungültig wird, da nun möglicherweise ein anderes Farbformat und andere Anhänge vorliegen. Oder weil variable rate shading dynamisch in Gebrauch genommen wird. Ein einfaches Muster, das dabei hilft, damit umzugehen, besteht darin, bei jedem Frame die folgende Prüfung durchzuführen, um den Fall zu erkennen, in dem die Pipeline einem neuen „ QRhiRenderPassDescriptor “ zugeordnet werden muss, da sich das Renderziel im Vergleich zu früheren Frames geändert hat:
QRhiRenderPassDescriptor *rp = m_renderTarget->renderPassDescriptor();
if (m_pipeline && rp->serializedFormat() != m_renderPassFormat) {
m_pipeline->setRenderPassDescriptor(rp);
m_renderPassFormat = rp->serializedFormat();
m_pipeline->create();
}
// remember to store m_renderPassFormat also when creating m_pipeline the first timeSiehe auch isCompatible().
© 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.