QRhiResource Class
Clase base para clases que encapsulan objetos de recursos nativos. Más...
| Cabecera: | #include <rhi/qrhi.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate) |
| qmake: | QT += gui-private |
| Desde: | Qt 6.6 |
| Heredado por: |
Tipos públicos
| enum | Type { Buffer, Texture, Sampler, RenderBuffer, RenderPassDescriptor, …, ShadingRateMap } |
Funciones Públicas
| 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) |
Descripción detallada
Nota: Se trata de una API RHI con garantías de compatibilidad limitadas; consulte QRhi para obtener más información.
Documentación de tipos de miembros
enum QRhiResource::Type
Especifica el tipo de recurso.
| Constante | Valor |
|---|---|
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 |
QRhiResource::ShadingRateMap | 12 |
Documentación de la función miembro
[virtual noexcept] QRhiResource::~QRhiResource()
Destructor.
Libera (o solicita la liberación diferida de) los recursos gráficos nativos subyacentes, si los hubiera.
Nota: Los recursos referenciados por comandos para el fotograma actual no deben ser liberados hasta que el fotograma sea enviado por QRhi::endFrame().
Véase también destroy().
void QRhiResource::deleteLater()
Cuando se llama sin que se esté grabando un fotograma, esta función equivale a borrar el objeto. Sin embargo, entre un QRhi::beginFrame() y un QRhi::endFrame() el comportamiento es diferente: el QRhiResource no será destruido hasta que la trama sea enviada a través de QRhi::endFrame(), satisfaciendo así el requisito QRhi de no alterar QRhiResource objetos que son referenciados por la trama que está siendo grabada.
Si el QRhi que creó este objeto ya ha sido destruido, el objeto será borrado inmediatamente.
El uso de deleteLater() puede ser útil en muchos casos, y complementa la garantía de bajo nivel (que los objetos gráficos nativos subyacentes nunca se destruyen hasta que es seguro hacerlo y se sabe con certeza que no son utilizados por la GPU en un fotograma aún en vuelo), ofreciendo una forma de asegurarse de que las instancias de objetos C++ (de QRhiBuffer, QRhiTexture, etc.) también siguen siendo válidas hasta el final del fotograma actual.
El siguiente ejemplo muestra una forma conveniente de crear un búfer desechable que sólo se utiliza en un fotograma y se libera automáticamente en endFrame(). (En lo que respecta a los búferes nativos subyacentes, se aplica la garantía habitual: el backend QRhi aplaza su liberación hasta que se garantice que el fotograma en el que la GPU accede al búfer ha finalizado).
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();
Véase también destroy().
[pure virtual] void QRhiResource::destroy()
Libera (o solicita la liberación diferida de) los recursos gráficos nativos subyacentes. Se puede invocar varias veces, pero las invocaciones posteriores no serán necesarias.
Una vez llamada a destroy(), la instancia QRhiResource puede ser reutilizada, llamando de nuevo a create(). Esto resultará en la creación de nuevos recursos gráficos nativos debajo.
Nota: Los recursos referenciados por comandos para el frame actual no deben ser liberados hasta que el frame sea enviado por QRhi::endFrame().
El destructor QRhiResource también realiza la misma tarea, por lo que no es necesario llamar a esta función antes de borrar un QRhiResource.
Véase también deleteLater().
quint64 QRhiResource::globalResourceId() const
Devuelve el identificador único global de este QRhiResource.
El código de usuario raramente necesita tratar con el valor directamente. Se utiliza internamente con fines de seguimiento y contabilidad.
QByteArray QRhiResource::name() const
Devuelve el nombre del objeto establecido actualmente. Por defecto, el nombre está vacío.
Véase también setName().
[pure virtual] QRhiResource::Type QRhiResource::resourceType() const
Devuelve el tipo del recurso.
QRhi *QRhiResource::rhi() const
Devuelve el QRhi que creó este recurso.
Si el QRhi que creó este objeto ya está destruido, el resultado es nullptr.
void QRhiResource::setName(const QByteArray &name)
Establece un name para el objeto.
Esto permite obtener nombres descriptivos para los recursos gráficos nativos visibles en herramientas de depuración de gráficos, como RenderDoc y XCode.
Cuando se trata de nombrar objetos nativos transmitiendo el nombre a través de la API gráfica apropiada, ten en cuenta que el nombre se ignora cuando QRhi::DebugMarkers no está soportado, y puede, dependiendo del backend, también ser ignorado cuando QRhi::EnableDebugMarkers no está establecido.
Nota: El nombre puede ser ignorado para objetos que no sean buffers, renderbuffers y texturas, dependiendo del backend.
Nota: El nombre puede ser modificado. Para recursos con ranuras, como un QRhiBuffer respaldado por múltiples buffers nativos, QRhi añadirá un sufijo para hacer que los buffers nativos subyacentes sean fácilmente distinguibles unos de otros.
Véase también name().
© 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.