QOpenGLTextureBlitter Class
La classe QOpenGLTextureBlitter fournit un moyen pratique de dessiner des quads texturés via OpenGL. Plus d'informations...
| En-tête : | #include <QOpenGLTextureBlitter> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS OpenGL)target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake : | QT += opengl |
- Liste de tous les membres, y compris les membres hérités
- QOpenGLTextureBlitter fait partie de Rendering in 3D.
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
Dessiner des quads texturés, afin 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 de commodité pour éviter de répéter les données de vertex, les sources de shader, la gestion des tampons et des programmes et les calculs de matrice.
Par exemple, une sous-classe de QOpenGLWidget peut faire ce qui suit pour dessiner le contenu rendu dans un framebuffer à la position du 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 les shaders GLSL à la fois pour GLSL 1.00 (adapté à OpenGL (ES) 2.x et aux profils de compatibilité des versions plus récentes d'OpenGL) et pour la version 150 (adapté aux contextes de profil de base avec OpenGL 3.2 et plus récent).
Documentation sur les types de membres
enum QOpenGLTextureBlitter::Origin
| Constante | Valeur | Description |
|---|---|---|
QOpenGLTextureBlitter::OriginBottomLeft | 0 | Indique que les données de la texture suivent la convention OpenGL des systèmes de coordonnées, ce qui signifie que Y va de bas en haut. |
QOpenGLTextureBlitter::OriginTopLeft | 1 | Indique que les données de la texture ont un Y allant de haut en bas, ce qui est typique des données d'images régulières, non retournées. |
Voir aussi blit().
Documentation des fonctions membres
QOpenGLTextureBlitter::QOpenGLTextureBlitter()
Construit une nouvelle instance de QOpenGLTextureBlitter.
Note : aucune ressource graphique n'est initialisée dans le constructeur. Cela permet de placer les membres de QOpenGLTextureBlitter dans les classes car l'initialisation réelle qui dépend du contexte OpenGL n'a lieu que dans create().
[noexcept] QOpenGLTextureBlitter::~QOpenGLTextureBlitter()
Détruit l'instance.
Note : Lorsque le contexte OpenGL - ou un contexte partageant des ressources avec lui - qui était courant lors de l'appel à create() n'est pas courant, les ressources graphiques ne seront pas libérées. Il est donc recommandé d'appeler destroy() manuellement plutôt que de se fier au 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. Il doit être appelé avant d'appeler blit(). Le code modifiant l'état OpenGL doit être évité entre l'appel à bind() et blit() car sinon des conflits peuvent survenir.
target est la cible de texture pour la texture source et doit être soit GL_TEXTURE_2D, GL_TEXTURE_RECTANGLE, ou GL_OES_EGL_image_external.
Voir aussi release() et blit().
void QOpenGLTextureBlitter::blit(GLuint texture, const QMatrix4x4 &targetTransform, QOpenGLTextureBlitter::Origin sourceOrigin)
Effectue le blit avec la texture source texture.
targetTransform spécifie la transformation appliquée. Elle est généralement générée par la fonction d'aide targetTransform().
sourceOrigin spécifie si les données de l'image doivent être retournées. Lorsque texture correspond à une texture attachée à un FBO, passez OriginBottomLeft. En revanche, lorsque texture est basé sur des données d'image non retournées, il faut passer OriginTopLeft. Cette méthode est plus efficace que l'utilisation de QImage::flipped().
Voir aussi 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. Elle 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 de n'utiliser qu'un sous-répertoire 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.
Retourne true en cas de succès, false en cas d'échec. Les échecs peuvent survenir lorsqu'il n'y a pas de contexte OpenGL courant sur le thread courant, ou lorsque la compilation des shaders échoue pour une raison quelconque.
Voir aussi isCreated() et destroy().
void QOpenGLTextureBlitter::destroy()
Libère toutes les ressources graphiques détenues par le blitter. Suppose que le contexte OpenGL, ou un autre contexte partageant des ressources avec lui, qui était courant sur le thread lors de l'invocation de create() est courant.
Cette fonction n'a aucun effet lorsque le blitter n'est pas créé.
Voir aussi create().
bool QOpenGLTextureBlitter::isCreated() const
Renvoie true si create() a été appelé et a réussi. false sinon.
Voir aussi create() et destroy().
void QOpenGLTextureBlitter::release()
Libère les ressources graphiques utilisées par le blitter.
Voir également bind().
void QOpenGLTextureBlitter::setOpacity(float opacity)
Modifie l'opacité à opacity. L'opacité par défaut est de 1,0.
Remarque : le blitter ne modifie pas l'état de la fusion. C'est à l'appelant de blit() de s'assurer que les paramètres de fusion corrects sont actifs.
void QOpenGLTextureBlitter::setRedBlueSwizzle(bool swizzle)
Définit si le swizzling est activé pour les canaux de couleur rouge et bleu à swizzle. Une conversion de BGRA en RGBA (se produisant dans le shader sur le GPU, au lieu d'une transformation lente côté CPU) peut être utile lorsque la texture source contient des données provenant d'un site QImage avec un format comme QImage::Format_ARGB32 qui correspond à 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 attachée à un objet framebuffer ou une texture basée sur un format QImage ordonné par octets (comme QImage::Format_RGBA8888).
[static] QMatrix3x3 QOpenGLTextureBlitter::sourceTransform(const QRectF &subTexture, const QSize &textureSize, QOpenGLTextureBlitter::Origin origin)
Calcule une matrice 3x3 qui servira d'entrée à blit(). Elle est utilisée lorsque seule une partie de la texture doit être utilisée dans le blit.
subTexture est le rectangle source souhaité en pixels, textureSize est 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.
bool QOpenGLTextureBlitter::supportsRectangleTarget() const
Renvoie true lorsque bind() accepte GL_TEXTURE_RECTANGLE comme argument cible.
[static] QMatrix4x4 QOpenGLTextureBlitter::targetTransform(const QRectF &target, const QRect &viewport)
Calcule une transformation cible adaptée à blit().
target est le rectangle cible en pixels. viewport décrit les dimensions de la source et sera dans la plupart des cas fixé à (0, 0, largeur de l'image, hauteur de l'image).
Pour une sortie sans échelle, les dimensions de target et 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.