En esta página

QRhiTexture Class

Recurso de textura. 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

Tipos Públicos

struct NativeTexture
(since 6.8) struct ViewFormat
enum Flag { RenderTarget, CubeMap, MipMapped, sRGB, UsedAsTransferSource, …, UsedAsShadingRateMap }
flags Flags
enum Format { UnknownFormat, RGBA8, BGRA8, R8, RG8, …, RGBA32SI }

Funciones Públicas

int arrayRangeLength() const
int arrayRangeStart() const
int arraySize() const
virtual bool create() = 0
virtual bool createFrom(QRhiTexture::NativeTexture src)
int depth() const
QRhiTexture::Flags flags() const
QRhiTexture::Format format() const
virtual QRhiTexture::NativeTexture nativeTexture()
QSize pixelSize() const
(since 6.8) QRhiTexture::ViewFormat readViewFormat() const
int sampleCount() const
void setArrayRange(int startIndex, int count)
void setArraySize(int arraySize)
void setDepth(int depth)
void setFlags(QRhiTexture::Flags f)
void setFormat(QRhiTexture::Format fmt)
virtual void setNativeLayout(int layout)
void setPixelSize(const QSize &sz)
(since 6.8) void setReadViewFormat(const QRhiTexture::ViewFormat &fmt)
void setSampleCount(int s)
(since 6.8) void setWriteViewFormat(const QRhiTexture::ViewFormat &fmt)
(since 6.8) QRhiTexture::ViewFormat writeViewFormat() const

Funciones Públicas Reimplementadas

virtual QRhiResource::Type resourceType() const override

Descripción Detallada

Un QRhiTexture encapsula un objeto de textura nativo, como VkImage o MTLTexture.

Una instancia de QRhiTexture se crea siempre llamando a the QRhi's newTexture() function. Esto no crea recursos gráficos nativos. Para ello, llame a create() después de establecer las opciones apropiadas, como el formato y el tamaño, aunque en la mayoría de los casos estos ya están establecidos en base a los argumentos pasados a newTexture().

Configurar flags correctamente es esencial, de lo contrario pueden producirse varios errores dependiendo del backend subyacente QRhi y de la API gráfica. Por ejemplo, cuando una textura va a ser renderizada desde un pase de render a través de QRhiTextureRenderTarget, la textura debe ser creada con la bandera RenderTarget establecida. Del mismo modo, cuando la textura va a ser read back, la bandera UsedAsTransferSource debe establecerse por adelantado. Las texturas mapeadas deben tener activada la bandera MipMapped. Y así sucesivamente. No es posible cambiar las banderas una vez que create() ha tenido éxito. Para liberar la existente y crear un nuevo objeto de textura nativa con los ajustes modificados, llame a los setters y llame a create() de nuevo. Esto puede ser una operación potencialmente costosa.

Ejemplo de uso

Para crear una textura 2D con un tamaño de 512x512 píxeles y establecer su contenido a todo verde:

QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512));
if (!texture->create()) { error(); }
QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
QImage image(512, 512, QImage::Format_RGBA8888);
image.fill(Qt::green);
batch->uploadTexture(texture, image);
// ...
commandBuffer->resourceUpdate(batch); // or, alternatively, pass 'batch' to a beginPass() call

Patrones comunes

Una llamada a create() destruye cualquier recurso nativo existente si antes se llamó con éxito a create(). Si esos recursos nativos todavía están en uso por un fotograma en vuelo (es decir, existe la posibilidad de que todavía sean leídos por la GPU), la destrucción de esos recursos se aplaza automáticamente. Así, un patrón muy común y conveniente para cambiar con seguridad el tamaño de una textura ya existente es el siguiente. En la práctica, esto elimina y crea un recurso de textura nativo completamente nuevo por debajo, por lo que no es necesariamente una operación barata, pero es más conveniente y aún más rápida que las alternativas, porque al no destruir el objeto texture en sí, todas las referencias a él siguen siendo válidas en otras estructuras de datos (por ejemplo, en cualquier QShaderResourceBinding desde el que se haga referencia al QRhiTexture).

