QRhiResource Class
Basisklasse für Klassen, die native Ressourcenobjekte kapseln. 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 |
Geerbt von: |
Öffentliche Typen
enum | Type { Buffer, Texture, Sampler, RenderBuffer, RenderPassDescriptor, …, CommandBuffer } |
Öffentliche Funktionen
virtual | ~QRhiResource() |
void | deleteLater() |
virtual void | destroy() = 0 |
quint64 | globalResourceId() const |
QByteArray | name() const |
virtual QRhiResource::Type | resourceType() const = 0 |
QRhi * | rhi() const |
void | setName(const QByteArray &name) |
Detaillierte Beschreibung
Hinweis: Dies ist eine RHI API mit eingeschränkten Kompatibilitätsgarantien, siehe QRhi für Details.
Dokumentation der Mitgliedstypen
enum QRhiResource::Type
Gibt den Typ der Ressource an.
Konstante | Wert |
---|---|
QRhiResource::Buffer | 0 |
QRhiResource::Texture | 1 |
QRhiResource::Sampler | 2 |
QRhiResource::RenderBuffer | 3 |
QRhiResource::RenderPassDescriptor | 4 |
QRhiResource::SwapChainRenderTarget | 5 |
QRhiResource::TextureRenderTarget | 6 |
QRhiResource::ShaderResourceBindings | 7 |
QRhiResource::GraphicsPipeline | 8 |
QRhiResource::SwapChain | 9 |
QRhiResource::ComputePipeline | 10 |
QRhiResource::CommandBuffer | 11 |
Mitgliederfunktion Dokumentation
[virtual noexcept]
QRhiResource::~QRhiResource()
Destruktor.
Gibt die zugrundeliegenden nativen Grafikressourcen frei (oder fordert eine verzögerte Freigabe an), sofern welche vorhanden sind.
Hinweis: Ressourcen, die von Befehlen für den aktuellen Frame referenziert werden, sollten erst freigegeben werden, wenn der Frame von QRhi::endFrame() übergeben wird.
Siehe auch destroy().
void QRhiResource::deleteLater()
Wenn diese Funktion aufgerufen wird, ohne dass ein Frame aufgezeichnet wurde, ist sie gleichbedeutend mit dem Löschen des Objekts. Zwischen QRhi::beginFrame() und QRhi::endFrame() ist das Verhalten jedoch anders: QRhiResource wird erst zerstört, wenn der Frame über QRhi::endFrame() übermittelt wird, und erfüllt damit die Anforderung von QRhi, QRhiResource Objekte, auf die der aufgezeichnete Frame verweist, nicht zu verändern.
Wenn das QRhi, das dieses Objekt erstellt hat, bereits zerstört ist, wird das Objekt sofort gelöscht.
Die Verwendung von deleteLater() kann in vielen Fällen nützlich sein und ergänzt die Low-Level-Garantie (dass die zugrundeliegenden nativen Grafikobjekte niemals zerstört werden, bis es sicher ist, dies zu tun, und bis mit Sicherheit bekannt ist, dass sie nicht von der GPU in einem noch laufenden Frame verwendet werden), indem sie eine Möglichkeit bietet, sicherzustellen, dass die C++-Objektinstanzen (von QRhiBuffer, QRhiTexture usw.) selbst auch bis zum Ende des aktuellen Frames gültig bleiben.
Das folgende Beispiel zeigt eine bequeme Möglichkeit, einen Wegwerfpuffer zu erstellen, der nur in einem Frame verwendet wird und automatisch mit endFrame() freigegeben wird. (für die zugrundeliegenden nativen Puffer gilt die übliche Garantie: das QRhi Backend schiebt die Freigabe dieser Puffer auf, bis sichergestellt ist, dass der Frame, in dem die GPU auf den Puffer zugreift, abgeschlossen ist)
rhi->beginFrame(swapchain); QRhiBuffer *buf = rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, 256); buf->deleteLater(); // ! u = rhi->nextResourceUpdateBatch(); u->uploadStaticBuffer(buf, data); // ... draw with buf rhi->endFrame();
Siehe auch destroy().
[pure virtual]
void QRhiResource::destroy()
Gibt die zugrundeliegenden nativen Grafikressourcen frei (oder fordert deren verzögerte Freigabe an). Sicherer mehrfacher Aufruf, nachfolgende Aufrufe sind dann ein No-op.
Nach dem Aufruf von destroy() kann die Instanz QRhiResource wiederverwendet werden, indem create()
erneut aufgerufen wird. Das führt dann dazu, dass darunter neue native Grafikressourcen erzeugt werden.
Hinweis: Ressourcen, die von Befehlen für den aktuellen Frame referenziert werden, sollten nicht freigegeben werden, bis der Frame von QRhi::endFrame() übergeben wird.
Der QRhiResource Destruktor erfüllt dieselbe Aufgabe, so dass der Aufruf dieser Funktion vor dem Löschen eines QRhiResource nicht notwendig ist.
Siehe auch deleteLater().
quint64 QRhiResource::globalResourceId() const
Gibt den globalen, eindeutigen Bezeichner dieser QRhiResource zurück.
Der Benutzercode muss sich nur selten direkt mit diesem Wert befassen. Er wird intern zur Verfolgung und Buchführung verwendet.
QByteArray QRhiResource::name() const
Gibt den aktuell eingestellten Objektnamen zurück. Standardmäßig ist der Name leer.
Siehe auch setName().
[pure virtual]
QRhiResource::Type QRhiResource::resourceType() const
Gibt den Typ der Ressource zurück.
QRhi *QRhiResource::rhi() const
Gibt die QRhi zurück, die diese Ressource erstellt hat.
Wenn das QRhi, das dieses Objekt erstellt hat, bereits zerstört ist, lautet das Ergebnis nullptr
.
void QRhiResource::setName(const QByteArray &name)
Setzt eine name für das Objekt.
Dies ermöglicht es, beschreibende Namen für die nativen Grafikressourcen zu erhalten, die in Grafik-Debugging-Tools wie RenderDoc und XCode sichtbar sind.
Bei der Benennung nativer Objekte durch Weitergabe des Namens über die entsprechende Grafik-API ist zu beachten, dass der Name ignoriert wird, wenn QRhi::DebugMarkers nicht unterstützt wird, und je nach Backend auch ignoriert werden kann, wenn QRhi::EnableDebugMarkers nicht gesetzt ist.
Hinweis: Der Name kann je nach Backend für andere Objekte als Puffer, Renderpuffer und Texturen ignoriert werden.
Hinweis: Der Name kann geändert werden. Für Slotted-Ressourcen, wie z.B. ein QRhiBuffer, das von mehreren nativen Puffern unterstützt wird, fügt QRhi ein Suffix an, um die zugrunde liegenden nativen Puffer leicht voneinander unterscheiden zu können.
Siehe auch name().
© 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.