En esta página

QRhiRenderPassDescriptor Class

Renderizar recurso de pase. 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
Hereda: QRhiResource

Funciones Públicas

virtual bool isCompatible(const QRhiRenderPassDescriptor *other) const = 0
virtual const QRhiNativeHandles *nativeHandles()
virtual QRhiRenderPassDescriptor *newCompatibleRenderPassDescriptor() const = 0
virtual QVector<quint32> serializedFormat() const = 0

Funciones Públicas Reimplementadas

virtual QRhiResource::Type resourceType() const override

Descripción Detallada

Un pase de renderizado, si tal concepto existe en la API gráfica subyacente, es una colección de adjuntos (color, profundidad, stencil) y describe cómo se utilizan esos adjuntos.

Nota: Se trata de una API RHI con garantías de compatibilidad limitadas, consulte QRhi para obtener más detalles.

Documentación de las funciones miembro

[pure virtual] bool QRhiRenderPassDescriptor::isCompatible(const QRhiRenderPassDescriptor *other) const

Devuelve true si el other QRhiRenderPassDescriptor es compatible con este, lo que significa que this y other pueden usarse indistintamente en QRhiGraphicsPipeline::setRenderPassDescriptor().

El concepto de compatibilidad de los descriptores renderpass es similar al de layout compatibility de las instancias QRhiShaderResourceBindings. Permiten una mejor reutilización de las instancias de QRhiGraphicsPipeline: por ejemplo, se espera que la caché de una instancia de QRhiGraphicsPipeline utilice estas funciones para buscar una canalización coincidente, en lugar de limitarse a comparar punteros, permitiendo así que se utilicen diferentes QRhiRenderPassDescriptor y QRhiShaderResourceBindings en combinación con la canalización, siempre que sean compatibles.

Los detalles exactos de la compatibilidad dependen de la API gráfica subyacente. Dos descriptores renderpass created del mismo QRhiTextureRenderTarget son siempre compatibles.

De forma similar a QRhiShaderResourceBindings, la compatibilidad también puede comprobarse sin disponer de dos objetos existentes. La extracción de la mancha opaca llamando a serializedFormat() permite comprobar la compatibilidad comparando el vector devuelto con otro QRhiRenderPassDescriptor's serializedFormat(). Esto tiene beneficios en ciertas situaciones, porque permite probar la compatibilidad de un QRhiRenderPassDescriptor con un QRhiGraphicsPipeline incluso cuando el QRhiRenderPassDescriptor con el que se construyó originalmente la tubería ya no está disponible (pero los datos devueltos por su serializedFormat() todavía lo están).

Véase también newCompatibleRenderPassDescriptor() y serializedFormat().

[virtual] const QRhiNativeHandles *QRhiRenderPassDescriptor::nativeHandles()

Devuelve un puntero a una subclase de QRhiNativeHandles específica del backend, como QRhiVulkanRenderPassNativeHandles. El valor devuelto es nullptr cuando la exposición de los recursos nativos subyacentes no está soportada por el backend.

Véase también QRhiVulkanRenderPassNativeHandles.

[pure virtual] QRhiRenderPassDescriptor *QRhiRenderPassDescriptor::newCompatibleRenderPassDescriptor() const

Devuelve un nuevo QRhiRenderPassDescriptor que es compatible con éste.

Esta función permite clonar un QRhiRenderPassDescriptor. El objeto devuelto está listo para ser utilizado, y la propiedad se transfiere a quien lo llama. Clonar un objeto QRhiRenderPassDescriptor puede resultar útil en situaciones en las que el objeto se almacena en estructuras de datos relacionadas con canalizaciones gráficas (para permitir la creación de nuevas canalizaciones que a su vez requieren un objeto descriptor de renderpass), y el tiempo de vida del descriptor de renderpass creado a partir de un objetivo de renderización puede ser más corto que el de las canalizaciones. (por ejemplo, porque el motor gestiona y destruye los renderpasses junto con las texturas y los objetivos de renderizado desde los que fue creado) En tal situación, puede ser beneficioso almacenar una versión clonada en las estructuras de datos, y así transferir también la propiedad.

Véase también isCompatible().

[override virtual] QRhiResource::Type QRhiRenderPassDescriptor::resourceType() const

Reimplementa: QRhiResource::resourceType() const.

Devuelve el tipo de recurso.

[pure virtual] QVector<quint32> QRhiRenderPassDescriptor::serializedFormat() const

Devuelve un vector de enteros que contiene una nota opaca que describe los datos relevantes para compatibility.

Dados dos objetos QRhiRenderPassDescriptor rp1 y rp2, si los datos devueltos por esta función son idénticos, entonces rp1->isCompatible(rp2), y viceversa también son válidos.

Nota: Los datos devueltos están pensados para ser almacenados en memoria y comparados durante la vida del QRhi al que pertenece el objeto. No está pensada para almacenarse en disco, reutilizarse entre procesos o utilizarse con múltiples instancias de QRhi con backends potencialmente diferentes.

Nota: Se espera que llamar a esta función sea una operación barata, ya que se supone que los backends no calculan los datos en esta función, sino que devuelven una serie de datos ya calculados.

Cuando se crean componentes reutilizables como parte de una librería, donde los pipelines gráficos son creados y mantenidos mientras tienen como objetivo un QRhiRenderTarget (ya sea un swapchain o una textura) gestionado por el cliente de la librería, los componentes deben ser capaces de tratar con un QRhiRenderPassDescriptor cambiante. Por ejemplo, porque el objetivo de renderizado cambia y por lo tanto invalida el QRhiRenderPassDescriptor anterior (con respecto al nuevo objetivo de renderizado al menos) debido a que ahora tiene un formato de color y archivos adjuntos potencialmente diferentes. O porque variable rate shading se utiliza de forma dinámica. Un patrón simple que ayuda a lidiar con esto es realizar la siguiente comprobación en cada fotograma, para reconocer el caso en que la tubería necesita ser asociada con un nuevo QRhiRenderPassDescriptor, porque algo es diferente sobre el objetivo de renderizado ahora, comparado con fotogramas anteriores:

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 time

Ver también 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.