// determine newSize, e.g. based on the swapchain's output size or other factors
if (texture->pixelSize() != newSize) {
    texture->setPixelSize(newSize);
    if (!texture->create()) { error(); }
}
// continue using texture, fill it with new data

Nota: Esta es una API RHI con garantías de compatibilidad limitadas, ver QRhi para más detalles.

Ver también QRhiResourceUpdateBatch, QRhi, y QRhiTextureRenderTarget.

Documentación de tipos de miembros

enum QRhiTexture::Flag
flags QRhiTexture::Flags

Valores de bandera para especificar como va a ser usada la textura. Si no se respetan las banderas establecidas antes de create() y se intenta utilizar la textura de formas que no se declararon por adelantado, se puede producir un comportamiento no especificado o una disminución del rendimiento dependiendo del backend y de la API gráfica subyacente.

ConstanteValorDescripción
QRhiTexture::RenderTarget1 << 0La textura que se va a utilizar en combinación con QRhiTextureRenderTarget.
QRhiTexture::CubeMap1 << 2La textura es un cubemap. Tales texturas tienen 6 capas, una por cada cara en el orden de +X, -X, +Y, -Y, +Z, -Z. Las texturas cubemap no pueden ser multimuestra.
QRhiTexture::MipMapped1 << 3La textura tiene mipmaps. El recuento de mip apropiado se calcula automáticamente y también se puede recuperar mediante QRhi::mipLevelsForSize(). Las imágenes para los niveles mip deben proporcionarse en la textura cargada o generada a través de QRhiResourceUpdateBatch::generateMips(). Las texturas multimuestra no pueden tener mipmaps.
QRhiTexture::sRGB1 << 4Utiliza un formato sRGB.
QRhiTexture::UsedAsTransferSource1 << 5La textura se utiliza como la fuente de una copia de textura o readback, lo que significa que la textura se da como la fuente en QRhiResourceUpdateBatch::copyTexture() o QRhiResourceUpdateBatch::readBackTexture().
QRhiTexture::UsedWithGenerateMips1 << 6La textura se va a utilizar con QRhiResourceUpdateBatch::generateMips().
QRhiTexture::UsedWithLoadStore1 << 7La textura se va a utilizar con operaciones de carga/almacenamiento de imágenes, por ejemplo, en un sombreador de cálculo.
QRhiTexture::UsedAsCompressedAtlas1 << 8La textura tiene un formato comprimido y las dimensiones de las cargas de sub-recursos pueden no coincidir con el tamaño de la textura.
QRhiTexture::ExternalOES1 << 9La textura debe utilizar el objetivo GL_TEXTURE_EXTERNAL_OES con OpenGL. Esta bandera se ignora con otras APIs gráficas.
QRhiTexture::ThreeDimensional1 << 10La textura es una textura 3D. Tales texturas deben crearse con la sobrecarga QRhi::newTexture() tomando una profundidad además de la anchura y la altura. Una textura 3D puede tener mipmaps pero no puede ser multimuestra. Cuando se renderiza o se cargan datos en una textura 3D, la dirección layer especificada en el adjunto de color del destino de renderizado o en la descripción de carga se refiere a un único corte en el rango [0..depth-1]. Es posible que la API gráfica subyacente no admita texturas 3D en tiempo de ejecución. La compatibilidad se indica mediante la función QRhi::ThreeDimensionalTextures.
QRhiTexture::TextureRectangleGL1 << 11La textura debe utilizar el objetivo GL_TEXTURE_RECTANGLE con OpenGL. Esta bandera se ignora con otras API de gráficos. Al igual que ExternalOES, esta bandera es útil cuando se trabaja con APIs de plataforma donde los objetos de textura OpenGL nativos recibidos de la plataforma están envueltos en un QRhiTexture, y la plataforma sólo puede proporcionar texturas para un objetivo de textura no 2D.
QRhiTexture::TextureArray1 << 12La textura es una matriz de texturas, es decir, un único objeto de textura que es una matriz homogénea de texturas 2D. Las matrices de texturas se crean con QRhi::newTextureArray(). Es posible que la API gráfica subyacente no admita objetos de matriz de texturas en tiempo de ejecución. La compatibilidad se indica mediante la función QRhi::TextureArrays. Cuando se renderiza o se cargan datos en una matriz de texturas, la dirección layer especificada en el adjunto de color del destino de renderizado o en la descripción de carga selecciona un único elemento de la matriz.
QRhiTexture::OneDimensional1 << 13La textura es una textura 1D. Tales texturas pueden ser creadas pasando una altura y profundidad 0 a QRhi::newTexture(). Ten en cuenta que puede haber limitaciones en las texturas unidimensionales dependiendo de la API gráfica subyacente. Por ejemplo, puede que no sea posible renderizarlas o utilizarlas con filtros basados en mipmaps. Esto se indica mediante las banderas de características QRhi::OneDimensionalTextures y QRhi::OneDimensionalTextureMipmaps.
QRhiTexture::UsedAsShadingRateMap1 << 14

