En esta página

QOpenGLTextureBlitter Class

La clase QOpenGLTextureBlitter proporciona una forma conveniente de dibujar quads texturizados a través de OpenGL. Más...

Cabecera: #include <QOpenGLTextureBlitter>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake: QT += opengl

Tipos Públicos

enum Origin { OriginBottomLeft, OriginTopLeft }

Funciones Públicas

QOpenGLTextureBlitter()
~QOpenGLTextureBlitter()
void bind(GLenum target = GL_TEXTURE_2D)
void blit(GLuint texture, const QMatrix4x4 &targetTransform, QOpenGLTextureBlitter::Origin sourceOrigin)
void blit(GLuint texture, const QMatrix4x4 &targetTransform, const QMatrix3x3 &sourceTransform)
bool create()
void destroy()
bool isCreated() const
void release()
void setOpacity(float opacity)
void setRedBlueSwizzle(bool swizzle)
bool supportsExternalOESTarget() const
bool supportsRectangleTarget() const

Miembros Públicos Estáticos

QMatrix3x3 sourceTransform(const QRectF &subTexture, const QSize &textureSize, QOpenGLTextureBlitter::Origin origin)
QMatrix4x4 targetTransform(const QRectF &target, const QRect &viewport)

Descripción Detallada

Dibujar quads de texturas, con el fin de obtener el contenido de una textura en la pantalla, es una operación común cuando se desarrollan interfaces de usuario 2D. QOpenGLTextureBlitter proporciona una clase de conveniencia para evitar la repetición de datos de vértices, fuentes de shaders, gestión de buffers y programas y cálculos de matrices.

Por ejemplo, una subclase de QOpenGLWidget puede hacer lo siguiente para dibujar el contenido renderizado en un framebuffer en la posición de píxel (x, y):

void OpenGLWidget::initializeGL()
{
    m_blitter.create();
    m_fbo = new QOpenGLFramebufferObject(size);
}

void OpenGLWidget::paintGL()
{
    m_fbo->bind();
    // update offscreen content
    m_fbo->release();

    m_blitter.bind();
    const QRect targetRect(QPoint(x, y), m_fbo->size());
    const QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(targetRect, QRect(QPoint(0, 0), m_fbo->size()));
    m_blitter.blit(m_fbo->texture(), target, QOpenGLTextureBlitter::OriginBottomLeft);
    m_blitter.release();
}

El blitter implementa shaders GLSL tanto para GLSL 1.00 (adecuado para OpenGL (ES) 2.x y perfiles de compatibilidad de versiones más recientes de OpenGL) como para la versión 150 (adecuada para contextos de perfil de núcleo con OpenGL 3.2 y versiones más recientes).

Documentación de tipos de miembros

enum QOpenGLTextureBlitter::Origin

ConstanteValorDescripción
QOpenGLTextureBlitter::OriginBottomLeft0Indica que los datos en la textura siguen la convención OpenGL de sistemas de coordenadas, lo que significa que Y va de abajo a arriba.
QOpenGLTextureBlitter::OriginTopLeft1Indica que los datos en la textura tienen Y de arriba a abajo, lo que es típico con datos de imagen normales, no invertidos.

Véase también blit().

Documentación de las funciones miembro

QOpenGLTextureBlitter::QOpenGLTextureBlitter()

Construye una nueva instancia de QOpenGLTextureBlitter.

Nota: no se inicializan recursos gráficos en el constructor. Esto hace que sea seguro colocar miembros simples de QOpenGLTextureBlitter en las clases porque la inicialización real que depende del contexto OpenGL sólo ocurre en create().

[noexcept] QOpenGLTextureBlitter::~QOpenGLTextureBlitter()

Destruye la instancia.

Nota: Cuando el contexto OpenGL - o un contexto que comparta recursos con él - que era actual cuando se llamó a create() no lo es, los recursos gráficos no serán liberados. Por lo tanto, se recomienda llamar a destroy() manualmente en lugar de confiar en el destructor para realizar la limpieza de recursos OpenGL.

void QOpenGLTextureBlitter::bind(GLenum target = GL_TEXTURE_2D)

Vincula los recursos gráficos utilizados por el blitter. Debe invocarse antes de llamar a blit(). Debe evitarse código que modifique el estado OpenGL entre la llamada a bind() y blit() porque de lo contrario pueden surgir conflictos.

target es la textura objetivo para la textura fuente y debe ser GL_TEXTURE_2D, GL_TEXTURE_RECTANGLE, o GL_OES_EGL_image_external.

Ver también release() y blit().

