Sur cette page

QOpenGLTextureBlitter Class

La classe QOpenGLTextureBlitter offre un moyen pratique de dessiner des quadrilatères texturés via OpenGL. En savoir plus...

En-tête : #include <QOpenGLTextureBlitter>
CMake : find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake : QT += opengl

Types publics

enum Origin { OriginBottomLeft, OriginTopLeft }

Fonctions publiques

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

Membres publics statiques

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

Description détaillée

Le dessin de quadrilatères texturés, qui permet d’afficher le contenu d’une texture à l’écran, est une opération courante lors du développement d’interfaces utilisateur 2D. QOpenGLTextureBlitter fournit une classe pratique permettant d’éviter de répéter les données de sommets, les sources de shaders, la gestion des tampons et des programmes, ainsi que les calculs matriciels.

Par exemple, une sous-classe de ` QOpenGLWidget ` peut procéder comme suit pour afficher le contenu rendu dans un tampon de trame à la position de pixel (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();
}

Le blitter implémente des shaders GLSL à la fois pour la version 1.00 (adaptée à OpenGL (ES) 2.x et aux profils de compatibilité des versions plus récentes d’OpenGL) et pour la version 150 (adaptée aux contextes de profil de base avec OpenGL 3.2 et versions ultérieures).

Documentation sur les types de membres

enum QOpenGLTextureBlitter::Origin

ConstanteValeurDescription
QOpenGLTextureBlitter::OriginBottomLeft0Indique que les données de la texture respectent la convention OpenGL relative aux systèmes de coordonnées, ce qui signifie que l'axe Y s'étend de bas en haut.
QOpenGLTextureBlitter::OriginTopLeft1Indique que, dans la texture, l'axe Y s'étend de haut en bas, ce qui est courant pour les données d'image standard non inversées.

Voir également blit().

Documentation des fonctions membres

QOpenGLTextureBlitter::QOpenGLTextureBlitter()

Crée une nouvelle instance de QOpenGLTextureBlitter.

Remarque : aucune ressource graphique n'est initialisée dans le constructeur. Il est donc possible d'intégrer en toute sécurité des membres QOpenGLTextureBlitter simples dans des classes, car l'initialisation proprement dite, qui dépend du contexte OpenGL, n'a lieu que dans la méthode ` create()`.

[noexcept] QOpenGLTextureBlitter::~QOpenGLTextureBlitter()

Détruit l'instance.

Remarque : lorsque le contexte OpenGL — ou un contexte partageant des ressources avec celui-ci — qui était actif lors de l’appel de ` create()` n’est plus actif, les ressources graphiques ne sont pas libérées. Il est donc recommandé d’appeler manuellement ` destroy()` plutôt que de compter sur le destructeur pour effectuer le nettoyage des ressources OpenGL.

void QOpenGLTextureBlitter::bind(GLenum target = GL_TEXTURE_2D)

Lie les ressources graphiques utilisées par le blitter. Cette fonction doit être appelée avant d’appeler ` blit()`. Il convient d’éviter toute modification de l’état OpenGL entre l’appel à `bind()` et celui à ` blit()`, car cela pourrait entraîner des conflits.

target est la cible de texture pour la texture source et doit être soit GL_TEXTURE_2D, soit GL_TEXTURE_RECTANGLE, soit GL_OES_EGL_image_external.

Voir également release() et blit().

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

Effectue le blit à l'aide de la texture source texture.

targetTransform Spécifie la transformation appliquée. Celle-ci est généralement générée par la fonction d'aide targetTransform().

sourceOrigin Spécifie si les données d’image doivent être inversées. Lorsque texture correspond à une texture associée à un FBO, passez OriginBottomLeft. En revanche, lorsque texture repose sur des données d’image non inversées, passez OriginTopLeft. Cette méthode est plus efficace que l’utilisation de QImage::flipped().

Voir également targetTransform(), Origin et bind().

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