El tipo Flags es un typedef para QFlags<Flag>. Almacena una combinación OR de valores Flag.

enum QRhiTexture::Format

Especifica el formato de la textura. Véase también QRhi::isTextureFormatSupported() y nótese que flags() puede modificar el formato cuando QRhiTexture::sRGB está establecido.

ConstanteValorDescripción
QRhiTexture::UnknownFormat0No es un formato válido. No puede pasarse a setFormat().
QRhiTexture::RGBA81Cuatro componentes, sin signo normalizado de 8 bits por componente. Siempre compatible. (32 bits en total)
QRhiTexture::BGRA82Cuatro componentes, sin signo normalizado de 8 bits por componente. (32 bits en total)
QRhiTexture::R83Un componente, sin signo normalizado de 8 bits. (8 bits en total)
QRhiTexture::RG84Dos componentes, sin signo normalizado de 8 bits. (16 bits en total)
QRhiTexture::R165Un componente, sin signo normalizado de 16 bits. (16 bits en total)
QRhiTexture::RG166Dos componentes, sin signo normalizado de 16 bits. (32 bits en total)
QRhiTexture::RED_OR_ALPHA87Igual que R8, o es un formato similar con el componente swizzled a alfa, dependiendo de RedOrAlpha8IsRed. (8 bits en total)
QRhiTexture::RGBA16F8Cuatro componentes, float de 16 bits. (64 bits en total)
QRhiTexture::RGBA32F9Cuatro componentes, float de 32 bits. (128 bits en total)
QRhiTexture::R16F10Un componente, float de 16 bits. (16 bits en total)
QRhiTexture::R32F11Un componente, float de 32 bits. (32 bits en total)
QRhiTexture::RGB10A212Cuatro componentes, R, G y B de 10 bits normalizados sin signo, alfa de 2 bits. Se trata de un formato empaquetado, por lo que se aplica el formato nativo. Tenga en cuenta que no existe BGR10A2. Esto se debe a que RGB10A2 se asigna a DXGI_FORMAT_R10G10B10A2_UNORM con D3D, MTLPixelFormatRGB10A2Unorm con Metal, VK_FORMAT_A2B10G10R10_UNORM_PACK32 con Vulkan, y GL_RGB10_A2/GL_RGB/GL_UNSIGNED_INT_2_10_10_10_REV en OpenGL (ES). Esta es la única opción RGB30 soportada universalmente. Los formatos QImage correspondientes son QImage::Format_BGR30 y QImage::Format_A2BGR30_Premultiplied. (32 bits en total)
QRhiTexture::D1621Profundidad de 16 bits (entero normalizado sin signo)
QRhiTexture::D2422Profundidad de 24 bits (entero normalizado sin signo)
QRhiTexture::D24S823Profundidad de 24 bits (entero normalizado sin signo), plantilla de 8 bits
QRhiTexture::D32F24Profundidad de 32 bits (flotante de 32 bits)
QRhiTexture::D32FS8 (since Qt 6.9)25Profundidad de 32 bits (flotante de 32 bits), 8 bits de plantilla, 24 bits no utilizados (64 bits en total)
QRhiTexture::BC126
QRhiTexture::BC227
QRhiTexture::BC328
QRhiTexture::BC429
QRhiTexture::BC530
QRhiTexture::BC6H31
QRhiTexture::BC732
QRhiTexture::ETC2_RGB833
QRhiTexture::ETC2_RGB8A134
QRhiTexture::ETC2_RGBA835
QRhiTexture::ASTC_4x436
QRhiTexture::ASTC_5x437
QRhiTexture::ASTC_5x538
QRhiTexture::ASTC_6x539
QRhiTexture::ASTC_6x640
QRhiTexture::ASTC_8x541
QRhiTexture::ASTC_8x642
QRhiTexture::ASTC_8x843
QRhiTexture::ASTC_10x544
QRhiTexture::ASTC_10x645
QRhiTexture::ASTC_10x846
QRhiTexture::ASTC_10x1047
QRhiTexture::ASTC_12x1048
QRhiTexture::ASTC_12x1249
QRhiTexture::R8UI (since Qt 6.9)17Un componente, 8 bits sin signo (8 bits en total)
QRhiTexture::R32UI (since Qt 6.9)18Un componente, sin signo 32 bits. (32 bits en total)
QRhiTexture::RG32UI (since Qt 6.9)19Dos componentes, sin signo de 32 bits. (64 bits en total)
QRhiTexture::RGBA32UI (since Qt 6.9)20Cuatro componentes, sin signo de 32 bits. (128 bits en total)
QRhiTexture::R8SI (since Qt 6.10)13Un componente, con signo de 8 bits. (8 bits en total)
QRhiTexture::R32SI (since Qt 6.10)14Un componente, con signo de 32 bits. (32 bits en total)
QRhiTexture::RG32SI (since Qt 6.10)15Dos componentes, con signo de 32 bits. (64 bits en total)
QRhiTexture::RGBA32SI (since Qt 6.10)16Cuatro componentes, con signo de 32 bits. (128 bits en total)

