QOpenGLFramebufferObject Class
La classe `QOpenGLFramebufferObject` encapsule un objet framebuffer OpenGL. En savoir plus...
| En-tête : | #include <QOpenGLFramebufferObject> |
| 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
- QOpenGLFramebufferObject fait partie du module « Rendu 3D ».
Types publics
| enum | Attachment { NoAttachment, CombinedDepthStencil, Depth } |
| enum | FramebufferRestorePolicy { DontRestoreFramebufferBinding, RestoreFramebufferBindingToDefault, RestoreFrameBufferBinding } |
Fonctions publiques
| QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D) | |
| QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format) | |
| QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D) | |
| QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format) | |
| QOpenGLFramebufferObject(const QSize &size, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0) | |
| QOpenGLFramebufferObject(int width, int height, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0) | |
| virtual | ~QOpenGLFramebufferObject() |
| void | addColorAttachment(const QSize &size, GLenum internalFormat = 0) |
| void | addColorAttachment(int width, int height, GLenum internalFormat = 0) |
| QOpenGLFramebufferObject::Attachment | attachment() const |
| bool | bind() |
| QOpenGLFramebufferObjectFormat | format() const |
| GLuint | handle() const |
| int | height() const |
| bool | isBound() const |
| bool | isValid() const |
| bool | release() |
| void | setAttachment(QOpenGLFramebufferObject::Attachment attachment) |
| QSize | size() const |
| QList<QSize> | sizes() const |
| GLuint | takeTexture() |
| GLuint | takeTexture(int colorAttachmentIndex) |
| GLuint | texture() const |
| QList<GLuint> | textures() const |
| QImage | toImage(bool flipped = true) const |
| QImage | toImage(bool flipped, int colorAttachmentIndex) const |
| int | width() const |
Membres publics statiques
| bool | bindDefault() |
| void | blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex, QOpenGLFramebufferObject::FramebufferRestorePolicy restorePolicy) |
| void | blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST) |
| void | blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST) |
| void | blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex) |
| bool | hasOpenGLFramebufferBlit() |
| bool | hasOpenGLFramebufferObjects() |
Description détaillée
La classe QOpenGLFramebufferObject encapsule un objet framebuffer OpenGL, défini par l’extension « GL_EXT_framebuffer_object ». Elle fournit une surface de rendu sur laquelle il est possible de dessiner à l’aide d’un « QPainter » (texture de rendu) via l’ QOpenGLPaintDevice, ou de la rendre à l’aide d’appels OpenGL natifs. Cette surface peut être liée et utilisée comme une texture classique dans votre propre code de dessin OpenGL. Par défaut, la classe `QOpenGLFramebufferObject` génère une texture OpenGL 2D (en utilisant la cible ` GL_TEXTURE_2D `), qui sert de cible de rendu interne.
Il est important de disposer d’un contexte OpenGL actif lors de la création d’un QOpenGLFramebufferObject, sinon l’initialisation échouera.
Créez l’instance de `QOpenGLFrameBufferObject` avec l’attachement « CombinedDepthStencil » si vous souhaitez que l’ QPainter e s’affiche correctement. Notez que vous devez créer un QOpenGLFramebufferObject avec plus d’un échantillon par pixel pour que les primitives soient lissées lors du dessin à l’aide d’un QPainter. Pour créer un objet framebuffer multisample, vous devez utiliser l’un des constructeurs prenant un paramètre QOpenGLFramebufferObjectFormat, et définir la propriété QOpenGLFramebufferObjectFormat::samples() sur une valeur non nulle.
Pour les objets framebuffer multisample, un tampon de rendu de couleur est créé ; dans le cas contraire, une texture avec la cible de texture spécifiée est créée. Le tampon de rendu de couleur ou la texture aura le format interne spécifié et sera lié à l’attachement « GL_COLOR_ATTACHMENT0 » dans l’objet framebuffer.
Plusieurs cibles de rendu sont également prises en charge, si l’implémentation OpenGL le permet. Dans ce cas, plusieurs textures (ou, en cas de multisampling, plusieurs tampons de rendu) seront présentes et chacune d’entre elles sera attachée à GL_COLOR_ATTACHMENT0, 1, 2, …
Si vous souhaitez utiliser comme texture un objet framebuffer avec le multisampling activé, vous devez d’abord en copier le contenu vers un objet framebuffer standard à l’aide de `QOpenGLContext::blitFramebuffer()`.
Il est possible de dessiner dans un QOpenGLFramebufferObject à l’aide de QPainter et QOpenGLPaintDevice dans un thread distinct.
Documentation sur les types de membres
enum QOpenGLFramebufferObject::Attachment
Ce type d'énumération sert à configurer les tampons de profondeur et de stencil associés à l'objet framebuffer lors de sa création.
| Constante | Valeur | Description |
|---|---|---|
QOpenGLFramebufferObject::NoAttachment | 0 | Aucun tampon n’est associé à l’objet framebuffer. Notez que les tests de profondeur et de stencil OpenGL ne fonctionneront pas lors du rendu vers un objet framebuffer ne comportant ni tampon de profondeur ni tampon de stencil. Il s’agit de la valeur par défaut. |
QOpenGLFramebufferObject::CombinedDepthStencil | 1 | Si l'extension « GL_EXT_packed_depth_stencil » est présente, un tampon combiné de profondeur et de stencil est associé. Si l'extension n'est pas présente, seul un tampon de profondeur est associé. |
QOpenGLFramebufferObject::Depth | 2 | Un tampon de profondeur est associé à l’objet framebuffer. |
Voir également attachment().
enum QOpenGLFramebufferObject::FramebufferRestorePolicy
Ce type d'énumération sert à configurer le comportement lié à la restauration des liaisons du framebuffer lors de l'appel de la fonction ` blitFramebuffer()`.
| Constante | Valeur | Description |
|---|---|---|
QOpenGLFramebufferObject::DontRestoreFramebufferBinding | 0 | Ne pas restaurer la liaison au framebuffer précédente. L'appelant est chargé de suivre et de définir la liaison au framebuffer selon les besoins. |
QOpenGLFramebufferObject::RestoreFramebufferBindingToDefault | 1 | Après l’opération de blit, lie le framebuffer par défaut. |
QOpenGLFramebufferObject::RestoreFrameBufferBinding | 2 | Rétablit le framebuffer précédemment lié. Cette opération peut s’avérer coûteuse en ressources, car elle nécessite d’interroger le framebuffer actuellement lié. |
Voir également blitFramebuffer().
Documentation des fonctions membres
[explicit] QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D)
Crée un objet framebuffer OpenGL et lie une texture OpenGL 2D au tampon de taille size. La texture est liée à la cible GL_COLOR_ATTACHMENT0 dans l'objet framebuffer.
Le paramètre target sert à spécifier la cible de texture OpenGL. La cible par défaut est GL_TEXTURE_2D. N’oubliez pas que les textures de type « GL_TEXTURE_2D » doivent avoir une largeur et une hauteur qui sont des puissances de 2 (par exemple 256x512), sauf si vous utilisez OpenGL 2.0 ou une version supérieure.
Par défaut, aucun tampon de profondeur ni de stencil n’est associé. Ce comportement peut être modifié à l’aide de l’un des constructeurs surchargés.
Le format de texture interne par défaut est GL_RGBA8 pour OpenGL sur ordinateur de bureau, et GL_RGBA pour OpenGL/ES.
Il est important que vous ayez défini un contexte OpenGL valide lors de la création de l'objet `QOpenGLFramebufferObject`, sinon l'initialisation échouera.
Voir également size(), texture() et attachment().
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format)
Crée un objet framebuffer OpenGL correspondant à l'size spécifiée, en fonction de l'format fournie.
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D)
Crée un objet « framebuffer » OpenGL et associe une texture OpenGL 2D au tampon des objets « width » et « height » indiqués.
Voir également size() et texture().
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format)
Crée un objet « framebuffer » OpenGL à partir des paramètres « width » et « height » fournis, en fonction de la valeur « format » fournie.
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)
Crée un objet framebuffer OpenGL et lie une texture au tampon de l'size spécifié.
Le paramètre ` attachment ` décrit la configuration des tampons de profondeur et de stencil, ` target ` la cible de texture et ` internalFormat ` le format de texture interne. La cible de texture par défaut est ` GL_TEXTURE_2D`, tandis que le format interne par défaut est ` GL_RGBA8 ` pour OpenGL de bureau et ` GL_RGBA ` pour OpenGL/ES.
Voir également size(), texture() et attachment().
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)
Crée un objet framebuffer OpenGL et lie une texture au tampon des paramètres ` width ` et ` height` fournis.
Le paramètre attachment décrit la configuration du tampon de profondeur/stencil, target la cible de texture et internalFormat le format de texture interne. La cible de texture par défaut est GL_TEXTURE_2D, tandis que le format interne par défaut est GL_RGBA8 pour OpenGL de bureau et GL_RGBA pour OpenGL/ES.
Voir également size(), texture() et attachment().
[virtual noexcept] QOpenGLFramebufferObject::~QOpenGLFramebufferObject()
Détruit l'objet framebuffer et libère toutes les ressources allouées.
void QOpenGLFramebufferObject::addColorAttachment(const QSize &size, GLenum internalFormat = 0)
Crée et associe une texture ou un tampon de rendu supplémentaire d'une largeur et d'une hauteu size.
Il existe toujours une attache à GL_COLOR_ATTACHMENT0. Appelez cette fonction pour configurer des attaches supplémentaires à GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, …
Lorsque internalFormat n’est pas 0, il spécifie le format interne de la texture ou du tampon de rendu. Sinon, la valeur par défaut GL_RGBA ou GL_RGBA8 est utilisée.
Remarque : cette fonction n’est opérationnelle que lorsque l’implémentation OpenGL prend en charge plusieurs cibles de rendu (MRT). Si ce n’est pas le cas, la fonction n’ajoutera aucune extension de couleur supplémentaire. Appelez ` QOpenGLFunctions::hasOpenGLFeature()` avec ` QOpenGLFunctions::MultipleRenderTargets ` lors de l’exécution pour vérifier si le MRT est pris en charge.
Remarque : le format interne des annexes de couleur peut varier, mais il peut exister des limitations quant aux combinaisons prises en charge, selon les pilotes.
Remarque : la taille des annexes de couleur peut varier, mais le rendu est limité à la zone pouvant contenir toutes les annexes, conformément à la spécification OpenGL. Certains pilotes peuvent toutefois ne pas être entièrement conformes à cet égard.
void QOpenGLFramebufferObject::addColorAttachment(int width, int height, GLenum internalFormat = 0)
Crée et associe une texture ou un tampon de rendu supplémentaire de taille width et height.
Lorsque internalFormat n’est pas 0, il spécifie le format interne de la texture ou du tampon de rendu. Sinon, la valeur par défaut GL_RGBA ou GL_RGBA8 est utilisée.
Il s’agit d’une fonction surchargée.
QOpenGLFramebufferObject::Attachment QOpenGLFramebufferObject::attachment() const
Renvoie l'état des tampons de profondeur et de stencil associés à cet objet framebuffer.
Voir également ` setAttachment()`.
bool QOpenGLFramebufferObject::bind()
Permet de basculer l'affichage du framebuffer fourni par défaut par le système de fenêtrage vers cet objet framebuffer. Renvoie ` true ` en cas de succès, `false` dans le cas contraire.
Remarque : si la fonction ` takeTexture()` a été appelée, une nouvelle texture est créée et associée à l’objet framebuffer. Cette opération peut s’avérer coûteuse et modifie l’état du contexte (la texture actuellement liée).
Voir également ` release()`.
[static] bool QOpenGLFramebufferObject::bindDefault()
Rétablit le rendu par défaut, c'est-à-dire celui fourni par le système de fenêtrage via le framebuffer. Renvoie true en cas de succès, false dans le cas contraire.
Voir également bind() et release().
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex, QOpenGLFramebufferObject::FramebufferRestorePolicy restorePolicy)
Effectue un blit depuis le rectangle sourceRect de l'objet framebuffer source vers le rectangle targetRect de l'objet framebuffer target.
Si source ou target est égal à 0, le framebuffer par défaut sera utilisé à la place d'un objet framebuffer comme source ou cible respectivement.
Cette fonction n’aura aucun effet à moins que hasOpenGLFramebufferBlit() ne renvoie vrai.
Le paramètre buffers doit être un masque composé d'une combinaison quelconque de GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT et GL_STENCIL_BUFFER_BIT. Tout type de tampon qui n'est pas présent à la fois dans les tampons source et cible est ignoré.
Les rectangles sourceRect et targetRect peuvent avoir des tailles différentes ; dans ce cas, buffers ne doit pas contenir GL_DEPTH_BUFFER_BIT ni GL_STENCIL_BUFFER_BIT. Le paramètre filter doit être défini sur GL_LINEAR ou GL_NEAREST, et spécifie s’il faut utiliser une interpolation linéaire ou par plus proche lorsque la mise à l’échelle est effectuée.
Si source est égal à target, une copie est effectuée au sein du même tampon. Les résultats ne sont pas définis si les rectangles source et cible se chevauchent et ont des tailles différentes. Les tailles doivent également être identiques si l’un des objets de tampon d’image est un tampon d’image multi-échantillonnage.
Remarque : le test « scissor » limitera la zone de décalquage s’il est activé.
Lorsque plusieurs cibles de rendu sont utilisées, les paramètres ` readColorAttachmentIndex ` et ` drawColorAttachmentIndex ` spécifient l’index des pièces jointes de couleur dans les framebuffers source et de destination.
La fonction restorePolicy détermine si le framebuffer lié avant l’appel de cette fonction doit être restauré, si le framebuffer par défaut doit être lié avant le retour, ou si l’appelant est chargé de suivre et de définir le framebuffer lié. La restauration du framebuffer précédent peut s’avérer relativement coûteuse en raison de l’appel à ` glGetIntegerv `, qui, sur certains pilotes OpenGL, peut entraîner un blocage du pipeline.
Voir également la fonction ` hasOpenGLFramebufferBlit()`.
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)
Surcharge de commodité pour effectuer un blit entre deux objets framebuffer.
Il s'agit d'une fonction surchargée.
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)
* Surcharge de commodité permettant d'effectuer un blit entre deux objets framebuffer.
Il s'agit d'une fonction surchargée.
[static] void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex)
Fonction de commodité permettant d'effectuer un blit entre deux objets framebuffer et de rétablir le lien avec le framebuffer précédent. Équivaut à l'appel de `blitFramebuffer(target, targetRect, source, sourceRect, buffers, filter, readColorAttachmentIndex, drawColorAttachmentIndex, RestoreFrameBufferBinding)`.
Il s'agit d'une fonction surchargée.
QOpenGLFramebufferObjectFormat QOpenGLFramebufferObject::format() const
Renvoie le format de cet objet « framebuffer ».
GLuint QOpenGLFramebufferObject::handle() const
Renvoie le descripteur OpenGL de cet objet framebuffer (renvoyé par la fonction ` glGenFrameBuffersEXT() `). Ce descripteur peut être utilisé pour associer de nouvelles images ou de nouveaux tampons au framebuffer. Il incombe à l'utilisateur de nettoyer et de détruire ces objets.
[static] bool QOpenGLFramebufferObject::hasOpenGLFramebufferBlit()
Renvoie « true » si l'extension OpenGL « GL_EXT_framebuffer_blit » est présente sur ce système ; sinon, renvoie « false ».
Voir également blitFramebuffer().
[static] bool QOpenGLFramebufferObject::hasOpenGLFramebufferObjects()
Renvoie « true » si l'extension OpenGL « GL_EXT_framebuffer_object » est présente sur ce système ; sinon, renvoie « false ».
int QOpenGLFramebufferObject::height() const
Renvoie la hauteur des objets associés au framebuffer.
bool QOpenGLFramebufferObject::isBound() const
Renvoie « true » si l'objet framebuffer est actuellement lié au contexte courant ; sinon, la valeur « false » est renvoyée.
bool QOpenGLFramebufferObject::isValid() const
Renvoie ` true ` si l'objet framebuffer est valide.
Le framebuffer peut devenir invalide si le processus d’initialisation échoue, si l’utilisateur associe un tampon invalide à l’objet framebuffer, ou si une largeur ou une hauteur non puissance de deux est spécifiée comme taille de texture lorsque la cible de texture est GL_TEXTURE_2D. La restriction relative aux dimensions non-puissance de deux ne s'applique pas si la version d'OpenGL est 2.0 ou supérieure, ou si l'extension GL_ARB_texture_non_power_of_two est présente.
Le framebuffer peut également devenir invalide si l’ QOpenGLContext dans lequel il a été créé est détruit et qu’il n’existe aucun autre contexte partagé capable de prendre en charge la propriété du framebuffer.
bool QOpenGLFramebufferObject::release()
Rétablit le rendu par défaut, à savoir le framebuffer fourni par le système de gestion des fenêtres. Renvoie ` true ` en cas de succès, `false` dans le cas contraire.
Voir également bind().
void QOpenGLFramebufferObject::setAttachment(QOpenGLFramebufferObject::Attachment attachment)
Définit les attaches de l'objet framebuffer sur « attachment ».
Cette fonction peut être utilisée pour libérer ou rattacher les attaches des tampons de profondeur et de stencil selon les besoins.
Remarque : cette fonction modifie la liaison actuelle du framebuffer.
Voir aussi ` attachment()`.
QSize QOpenGLFramebufferObject::size() const
Renvoie la taille des extensions de couleur et de profondeur/stencil associées à cet objet framebuffer.
QList<QSize> QOpenGLFramebufferObject::sizes() const
Renvoie les dimensions de toutes les images associées à cet objet framebuffer.
GLuint QOpenGLFramebufferObject::takeTexture()
Renvoie l'identifiant de la texture associée à cet objet framebuffer. La propriété de la texture est transférée à l'appelant.
Si l’objet framebuffer est actuellement lié, un appel implicite à ` release()` sera effectué. Lors du prochain appel à ` bind()`, une nouvelle texture sera créée.
Si un objet framebuffer multisample est utilisé, il n’y a pas de texture et la valeur renvoyée par cette fonction sera invalide. De même, les objets framebuffer incomplets renverront également 0.
Voir également texture(), bind() et release().
GLuint QOpenGLFramebufferObject::takeTexture(int colorAttachmentIndex)
Renvoie l'identifiant de la texture associée à l'attachement de couleur d'index colorAttachmentIndex de cet objet framebuffer. La propriété de la texture est transférée à l'appelant.
Lorsque colorAttachmentIndex vaut 0, le comportement est identique à celui de la variante sans paramètre de cette fonction.
Si l’objet framebuffer est actuellement lié, un appel implicite à ` release()` sera effectué. Lors du prochain appel à ` bind()`, une nouvelle texture sera créée.
Si un objet framebuffer multisample est utilisé, il n’y a alors pas de texture et la valeur renvoyée par cette fonction sera invalide. De même, les objets framebuffer incomplets renverront également 0.
Il s’agit d’une fonction surchargée.
GLuint QOpenGLFramebufferObject::texture() const
Renvoie l'identifiant de la texture associée en tant que cible de rendu par défaut dans cet objet framebuffer. Cet identifiant de texture peut être lié en tant que texture normale dans votre propre code OpenGL.
Si un objet framebuffer à échantillonnage multiple est utilisé, la valeur renvoyée par cette fonction sera invalide.
Lorsque plusieurs textures sont associées, la valeur renvoyée correspond à l'identifiant de la première.
Voir également takeTexture() et textures().
QList<GLuint> QOpenGLFramebufferObject::textures() const
Renvoie l'identifiant de texture pour toutes les textures associées.
Si un objet framebuffer multisample est utilisé, un vecteur vide est renvoyé.
Voir également takeTexture() et texture().
QImage QOpenGLFramebufferObject::toImage(bool flipped = true) const
Renvoie le contenu de cet objet framebuffer sous la forme d'un ` QImage`.
Si ` flipped ` est vrai, l'image est convertie des coordonnées OpenGL en coordonnées raster. En cas d'utilisation conjointe avec ` QOpenGLPaintDevice`, la valeur de ` flipped ` doit être l'opposé de celle renvoyée par ` QOpenGLPaintDevice::paintFlipped()`.
L'image renvoyée est au format ARGB32 ou RGB32 pré-multiplié. Ce dernier n’est utilisé que lorsque `internalTextureFormat()` est défini sur ` GL_RGB`. Depuis Qt 5.2, la fonction utilise par défaut le format RGBA8888 ou RGBx8888 pré-multiplié lorsque la lecture au format (A)RGB32 n’est pas prise en charge, ce qui inclut OpenGL ES. Depuis Qt 5.4, une image A2BGR30 est renvoyée si le format interne est RGB10_A2, et depuis Qt 5.12, une image RGBA64 est renvoyée si le format interne est RGBA16.
Si le rendu dans le framebuffer n’a pas été effectué en tenant compte de l’alpha pré-multiplié, créez un wrapper QImage avec un format non pré-multiplié. Cela est nécessaire avant d’effectuer des opérations telles que QImage::save(), car sinon les données d’image seraient dépré-multipliées, même si elles n’étaient pas pré-multipliées au départ. Pour créer un tel wrapper sans copier les données de pixels, procédez comme suit :
QImage fboImage(fbo.toImage());
QImage image(fboImage.constBits(), fboImage.width(), fboImage.height(), QImage::Format_ARGB32);Pour les objets framebuffer à échantillonnage multiple, les échantillons sont résolus à l’aide de l’extension GL_EXT_framebuffer_blit. Si cette extension n’est pas disponible, le contenu de l’image renvoyée est indéfini.
Pour les framebuffers à échantillonnage simple, le contenu est récupéré via ` glReadPixels`. Il s’agit d’une opération potentiellement coûteuse et inefficace. Il est donc recommandé d’utiliser cette fonction le moins souvent possible.
Voir également ` QOpenGLPaintDevice::paintFlipped()`.
QImage QOpenGLFramebufferObject::toImage(bool flipped, int colorAttachmentIndex) const
Renvoie le contenu de l'attachement de couleur à l'index colorAttachmentIndex de cet objet framebuffer sous la forme d'un objet « QImage ». Cette méthode convertit l'image des coordonnées OpenGL en coordonnées raster lorsque la propriété « flipped » est définie sur « true ».
Remarque : cette surcharge n’est pleinement fonctionnelle que lorsque l’implémentation OpenGL prend en charge plusieurs cibles de rendu. Si ce n’est pas le cas, un seul attachement de couleur sera configuré.
Il s'agit d'une fonction surchargée.
int QOpenGLFramebufferObject::width() const
Renvoie la largeur des objets attachés au framebuffer.
© 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.