void QOpenGLTextureBlitter::blit(GLuint texture, const QMatrix4x4 &targetTransform, QOpenGLTextureBlitter::Origin sourceOrigin)

Realiza el blit con la textura de origen texture.

targetTransform especifica la transformación aplicada. Normalmente es generada por la función de ayuda targetTransform().

sourceOrigin especifica si es necesario voltear los datos de la imagen. Cuando texture corresponde a una textura adjunta a un FBO pasa OriginBottomLeft. Por otro lado, cuando texture se basa en datos de imagen sin voltear, pasa OriginTopLeft. Esto es más eficiente que utilizar QImage::flipped().

Véase también targetTransform(), Origin, y bind().

void QOpenGLTextureBlitter::blit(GLuint texture, const QMatrix4x4 &targetTransform, const QMatrix3x3 &sourceTransform)

Realiza el blit con la textura de origen texture.

targetTransform especifica la transformación aplicada. Normalmente es generada por la función de ayuda targetTransform().

sourceTransform especifica la transformación aplicada a la fuente. Permite utilizar sólo un subrecto de la textura de origen. Suele generarse mediante la función de ayuda sourceTransform().

Véase también sourceTransform(), targetTransform(), Origin, y bind().

bool QOpenGLTextureBlitter::create()

Inicializa los recursos gráficos utilizados por el blitter.

Devuelve true en caso de éxito, false en caso de fallo. Los fallos pueden ocurrir cuando no hay un contexto OpenGL actual en el thread actual, o cuando la compilación del shader falla por alguna razón.

Véase también isCreated() y destroy().

void QOpenGLTextureBlitter::destroy()

Libera todos los recursos gráficos del blitter. Asume que el contexto OpenGL, u otro contexto que comparta recursos con él, que estaba activo en el subproceso cuando se invocó create() está activo.

La función no tiene efecto cuando el blitter no está en estado creado.

Véase también create().

bool QOpenGLTextureBlitter::isCreated() const

Devuelve true si se llamó a create() y tuvo éxito. false en caso contrario.

Véase también create() y destroy().

void QOpenGLTextureBlitter::release()

Desvincula los recursos gráficos utilizados por el blitter.

Véase también bind().

void QOpenGLTextureBlitter::setOpacity(float opacity)

Cambia la opacidad a opacity. La opacidad por defecto es 1.0.

Nota: el blitter no altera el estado de la mezcla. Es responsabilidad de quien llama a blit() asegurarse de que la configuración de mezcla correcta está activa.

void QOpenGLTextureBlitter::setRedBlueSwizzle(bool swizzle)

Establece si el swizzling está habilitado para los canales de color rojo y azul en swizzle. Una conversión de BGRA a RGBA (que ocurre en el shader en la GPU, en lugar de una lenta transformación del lado de la CPU) puede ser útil cuando la textura fuente contiene datos de un QImage con un formato como QImage::Format_ARGB32 que mapea a BGRA en sistemas little endian.

Por defecto el swizzle rojo-azul está desactivado ya que esto es lo que necesita una textura adjunta a un objeto framebuffer o una textura basada en un formato QImage ordenado por bytes (como QImage::Format_RGBA8888).

[static] QMatrix3x3 QOpenGLTextureBlitter::sourceTransform(const QRectF &subTexture, const QSize &textureSize, QOpenGLTextureBlitter::Origin origin)

Calcula una matriz de 3x3 adecuada como entrada para blit(). Esto se utiliza cuando sólo una parte de la textura se va a utilizar en el blit.

subTexture es el rectángulo fuente deseado en píxeles, textureSize es la anchura y altura completa de los datos de la textura. origin especifica la orientación de los datos de la imagen cuando se trata del eje Y.

Véase también blit() y Origin.

bool QOpenGLTextureBlitter::supportsExternalOESTarget() const

Devuelve true cuando bind() acepta GL_TEXTURE_EXTERNAL_OES como argumento de destino.

Véase también bind() y blit().

bool QOpenGLTextureBlitter::supportsRectangleTarget() const

Devuelve true cuando bind() acepta GL_TEXTURE_RECTANGLE como argumento de destino.

Véase también bind() y blit().

[static] QMatrix4x4 QOpenGLTextureBlitter::targetTransform(const QRectF &target, const QRect &viewport)

Calcula una transformación de destino adecuada para blit().

target es el rectángulo de destino en píxeles. viewport describe las dimensiones de origen y, en la mayoría de los casos, se establecerá en (0, 0, anchura de la imagen, altura de la imagen).

Para una salida sin escalado, el tamaño de target y viewport debe coincidir.

Véase también blit().

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