Documentación de las funciones miembro

int QRhiTexture::arrayRangeLength() const

Devuelve el tamaño del rango de array expuesto cuando se llamó a setArrayRange().

Véase también setArrayRange().

int QRhiTexture::arrayRangeStart() const

Devuelve la primera capa del array cuando se llamó a setArrayRange().

Véase también setArrayRange().

int QRhiTexture::arraySize() const

Devuelve el tamaño del array de texturas.

Véase también setArraySize().

[pure virtual] bool QRhiTexture::create()

Crea los recursos gráficos nativos correspondientes. Si ya hay recursos presentes debido a un create() anterior sin destroy() correspondiente, entonces destroy() se llama implícitamente primero.

Devuelve true en caso de éxito, false en caso de fallo de la operación gráfica. Independientemente del valor de retorno, la llamada a destroy() es siempre segura.

[virtual] bool QRhiTexture::createFrom(QRhiTexture::NativeTexture src)

Similar a create(), excepto que no se crean nuevas texturas nativas. En su lugar, se utilizan los recursos de texturas nativas especificados por src.

Esto permite importar un objeto de textura nativa existente (que debe pertenecer al mismo dispositivo o contexto de compartición, dependiendo de la API gráfica) desde un motor gráfico externo.

Devuelve true si el objeto de textura nativa existente especificado ha sido envuelto con éxito como un QRhiTexture no propietario.

Nota: format(), pixelSize(), sampleCount(), y flags() aún deben configurarse correctamente. Pasar tamaños incorrectos y otros valores a QRhi::newTexture() y luego seguirlo con un createFrom() esperando que el objeto de textura nativo por sí solo sea suficiente para deducir tales valores es incorrecto y conducirá a problemas.