Effectue le blit avec la texture source texture.

targetTransform Spécifie la transformation appliquée. Celle-ci est généralement générée par la fonction d'aide targetTransform().

sourceTransform Spécifie la transformation appliquée à la source. Cela permet d’utiliser uniquement un sous-rectangle de la texture source. Elle est généralement générée par la fonction d’aide ` sourceTransform()`.

Voir également sourceTransform(), targetTransform(), Origin et bind().

bool QOpenGLTextureBlitter::create()

Initialise les ressources graphiques utilisées par le blitter.

Renvoie « true » en cas de succès, « false » en cas d'échec. Des échecs peuvent se produire lorsqu'il n'y a pas de contexte OpenGL actif sur le thread actuel, ou lorsque la compilation du shader échoue pour une raison quelconque.

Voir également isCreated() et destroy().

void QOpenGLTextureBlitter::destroy()

Libère toutes les ressources graphiques détenues par le blitter. Suppose que le contexte OpenGL, ou tout autre contexte partageant des ressources avec celui-ci, qui était actif sur le thread lors de l'appel de la fonction ` create()` est toujours actif.

Cette fonction n'a aucun effet lorsque le blitter n'est pas à l'état « created ».

Voir également create().

bool QOpenGLTextureBlitter::isCreated() const

Renvoie ` true ` si la fonction ` create()` a été appelée et a abouti. ` false ` dans le cas contraire.

Voir également create() et destroy().

void QOpenGLTextureBlitter::release()

Libère les ressources graphiques utilisées par le blitter.

Voir aussi bind().

void QOpenGLTextureBlitter::setOpacity(float opacity)

Règle l'opacité sur opacity. L'opacité par défaut est 1,0.

Remarque : le blitter ne modifie pas l'état de fusion. Il appartient à l'appelant de la fonction blit() de s'assurer que les paramètres de fusion appropriés sont actifs.

void QOpenGLTextureBlitter::setRedBlueSwizzle(bool swizzle)

Détermine si le « swizzling » est activé pour les canaux de couleur rouge et bleu vers le format « swizzle ». Une conversion BGRA vers RGBA (effectuée dans le shader sur le GPU, plutôt que par une transformation lente côté CPU) peut s’avérer utile lorsque la texture source contient des données issues d’un « QImage » au format tel que QImage::Format_ARGB32, qui correspond au format BGRA sur les systèmes « little endian ».

Par défaut, le swizzle rouge-bleu est désactivé, car c’est ce dont a besoin une texture associée à un objet framebuffer ou une texture basée sur un format d’ QImage s par ordre d’octets (comme QImage::Format_RGBA8888).

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

Calcule une matrice 3x3 pouvant servir d'entrée à la fonction ` blit()`. Cette fonction est utilisée lorsqu'une partie seulement de la texture doit être utilisée dans le blit.

subTexture est le rectangle source souhaité en pixels, textureSize correspond à la largeur et à la hauteur totales des données de texture. origin spécifie l'orientation des données d'image par rapport à l'axe Y.

Voir également blit() et Origin.

bool QOpenGLTextureBlitter::supportsExternalOESTarget() const

Renvoie ` true ` lorsque ` bind()` accepte ` GL_TEXTURE_EXTERNAL_OES ` comme argument cible.

Voir également bind() et blit().

bool QOpenGLTextureBlitter::supportsRectangleTarget() const

Renvoie ` true ` lorsque ` bind()` accepte ` GL_TEXTURE_RECTANGLE ` comme argument cible.

Voir également bind() et blit().

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

Calcule une transformation cible adaptée à la fonction ` blit()`.

target est le rectangle cible en pixels. viewport décrit les dimensions de la source et sera, dans la plupart des cas, défini sur (0, 0, largeur de l'image, hauteur de l'image).

Pour une sortie non mise à l'échelle, la taille de ` target ` et celle de ` viewport ` doivent correspondre.

Voir également 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.