QOpenGLBuffer Class
La classe QOpenGLBuffer fournit des fonctions permettant de créer et de gérer des objets tampon OpenGL. En savoir plus...
| En-tête : | #include <QOpenGLBuffer> |
| 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
- QOpenGLBuffer fait partie du module « Rendu 3D ».
Types publics
| enum | Access { ReadOnly, WriteOnly, ReadWrite } |
| enum | RangeAccessFlag { RangeRead, RangeWrite, RangeInvalidate, RangeInvalidateBuffer, RangeFlushExplicit, RangeUnsynchronized } |
| flags | RangeAccessFlags |
| enum | Type { VertexBuffer, IndexBuffer, PixelPackBuffer, PixelUnpackBuffer } |
| enum | UsagePattern { StreamDraw, StreamRead, StreamCopy, StaticDraw, StaticRead, …, DynamicCopy } |
Fonctions publiques
| QOpenGLBuffer() | |
| QOpenGLBuffer(QOpenGLBuffer::Type type) | |
| QOpenGLBuffer(const QOpenGLBuffer &other) | |
(since 6.5) | QOpenGLBuffer(QOpenGLBuffer &&other) |
| ~QOpenGLBuffer() | |
| void | allocate(const void *data, int count) |
| void | allocate(int count) |
| bool | bind() |
| GLuint | bufferId() const |
| bool | create() |
| void | destroy() |
| bool | isCreated() const |
| void * | map(QOpenGLBuffer::Access access) |
| void * | mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access) |
| bool | read(int offset, void *data, int count) |
| void | release() |
| void | setUsagePattern(QOpenGLBuffer::UsagePattern value) |
| int | size() const |
(since 6.5) void | swap(QOpenGLBuffer &other) |
| QOpenGLBuffer::Type | type() const |
| bool | unmap() |
| QOpenGLBuffer::UsagePattern | usagePattern() const |
| void | write(int offset, const void *data, int count) |
(since 6.5) QOpenGLBuffer & | operator=(QOpenGLBuffer &&other) |
| QOpenGLBuffer & | operator=(const QOpenGLBuffer &other) |
Membres publics statiques
| void | release(QOpenGLBuffer::Type type) |
Description détaillée
Les objets tampons sont créés dans le serveur OpenGL afin que l'application cliente n'ait pas à charger les sommets, les indices, les données d'image de texture, etc. à chaque fois qu'elle en a besoin.
Les objets `QOpenGLBuffer` peuvent être copiés en tant que référence à l’objet tampon OpenGL sous-jacent :
QOpenGLBuffer buffer1(QOpenGLBuffer::IndexBuffer);
buffer1.create();
QOpenGLBuffer buffer2 = buffer1;QOpenGLBuffer effectue une copie superficielle lorsque les objets sont copiés de cette manière, mais n’implémente pas la sémantique « copy-on-write ». L’objet d’origine sera affecté chaque fois que la copie sera modifiée.
Avertissement : toutes les données utilisées par QOpenGLBuffer doivent provenir d’une source fiable. Les données du tampon sont transmises à l’implémentation OpenGL sous-jacente. Il est conseillé aux développeurs d’applications d’évaluer soigneusement les implications potentielles avant de transmettre du contenu fourni par l’utilisateur à des fonctions telles que ` allocate()` et ` write()`.
Documentation sur les types de membres
enum QOpenGLBuffer::Access
Cette énumération définit le mode d'accès de la fonction ` QOpenGLBuffer::map()`.
| Constante | Valeur | Description |
|---|---|---|
QOpenGLBuffer::ReadOnly | 0x88B8 | Le tampon sera mappé en lecture seule. |
QOpenGLBuffer::WriteOnly | 0x88B9 | Le tampon sera mappé en écriture seule. |
QOpenGLBuffer::ReadWrite | 0x88BA | Le tampon sera mappé en lecture et en écriture. |
enum QOpenGLBuffer::RangeAccessFlag
flags QOpenGLBuffer::RangeAccessFlags
Cette énumération définit les bits de mode d'accès pour la fonction ` QOpenGLBuffer::mapRange()`.
| Constante | Valeur | Description |
|---|---|---|
QOpenGLBuffer::RangeRead | 0x0001 | Le tampon sera mappé en lecture. |
QOpenGLBuffer::RangeWrite | 0x0002 | Le tampon sera mappé en écriture. |
QOpenGLBuffer::RangeInvalidate | 0x0004 | Effacer le contenu précédent de la plage spécifiée. |
QOpenGLBuffer::RangeInvalidateBuffer | 0x0008 | Efface le contenu précédent de l'ensemble du tampon. |
QOpenGLBuffer::RangeFlushExplicit | 0x0010 | Indique que les modifications doivent être validées explicitement via ` glFlushMappedBufferRange`. |
QOpenGLBuffer::RangeUnsynchronized | 0x0020 | Indique que les opérations en attente ne doivent pas être synchronisées avant le retour de la fonction mapRange(). |
Le type `RangeAccessFlags` est une définition de type (`typedef`) pour `QFlags<RangeAccessFlag>`. Il stocke une combinaison (ou) de valeurs `RangeAccessFlag`.
enum QOpenGLBuffer::Type
Cette énumération définit le type d'objet tampon OpenGL à créer avec la fonction ` QOpenGLBuffer`.
| Constante | Valeur | Description |
|---|---|---|
QOpenGLBuffer::VertexBuffer | 0x8892 | Objet tampon de sommets à utiliser lors de la spécification de tableaux de sommets. |
QOpenGLBuffer::IndexBuffer | 0x8893 | Objet tampon d'index à utiliser avec la fonction ` glDrawElements()`. |
QOpenGLBuffer::PixelPackBuffer | 0x88EB | Objet de tampon de paquets de pixels permettant de lire des données de pixels à partir du serveur OpenGL (par exemple, avec ` glReadPixels()`). Non pris en charge sous OpenGL/ES. |
QOpenGLBuffer::PixelUnpackBuffer | 0x88EC | Objet de tampon de décompression de pixels permettant d'écrire des données de pixels sur le serveur OpenGL (par exemple, avec ` glTexImage2D()`). Non pris en charge sous OpenGL/ES. |
enum QOpenGLBuffer::UsagePattern
Cette énumération définit le modèle d'utilisation d'un objet ` QOpenGLBuffer `.
| Constante | Valeur | Description |
|---|---|---|
QOpenGLBuffer::StreamDraw | 0x88E0 | Les données seront définies une seule fois et utilisées à plusieurs reprises pour les opérations de dessin. Sous OpenGL/ES 1.1, cela revient au même que StaticDraw. |
QOpenGLBuffer::StreamRead | 0x88E1 | Les données seront définies une seule fois et utilisées à plusieurs reprises pour la lecture des données en provenance du serveur OpenGL. Non pris en charge sous OpenGL/ES. |
QOpenGLBuffer::StreamCopy | 0x88E2 | Les données seront définies une seule fois et utilisées plusieurs fois pour récupérer des données depuis le serveur OpenGL en vue d'opérations de dessin ultérieures. Non pris en charge sous OpenGL/ES. |
QOpenGLBuffer::StaticDraw | 0x88E4 | Les données seront définies une seule fois et utilisées à de nombreuses reprises pour des opérations de dessin. |
QOpenGLBuffer::StaticRead | 0x88E5 | Les données seront définies une seule fois et utilisées à de nombreuses reprises pour récupérer des données depuis le serveur OpenGL. Non pris en charge sous OpenGL/ES. |
QOpenGLBuffer::StaticCopy | 0x88E6 | Les données seront définies une seule fois et utilisées à de nombreuses reprises pour récupérer des données depuis le serveur OpenGL en vue d’opérations de dessin ultérieures. Non pris en charge sous OpenGL/ES. |
QOpenGLBuffer::DynamicDraw | 0x88E8 | Les données seront modifiées à plusieurs reprises et utilisées à de nombreuses reprises pour des opérations de dessin. |
QOpenGLBuffer::DynamicRead | 0x88E9 | Les données seront modifiées à plusieurs reprises et utilisées à de nombreuses reprises pour récupérer des données depuis le serveur OpenGL. Non pris en charge sous OpenGL/ES. |
QOpenGLBuffer::DynamicCopy | 0x88EA | Les données seront modifiées à plusieurs reprises et utilisées à de nombreuses reprises pour récupérer des données depuis le serveur OpenGL en vue d’opérations de dessin ultérieures. Non pris en charge sous OpenGL/ES. |
Documentation des fonctions membres
QOpenGLBuffer::QOpenGLBuffer()
Crée un nouvel objet tampon de type ` QOpenGLBuffer::VertexBuffer`.
Remarque : ce constructeur se contente de créer l'instance de QOpenGLBuffer. L'objet tampon proprement dit dans le serveur OpenGL n'est créé qu'au moment où la fonction create() est appelée.
Voir aussi ` create()`.
[explicit] QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer::Type type)
Crée un nouvel objet tampon de type ` type`.
Remarque : ce constructeur se contente de créer l'instance de QOpenGLBuffer. L'objet tampon proprement dit dans le serveur OpenGL n'est créé qu'au moment de l'appel à create().
Voir aussi ` create()`.
QOpenGLBuffer::QOpenGLBuffer(const QOpenGLBuffer &other)
Crée une copie superficielle de ` other`.
Remarque : QOpenGLBuffer n'implémente pas la sémantique « copy-on-write » ; par conséquent, other sera affecté chaque fois que la copie sera modifiée.
[noexcept, since 6.5] QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer &&other)
La fonction « move » construit un nouvel objet `QOpenGLBuffer` à partir de ` other`.
Remarque : l'objet d'origine other est placé dans un état partiellement formé, dans lequel les seules opérations valides sont la destruction et l'affectation d'une nouvelle valeur.
Cette fonction a été introduite dans Qt 6.5.
[noexcept] QOpenGLBuffer::~QOpenGLBuffer()
Supprime cet objet tampon, y compris l'espace mémoire utilisé dans le serveur OpenGL.
void QOpenGLBuffer::allocate(const void *data, int count)
Alloue count octets d'espace au tampon, initialisé avec le contenu de data. Tout contenu préexistant sera supprimé.
On suppose que la fonction create() a été appelée sur ce tampon et que celui-ci a été lié au contexte courant.
Voir également create(), read() et write().
void QOpenGLBuffer::allocate(int count)
Alloue count octets d'espace au tampon. Tout contenu préexistant sera supprimé.
On suppose que la fonction ` create()` a été appelée sur ce tampon et que celui-ci a été lié au contexte actuel.
Il s'agit d'une fonction surchargée.
Voir également ` create()` et ` write()`.
bool QOpenGLBuffer::bind()
Lie le tampon associé à cet objet au contexte OpenGL actuel. Renvoie ` false ` si la liaison n'a pas pu être établie, généralement parce que la fonction ` type()` n'est pas prise en charge par cette implémentation d'OpenGL.
Le tampon doit être lié au même QOpenGLContext que celui qui était actif au moment de l’appel de create(), ou à un autre QOpenGLContext qui le partage avec celui-ci. Sinon, cette fonction renvoie false.
Voir également release() et create().
GLuint QOpenGLBuffer::bufferId() const
Renvoie l'identifiant OpenGL associé à ce tampon ; zéro si le tampon n'a pas été créé.
Voir également isCreated().
bool QOpenGLBuffer::create()
Crée l'objet tampon dans le serveur OpenGL. Renvoie « true » si l'objet a été créé ; « false » dans le cas contraire.
Cette fonction doit être appelée avec un ` QOpenGLContext` actif. Le tampon sera lié à ce contexte et ne pourra être utilisé que dans celui-ci (ou dans tout autre contexte partagé avec celui-ci).
Cette fonction renvoie « false » si l’implémentation OpenGL ne prend pas en charge les tampons, ou s’il n’existe aucun objet « QOpenGLContext » actif.
Voir également isCreated(), allocate(), write() et destroy().
void QOpenGLBuffer::destroy()
Détruit cet objet tampon, y compris l'espace mémoire utilisé dans le serveur OpenGL. Toutes les références à ce tampon deviendront invalides.
bool QOpenGLBuffer::isCreated() const
Renvoie ` true ` si ce tampon a été créé ; `false` dans le cas contraire.
Voir également create() et destroy().
void *QOpenGLBuffer::map(QOpenGLBuffer::Access access)
Mappe le contenu de ce tampon dans l'espace mémoire de l'application et renvoie un pointeur vers celui-ci. Renvoie `null` si le mappage en mémoire n'est pas possible. Le paramètre ` access ` indique le type d'accès à effectuer.
On suppose que la fonction ` create()` a été appelée sur ce tampon et que celui-ci a été lié au contexte actuel.
Remarque : cette fonction n’est prise en charge sous OpenGL ES 2.0 ou versions antérieures que si l’extension GL_OES_mapbuffer est présente.
Remarque : sous OpenGL ES 3.0 et versions ultérieures, ou dans le cas d’OpenGL pour ordinateur de bureau, si l’ GL_ARB_map_buffer_range est prise en charge, cette fonction utilise ` glMapBufferRange ` au lieu de ` glMapBuffer`.
Voir également unmap(), create(), bind() et mapRange().
void *QOpenGLBuffer::mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access)
Mappe la plage spécifiée par offset et count du contenu de ce tampon dans l'espace mémoire de l'application et renvoie un pointeur vers celle-ci. Renvoie null si le mappage en mémoire n'est pas possible. Le paramètre access spécifie une combinaison d'indicateurs d'accès.
On suppose que la fonction create() a été appelée sur ce tampon et que celui-ci a été lié au contexte actuel.
Remarque : cette fonction n’est pas disponible sous OpenGL ES 2.0 et versions antérieures.
Voir également unmap(), create() et bind().
bool QOpenGLBuffer::read(int offset, void *data, int count)
Lit les octets de l'count s contenus dans ce tampon, en commençant à l'adresse offset, et les stocke dans data. Renvoie true en cas de succès ; false si la lecture à partir du tampon n'est pas prise en charge. La lecture à partir d'un tampon n'est pas prise en charge sous OpenGL/ES.
On suppose que ce tampon a été lié au contexte actuel.
Voir également write() et bind().
void QOpenGLBuffer::release()
Libère le tampon associé à cet objet du contexte OpenGL actuel.
Cette fonction doit être appelée avec le même paramètre « QOpenGLContext » que celui utilisé lors de l'appel de la fonction « bind()» sur le tampon.
Voir également bind().
[static] void QOpenGLBuffer::release(QOpenGLBuffer::Type type)
Libère le tampon associé à type dans l'QOpenGLContext.
Cette fonction est un appel direct à glBindBuffer(type, 0); elle est destinée à être utilisée lorsque l’appelant ne sait pas quelle QOpenGLBuffer a été liée au contexte, mais souhaite s’assurer qu’elle est libérée.
QOpenGLBuffer::release(QOpenGLBuffer::VertexBuffer);void QOpenGLBuffer::setUsagePattern(QOpenGLBuffer::UsagePattern value)
Définit le modèle d'utilisation de cet objet tampon sur « value ». Cette fonction doit être appelée avant allocate() ou write().
Voir également usagePattern(), allocate() et write().
int QOpenGLBuffer::size() const
Renvoie la taille des données contenues dans ce tampon, pour les opérations de lecture. Renvoie -1 si la récupération de la taille du tampon n'est pas prise en charge ou si le tampon n'a pas été créé.
On suppose que ce tampon a été associé au contexte courant.
Voir également isCreated() et bind().
[noexcept, since 6.5] void QOpenGLBuffer::swap(QOpenGLBuffer &other)
Permute ce tampon avec celui de other. Cette opération est très rapide et ne rencontre jamais d'échec.
Cette fonction a été introduite dans Qt 6.5.
QOpenGLBuffer::Type QOpenGLBuffer::type() const
Renvoie le type du tampon représenté par cet objet.
bool QOpenGLBuffer::unmap()
Démappe le tampon après qu’il a été mappé dans l’espace mémoire de l’application à la suite d’un appel précédent à la fonction ` map()`. Renvoie ` true ` si le démappage a réussi ; `false` dans le cas contraire.
On suppose que ce tampon a été lié au contexte actuel et qu’il a été préalablement mappé à l’aide de la fonction ` map()`.
Remarque : cette fonction n’est prise en charge sous OpenGL ES 2.0 et versions antérieures que si l’extension GL_OES_mapbuffer est présente.
Voir également map().
QOpenGLBuffer::UsagePattern QOpenGLBuffer::usagePattern() const
Renvoie le modèle d'utilisation de cet objet tampon. La valeur par défaut est StaticDraw.
Voir aussi setUsagePattern().
void QOpenGLBuffer::write(int offset, const void *data, int count)
Remplace les count octets de ce tampon, à partir de l'adresse offset, par le contenu de data. Tous les autres octets du tampon resteront inchangés.
On suppose que la fonction ` create()` a été appelée sur ce tampon et que celui-ci a été associé au contexte courant.
Voir également create(), read() et allocate().
[noexcept, since 6.5] QOpenGLBuffer &QOpenGLBuffer::operator=(QOpenGLBuffer &&other)
Cette opération attribue other à cette instance de QOpenGLBuffer.
Remarque : l’objet d’origine other est placé dans un état partiellement formé, dans lequel les seules opérations valides sont la destruction et l’affectation d’une nouvelle valeur.
Cette fonction a été introduite dans Qt 6.5.
QOpenGLBuffer &QOpenGLBuffer::operator=(const QOpenGLBuffer &other)
Attribue une copie superficielle de other à cet objet.
Remarque : ` QOpenGLBuffer ` n'implémente pas la sémantique « copy-on-write » ; par conséquent, ` other ` sera affecté dès que la copie sera modifiée.
© 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.