QOpenGLBuffer Class
La classe QOpenGLBuffer fournit des fonctions pour créer et gérer des objets tampons OpenGL. Plus d'informations...
| 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 de Rendering in 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 puisse éviter de télécharger des vertices, des indices, des données d'image de texture, etc. à chaque fois qu'ils sont nécessaires.
Les objets QOpenGLBuffer peuvent être copiés comme une 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 de copie en écriture. L'objet original sera affecté chaque fois que la copie sera modifiée.
Documentation des types de membres
enum QOpenGLBuffer::Access
Cette énumération définit le mode d'accès à QOpenGLBuffer::map().
| Constante | Valeur | Description du mode d'accès |
|---|---|---|
QOpenGLBuffer::ReadOnly | 0x88B8 | La mémoire tampon sera mappée pour la lecture uniquement. |
QOpenGLBuffer::WriteOnly | 0x88B9 | La mémoire tampon sera mappée pour l'écriture uniquement. |
QOpenGLBuffer::ReadWrite | 0x88BA | La mémoire tampon sera mappée pour la lecture et l'écriture. |
enum QOpenGLBuffer::RangeAccessFlag
flags QOpenGLBuffer::RangeAccessFlags
Cette énumération définit les bits du mode d'accès pour QOpenGLBuffer::mapRange().
| Constante | Valeur | Description du mode d'accès |
|---|---|---|
QOpenGLBuffer::RangeRead | 0x0001 | Le tampon sera mappé pour la lecture. |
QOpenGLBuffer::RangeWrite | 0x0002 | La mémoire tampon sera mise en correspondance pour l'écriture. |
QOpenGLBuffer::RangeInvalidate | 0x0004 | Rejeter le contenu précédent de la plage spécifiée. |
QOpenGLBuffer::RangeInvalidateBuffer | 0x0008 | Rejeter le contenu précédent de l'ensemble du tampon. |
QOpenGLBuffer::RangeFlushExplicit | 0x0010 | Indique que les modifications doivent être vidées explicitement via glFlushMappedBufferRange. |
QOpenGLBuffer::RangeUnsynchronized | 0x0020 | Indique que les opérations en attente ne doivent pas être synchronisées avant le retour de mapRange(). |
Le type RangeAccessFlags est un 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 QOpenGLBuffer.
| Constante | Valeur | Description |
|---|---|---|
QOpenGLBuffer::VertexBuffer | 0x8892 | Objet tampon de sommet à utiliser lors de la spécification de tableaux de sommets. |
QOpenGLBuffer::IndexBuffer | 0x8893 | Objet tampon d'index à utiliser avec glDrawElements(). |
QOpenGLBuffer::PixelPackBuffer | 0x88EB | Objet tampon de paquet de pixels pour la lecture des données de pixels à partir du serveur OpenGL (par exemple, avec glReadPixels()). Non pris en charge sous OpenGL/ES. |
QOpenGLBuffer::PixelUnpackBuffer | 0x88EC | Objet tampon de déballage de pixels pour écrire des données de pixels sur le serveur OpenGL (par exemple, avec glTexImage2D()). Non supporté sous OpenGL/ES. |
enum QOpenGLBuffer::UsagePattern
Cette énumération définit le modèle d'utilisation d'un objet QOpenGLBuffer.
| Constante | Valeur | Description de l'objet |
|---|---|---|
QOpenGLBuffer::StreamDraw | 0x88E0 | Les données seront définies une fois et utilisées plusieurs fois pour les opérations de dessin. Sous OpenGL/ES 1.1, ceci est identique à StaticDraw. |
QOpenGLBuffer::StreamRead | 0x88E1 | Les données seront définies une fois et utilisées plusieurs fois pour lire les données du serveur OpenGL. Non supporté sous OpenGL/ES. |
QOpenGLBuffer::StreamCopy | 0x88E2 | Les données seront définies une fois et utilisées plusieurs fois pour lire les données du serveur OpenGL afin de les utiliser dans d'autres opérations de dessin. Non supporté sous OpenGL/ES. |
QOpenGLBuffer::StaticDraw | 0x88E4 | Les données seront définies une fois et utilisées plusieurs fois pour des opérations de dessin. |
QOpenGLBuffer::StaticRead | 0x88E5 | Les données seront définies une fois et utilisées plusieurs fois pour lire les données du serveur OpenGL. Non supporté sous OpenGL/ES. |
QOpenGLBuffer::StaticCopy | 0x88E6 | Les données seront définies une fois et utilisées plusieurs fois pour lire les données du serveur OpenGL afin de les utiliser dans d'autres opérations de dessin. Non supporté par OpenGL/ES. |
QOpenGLBuffer::DynamicDraw | 0x88E8 | Les données seront modifiées à plusieurs reprises et utilisées plusieurs fois pour des opérations de dessin. |
QOpenGLBuffer::DynamicRead | 0x88E9 | Les données seront modifiées à plusieurs reprises et utilisées de nombreuses fois pour lire les données du serveur OpenGL. Non pris en charge par OpenGL/ES. |
QOpenGLBuffer::DynamicCopy | 0x88EA | Les données seront modifiées à plusieurs reprises et utilisées de nombreuses fois pour lire les données du serveur OpenGL afin de les utiliser dans d'autres opérations de dessin. Non supporté sous OpenGL/ES. |
Documentation des fonctions membres
QOpenGLBuffer::QOpenGLBuffer()
Construit un nouvel objet tampon de type QOpenGLBuffer::VertexBuffer.
Note : ce constructeur ne fait que créer l'instance de QOpenGLBuffer. L'objet tampon réel dans le serveur OpenGL n'est pas créé jusqu'à ce que create() soit appelé.
Voir aussi create().
[explicit] QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer::Type type)
Construit un nouvel objet tampon de type.
Note : ce constructeur ne fait que créer l'instance de QOpenGLBuffer. L'objet tampon réel dans le serveur OpenGL n'est pas créé jusqu'à ce que create() soit appelé.
Voir aussi create().
QOpenGLBuffer::QOpenGLBuffer(const QOpenGLBuffer &other)
Construit une copie superficielle de other.
Note : QOpenGLBuffer n'implémente pas la sémantique de copie sur écriture, donc other sera affecté chaque fois que la copie sera modifiée.
[noexcept, since 6.5] QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer &&other)
Move-construit un nouveau QOpenGLBuffer à partir de other.
Note : L'objet déplacé other est placé dans un état partiellement formé, dans lequel les seules opérations valides sont la destruction et l'assignation d'une nouvelle valeur.
Cette fonction a été introduite dans Qt 6.5.
[noexcept] QOpenGLBuffer::~QOpenGLBuffer()
Détruit cet objet tampon, y compris le stockage 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 antérieur sera supprimé.
On suppose que create() a été appelé sur ce tampon et qu'il a été lié au contexte actuel.
Voir aussi create(), read(), et write().
void QOpenGLBuffer::allocate(int count)
Alloue count octets d'espace au tampon. Tout contenu antérieur sera supprimé.
Il est supposé que create() a été appelé sur ce tampon et qu'il a été lié au contexte actuel.
Il s'agit d'une fonction surchargée.
Voir aussi create() et write().
bool QOpenGLBuffer::bind()
Relie le tampon associé à cet objet au contexte OpenGL actuel. Retourne false si la liaison n'a pas été possible, généralement parce que type() n'est pas supporté par cette implémentation OpenGL.
Le tampon doit être lié au même QOpenGLContext courant lorsque create() a été appelé, ou à un autre QOpenGLContext qui partage avec lui. Sinon, cette fonction renverra false.
Voir aussi 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 aussi isCreated().
bool QOpenGLBuffer::create()
Crée l'objet tampon dans le serveur OpenGL. Retourne true si l'objet a été créé, false sinon.
Cette fonction doit être appelée avec un contexte courant QOpenGLContext. Le tampon sera lié à ce contexte et ne pourra être utilisé que dans ce contexte (ou tout autre contexte partagé avec lui).
Cette fonction renverra false si l'implémentation OpenGL ne supporte pas les tampons, ou s'il n'y a pas de contexte courant QOpenGLContext.
Voir aussi isCreated(), allocate(), write(), et destroy().
void QOpenGLBuffer::destroy()
Détruit cet objet tampon, y compris le stockage utilisé dans le serveur OpenGL. Toutes les références au tampon deviendront invalides.
bool QOpenGLBuffer::isCreated() const
Renvoie true si ce tampon a été créé, false sinon.
Voir aussi create() et destroy().
void *QOpenGLBuffer::map(QOpenGLBuffer::Access access)
Transfère le contenu de ce tampon dans l'espace mémoire de l'application et renvoie un pointeur vers ce tampon. Retourne null si le mappage de la mémoire n'est pas possible. Le paramètre access indique le type d'accès à effectuer.
Il est supposé que create() a été appelé sur ce tampon et qu'il a été lié au contexte actuel.
Note : Cette fonction n'est supportée que sous OpenGL ES 2.0 ou antérieur si l'extension GL_OES_mapbuffer est présente.
Note : Sur OpenGL ES 3.0 et plus récent, ou, dans le cas d'OpenGL de bureau, si GL_ARB_map_buffer_range est supporté, cette fonction utilise glMapBufferRange au lieu de glMapBuffer.
Voir aussi unmap(), create(), bind() et mapRange().
void *QOpenGLBuffer::mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access)
Met en correspondance la plage spécifiée par offset et count du contenu de ce tampon avec l'espace mémoire de l'application et renvoie un pointeur sur celui-ci. Retourne null si le mappage de la mémoire n'est pas possible. Le paramètre access spécifie une combinaison de drapeaux d'accès.
Il est supposé que create() a été appelé sur ce tampon et qu'il a été lié au contexte actuel.
Note : Cette fonction n'est pas disponible sur OpenGL ES 2.0 et antérieur.
Voir aussi unmap(), create(), et bind().
bool QOpenGLBuffer::read(int offset, void *data, int count)
Lit les count octets de ce tampon à partir de offset dans data. Retourne true en cas de succès ; false si la lecture du tampon n'est pas prise en charge. La lecture du tampon n'est pas supportée par OpenGL/ES.
Il est supposé que ce tampon a été lié au contexte actuel.
void QOpenGLBuffer::release()
Libère le tampon associé à cet objet du contexte OpenGL actuel.
Cette fonction doit être appelée avec le même courant QOpenGLContext que lorsque bind() a été appelé sur le tampon.
Voir aussi bind().
[static] void QOpenGLBuffer::release(QOpenGLBuffer::Type type)
Libère le tampon associé à type dans le contexte actuel QOpenGLContext.
Cette fonction est un appel direct à glBindBuffer(type, 0), à utiliser lorsque l'appelant ne sait pas quel QOpenGLBuffer a été lié au contexte et qu'il veut s'assurer qu'il est libéré.
QOpenGLBuffer::release(QOpenGLBuffer::VertexBuffer);
void QOpenGLBuffer::setUsagePattern(QOpenGLBuffer::UsagePattern value)
Définit le modèle d'utilisation de cet objet tampon à value. Cette fonction doit être appelée avant allocate() ou write().
Voir aussi 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 possible ou si le tampon n'a pas été créé.
Il est supposé que ce tampon a été lié au contexte actuel.
Voir aussi isCreated() et bind().
[noexcept, since 6.5] void QOpenGLBuffer::swap(QOpenGLBuffer &other)
Remplace ce tampon par other. Cette opération est très rapide et n'échoue jamais.
Cette fonction a été introduite dans Qt 6.5.
QOpenGLBuffer::Type QOpenGLBuffer::type() const
Renvoie le type de tampon représenté par cet objet.
bool QOpenGLBuffer::unmap()
Déplace le tampon après qu'il a été placé dans l'espace mémoire de l'application lors d'un appel précédent à map(). Retourne true si la désimplantation a réussi, false dans le cas contraire.
Il est supposé que ce tampon a été lié au contexte actuel et qu'il a été précédemment mappé avec map().
Note : Cette fonction n'est supportée que sous OpenGL ES 2.0 et antérieur si l'extension GL_OES_mapbuffer est présente.
Voir aussi 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 octets count de ce tampon commençant à offset par le contenu de data. Les autres octets du tampon ne seront pas modifiés.
On suppose que create() a été appelé sur ce tampon et qu'il a été lié au contexte actuel.
Voir aussi create(), read() et allocate().
[noexcept, since 6.5] QOpenGLBuffer &QOpenGLBuffer::operator=(QOpenGLBuffer &&other)
Move-assigne other à cette instance QOpenGLBuffer.
Remarque : l'objet déplacé other est placé dans un état partiellement formé, dans lequel les seules opérations valables sont la destruction et l'attribution 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 de la copie sur l'écriture, de sorte que other sera affecté chaque fois 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.