Nota: QRhiTexture no se apropia del objeto textura. destroy() no libera el objeto ni la memoria asociada.

Lo contrario de esta operación, exponer un objeto de textura nativo creado en QRhiTexture a un motor externo, es posible a través de nativeTexture().

Nota: Cuando se importa una textura 3D, o un objeto de matriz de texturas, o, con OpenGL ES, una textura externa, es especialmente importante establecer las banderas correspondientes (ThreeDimensional, TextureArray, ExternalOES) a través de setFlags() antes de llamar a esta función.

int QRhiTexture::depth() const

Devuelve la profundidad de las texturas 3D.

Véase también setDepth().

QRhiTexture::Flags QRhiTexture::flags() const

Devuelve las banderas de textura.

Véase también setFlags().

QRhiTexture::Format QRhiTexture::format() const

Devuelve el formato de la textura.

Véase también setFormat().

[virtual] QRhiTexture::NativeTexture QRhiTexture::nativeTexture()

Devuelve los recursos nativos subyacentes para esta textura. El valor devuelto estará vacío si la exposición de los recursos nativos subyacentes no está soportada por el backend.

Véase también createFrom().

QSize QRhiTexture::pixelSize() const

Devuelve el tamaño en píxeles.

Véase también setPixelSize().

[since 6.8] QRhiTexture::ViewFormat QRhiTexture::readViewFormat() const

Devuelve el formato de vista utilizado al muestrear la textura. Cuando no se llama, se asume que el formato de vista es el mismo que format().

Esta función se introdujo en Qt 6.8.

Véase también setReadViewFormat().

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

Reimplementa: QRhiResource::resourceType() const.

Devuelve el tipo de recurso.

int QRhiTexture::sampleCount() const

Devuelve el número de muestras. 1 significa que no hay antialiasing multimuestra.

Véase también setSampleCount().

void QRhiTexture::setArrayRange(int startIndex, int count)

Normalmente todas las capas del array están expuestas y depende del shader seleccionar la capa a través de la tercera coordenada pasada a la función GLSL texture() cuando se muestrea el sampler2DArray. Cuando QRhi::TextureArrayRange es reportado como soportado, llamar a setArrayRange() antes de create() o createFrom() solicita seleccionar sólo el rango especificado, count elementos comenzando desde startIndex. La lógica del shader puede entonces ser escrita con esto en mente.

Véase también QRhi::TextureArrayRange.

void QRhiTexture::setArraySize(int arraySize)

Establece la textura arraySize.

Véase también arraySize().

void QRhiTexture::setDepth(int depth)

Establece el depth para una textura 3D.

Véase también depth().

void QRhiTexture::setFlags(QRhiTexture::Flags f)

Establece las banderas de textura en f.

Véase también flags().

void QRhiTexture::setFormat(QRhiTexture::Format fmt)

Establece el formato de textura solicitado en fmt.

Nota: El valor establecido sólo se tiene en cuenta en la siguiente llamada a create(), es decir, cuando se (re)crean los recursos gráficos subyacentes. De lo contrario, establecer un nuevo valor es inútil y debe evitarse, ya que puede dar lugar a un estado incoherente.

Véase también format().

[virtual] void QRhiTexture::setNativeLayout(int layout)

Con algunas APIs de gráficos, como Vulkan, la integración de código de renderizado personalizado que utiliza la API de gráficos directamente necesita un cuidado especial cuando se trata de diseños de imagen. Esta función permite comunicar el layout esperado en el que se encuentra la imagen que respalda el QRhiTexture después de los comandos de renderizado nativo.

Por ejemplo, considere renderizar en una QRhiTexture's VkImage directamente con Vulkan en un bloque de código encerrado por QRhiCommandBuffer::beginExternal() y QRhiCommandBuffer::endExternal(), seguido por el uso de la imagen para el muestreo de texturas en un QRhi-based render pass. Para evitar transiciones de disposición de imagen potencialmente incorrectas, esta función puede utilizarse para indicar cuál será la disposición de la imagen una vez completados los comandos grabados en dicho bloque de código.

