QRhiShaderResourceBindings Class
Encapsula recursos para hacer visibles los recursos de búfer, textura y muestreador a los sombreadores. 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
| const QRhiShaderResourceBinding * | bindingAt(qsizetype index) const |
| qsizetype | bindingCount() const |
| const QRhiShaderResourceBinding * | cbeginBindings() const |
| const QRhiShaderResourceBinding * | cendBindings() const |
| virtual bool | create() = 0 |
| bool | isLayoutCompatible(const QRhiShaderResourceBindings *other) const |
| QVector<quint32> | serializedLayoutDescription() const |
| void | setBindings(std::initializer_list<QRhiShaderResourceBinding> list) |
| void | setBindings(InputIterator first, InputIterator last) |
Funciones Públicas Reimplementadas
| virtual QRhiResource::Type | resourceType() const override |
Descripción Detallada
Un QRhiShaderResourceBindings es una colección de objetos QRhiShaderResourceBinding, cada uno de los cuales describe un único enlace.
Tomemos un fragment shader con la siguiente interfaz:
layout(std140, binding = 0) uniform buf {
mat4 mvp;
int flip;
} ubuf;
layout(binding = 1) uniform sampler2D tex;Para hacer que los recursos sean visibles para el shader, los siguientes QRhiShaderResourceBindings podrían ser creados y luego pasados a QRhiGraphicsPipeline::setShaderResourceBindings():
QRhiShaderResourceBindings *srb = rhi->newShaderResourceBindings(); srb->setBindings({ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, ubuf), QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, texture, sampler) }); srb->create(); // ... QRhiGraphicsPipeline *ps = rhi->newGraphicsPipeline(); // ... ps->setShaderResourceBindings(srb); ps->create(); // ... cb->setGraphicsPipeline(ps); cb->setShaderResources(); // binds srb
Esto asume que ubuf es un QRhiBuffer, texture es un QRhiTexture, mientras que sampler es un QRhiSampler. El ejemplo también asume que el bloque uniforme está presente en el sombreador de vértices también por lo que el mismo buffer se hace visible a la etapa de vértices también.
Uso avanzado
Basándonos en el ejemplo anterior, supongamos que una pasada necesita utilizar exactamente el mismo pipeline y shaders con una textura diferente. Crear un QRhiGraphicsPipeline separado sólo para esto sería una exageración. Esta es la razón por la que QRhiCommandBuffer::setShaderResources() permite especificar un argumento srb. Siempre y cuando los diseños (por lo que el número de enlaces y los puntos de unión) coincidan entre dos QRhiShaderResourceBindings, ambos pueden ser utilizados con el mismo pipeline, suponiendo que el pipeline fue creado con uno de ellos en primer lugar. Ver isLayoutCompatible() para más detalles.
QRhiShaderResourceBindings *srb2 = rhi->newShaderResourceBindings(); // ... cb->setGraphicsPipeline(ps); cb->setShaderResources(srb2); // binds srb2
Nota: Esta es una API RHI con garantías de compatibilidad limitadas, ver QRhi para más detalles.
Documentación de las funciones miembro
const QRhiShaderResourceBinding *QRhiShaderResourceBindings::bindingAt(qsizetype index) const
Devuelve el enlace en la dirección index especificada.
qsizetype QRhiShaderResourceBindings::bindingCount() const
Devuelve el número de enlaces.
const QRhiShaderResourceBinding *QRhiShaderResourceBindings::cbeginBindings() const
Devuelve un iterador constante que apunta al primer elemento de la lista de vinculación.
const QRhiShaderResourceBinding *QRhiShaderResourceBindings::cendBindings() const
Devuelve un iterador constante que apunta justo después del último elemento de la lista de vinculación.
[pure virtual] bool QRhiShaderResourceBindings::create()
Crea el conjunto de vinculación de recursos correspondiente. Dependiendo de la API gráfica subyacente, esto puede implicar la creación de recursos gráficos nativos y, por lo tanto, no debe asumirse que se trata de una operación barata.
Si se ha llamado antes a create() sin la correspondiente destroy(), entonces se llama implícitamente primero a destroy().
Devuelve true cuando tiene éxito, false cuando falla. Independientemente del valor de retorno, llamar a destroy() es siempre seguro.
bool QRhiShaderResourceBindings::isLayoutCompatible(const QRhiShaderResourceBindings *other) const
Devuelve true si el diseño es compatible con other. El diseño no incluye el recurso real (como, buffer o textura) y los parámetros relacionados (como, offset o tamaño). Sin embargo, sí incluye el punto de vinculación, la etapa de canalización y el tipo de recurso. El número y el orden de los enlaces también deben coincidir para que sean compatibles.
Cuando hay un QRhiGraphicsPipeline creado con este QRhiShaderResourceBindings, y la función devuelve true, other puede entonces pasarse con seguridad a QRhiCommandBuffer::setShaderResources(), y así usarse con la tubería en lugar de este QRhiShaderResourceBindings.
Nota: Esta función sólo debe ser llamada después de un éxito create(), porque se basa en los datos generados durante la cocción de las estructuras de datos subyacentes. De este modo, la función puede implementar un enfoque de comparación que es más eficiente que iterar a través de dos listas de vinculación y llamar a QRhiShaderResourceBinding::isLayoutCompatible() en cada par. Esto es especialmente importante cuando se llama a esta función con mucha frecuencia.
Véase también serializedLayoutDescription().
[override virtual] QRhiResource::Type QRhiShaderResourceBindings::resourceType() const
Reimplementa: QRhiResource::resourceType() const.
Devuelve el tipo de recurso.
QVector<quint32> QRhiShaderResourceBindings::serializedLayoutDescription() const
Devuelve un vector de enteros que contiene un blob opaco que describe la disposición de la lista de vinculación, es decir, los datos relevantes para layout compatibility tests.
Dados dos objetos srb1 y srb2, si los datos devueltos por esta función son idénticos, entonces también lo serán srb1->isLayoutCompatible(srb2), y viceversa.
Nota: Los datos devueltos están pensados para ser almacenados en memoria y comparados durante la vida del objeto QRhi al que pertenece. No está pensado para almacenar en disco, reutilizar entre procesos o utilizar con múltiples instancias de QRhi con backends potencialmente diferentes.
Véase también isLayoutCompatible().
void QRhiShaderResourceBindings::setBindings(std::initializer_list<QRhiShaderResourceBinding> list)
Establece la dirección list de los enlaces.
template <typename InputIterator> void QRhiShaderResourceBindings::setBindings(InputIterator first, InputIterator last)
Establece la lista de vinculaciones de los iteradores first y last.
© 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.