Llamar a esta función sólo tiene sentido después de QRhiCommandBuffer::endExternal() y antes de un posterior QRhiCommandBuffer::beginPass().

Esta función no tiene efecto con backends QRhi donde la API gráfica subyacente no expone un concepto de disposición de imágenes.

Nota: Con Vulkan layout es un VkImageLayout. Con Direct 3D 12 layout es un valor compuesto por los bits de D3D12_RESOURCE_STATES.

void QRhiTexture::setPixelSize(const QSize &sz)

Establece el tamaño de la textura, especificado en píxeles, en sz.

Nota: El valor establecido sólo se tiene en cuenta en la siguiente llamada a create(), es decir, cuando se (re)crean los recursos gráficos subyacentes. De lo contrario, establecer un nuevo valor es inútil y debe evitarse, ya que puede dar lugar a un estado incoherente. Lo mismo se aplica a todos los demás setters.

Véase también pixelSize().

[since 6.8] void QRhiTexture::setReadViewFormat(const QRhiTexture::ViewFormat &fmt)

Establece el formato de vista del recurso shader (o el formato de la vista utilizada para el muestreo de la textura) a fmt. Por defecto se utiliza el mismo formato (y sRGB-ness) que la propia textura, y en la mayoría de los casos no es necesario llamar a esta función.

Esta configuración sólo se tiene en cuenta cuando se informa de que la función QRhi::TextureViewFormat es compatible.

Nota: Esta funcionalidad se proporciona para permitir el "casting" entre no-RGB y sRGB con el fin de obtener el shader lee realizar, o no realizar, las conversiones implícitas sRGB. Otros tipos de conversión pueden o no ser funcionales.

Esta función se introdujo en Qt 6.8.

Véase también readViewFormat().

void QRhiTexture::setSampleCount(int s)

Establece el recuento de muestras en s.

Véase también sampleCount().

[since 6.8] void QRhiTexture::setWriteViewFormat(const QRhiTexture::ViewFormat &fmt)

Establece el formato de vista de destino de renderizado en fmt. Por defecto se utiliza el mismo formato (y sRGB-ness) que la propia textura, y en la mayoría de los casos no es necesario llamar a esta función.

Un caso de uso común para proporcionar un formato de vista de escritura es trabajar con texturas proporcionadas externamente que, fuera de nuestro control, utilizan un formato sRGB con APIs 3D como Vulkan o Direct 3D, pero el motor de renderizado ya está preparado para manejar la linealización y la conversión a sRGB al final de su pipeline de sombreado. En este caso lo que se busca al renderizar en una textura de este tipo es una vista de destino de render (por ejemplo, VkImageView) que tenga el mismo formato, pero no RGB. (si por ejemplo de una implementación OpenXR se obtiene una textura VK_FORMAT_R8G8B8A8_SRGB, es probable que el renderizado en ella deba hacerse usando una vista VK_FORMAT_R8G8B8A8_UNORM, si eso es lo que requiere el canal del motor de renderizado; en este ejemplo se llamaría a esta función con un ViewFormat que tenga un formato de QRhiTexture::RGBA8 y srgb ajustado a false).

Esta configuración sólo se tiene en cuenta cuando se informa de que la función QRhi::TextureViewFormat es compatible.

Nota: Esta funcionalidad se proporciona para permitir el "casting" entre no-RGB y sRGB con el fin de obtener la escritura del shader no realizar, o realizar, las conversiones implícitas sRGB. Otros tipos de casting pueden o no ser funcionales.

Esta función se introdujo en Qt 6.8.

Véase también writeViewFormat().

[since 6.8] QRhiTexture::ViewFormat QRhiTexture::writeViewFormat() const

Devuelve el formato de vista usado cuando se escribe en la textura y cuando se usa con carga/almacenamiento de imagen. Cuando no se llama, se asume que el formato de vista es el mismo que format().

Esta función se introdujo en Qt 6.8.

Véase también setWriteViewFormat().

© 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.