QOpenGLBuffer Class
Die Klasse QOpenGLBuffer bietet Funktionen zur Erstellung und Verwaltung von OpenGL-Pufferobjekten. Mehr...
Kopfzeile: | #include <QOpenGLBuffer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
qmake: | QT += opengl |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QOpenGLBuffer ist Teil von Rendering in 3D.
Öffentliche Typen
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 } |
Öffentliche Funktionen
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) |
Statische öffentliche Mitglieder
void | release(QOpenGLBuffer::Type type) |
Detaillierte Beschreibung
Buffer-Objekte werden im OpenGL-Server erstellt, damit die Client-Anwendung nicht jedes Mal Vertices, Indizes, Texturbilddaten usw. hochladen muss, wenn sie benötigt werden.
QOpenGLBuffer-Objekte können als Referenz auf das zugrundeliegende OpenGL-Buffer-Objekt kopiert werden:
QOpenGLBuffer buffer1(QOpenGLBuffer::IndexBuffer); buffer1.create(); QOpenGLBuffer buffer2 = buffer1;
QOpenGLBuffer führt eine flache Kopie durch, wenn Objekte auf diese Weise kopiert werden, implementiert aber keine copy-on-write Semantik. Das ursprüngliche Objekt wird immer dann betroffen sein, wenn die Kopie verändert wird.
Dokumentation der Mitgliedstypen
enum QOpenGLBuffer::Access
Diese Aufzählung definiert den Zugriffsmodus für QOpenGLBuffer::map().
Konstante | Wert | Beschreibung |
---|---|---|
QOpenGLBuffer::ReadOnly | 0x88B8 | Der Puffer wird nur zum Lesen abgebildet. |
QOpenGLBuffer::WriteOnly | 0x88B9 | Der Puffer wird nur zum Schreiben abgebildet. |
QOpenGLBuffer::ReadWrite | 0x88BA | Der Puffer wird zum Lesen und Schreiben zugeordnet. |
enum QOpenGLBuffer::RangeAccessFlag
flags QOpenGLBuffer::RangeAccessFlags
Dieses Enum definiert die Zugriffsmodus-Bits für QOpenGLBuffer::mapRange().
Konstante | Wert | Beschreibung |
---|---|---|
QOpenGLBuffer::RangeRead | 0x0001 | Der Puffer wird zum Lesen abgebildet. |
QOpenGLBuffer::RangeWrite | 0x0002 | Der Puffer wird zum Schreiben abgebildet. |
QOpenGLBuffer::RangeInvalidate | 0x0004 | Verwirft den vorherigen Inhalt des angegebenen Bereichs. |
QOpenGLBuffer::RangeInvalidateBuffer | 0x0008 | Verwirft den vorherigen Inhalt des gesamten Puffers. |
QOpenGLBuffer::RangeFlushExplicit | 0x0010 | Gibt an, dass Änderungen explizit über glFlushMappedBufferRange gespült werden sollen. |
QOpenGLBuffer::RangeUnsynchronized | 0x0020 | Zeigt an, dass anstehende Operationen nicht synchronisiert werden sollen, bevor mapRange() zurückkehrt. |
Der Typ RangeAccessFlags ist ein Typedef für QFlags<RangeAccessFlag>. Er speichert eine ODER-Kombination von RangeAccessFlag-Werten.
enum QOpenGLBuffer::Type
Diese Aufzählung definiert den Typ des OpenGL-Pufferobjekts, das mit QOpenGLBuffer erstellt wird.
Konstante | Wert | Beschreibung |
---|---|---|
QOpenGLBuffer::VertexBuffer | 0x8892 | Vertex-Pufferobjekt zur Verwendung bei der Angabe von Vertex-Arrays. |
QOpenGLBuffer::IndexBuffer | 0x8893 | Index-Puffer-Objekt für die Verwendung mit glDrawElements() . |
QOpenGLBuffer::PixelPackBuffer | 0x88EB | Pixelpack-Pufferobjekt zum Lesen von Pixeldaten vom OpenGL-Server (z. B. mit glReadPixels() ). Nicht unterstützt unter OpenGL/ES. |
QOpenGLBuffer::PixelUnpackBuffer | 0x88EC | Pixel-Unpack-Puffer-Objekt zum Schreiben von Pixeldaten in den OpenGL-Server (z. B. mit glTexImage2D() ). Wird unter OpenGL/ES nicht unterstützt. |
enum QOpenGLBuffer::UsagePattern
Diese Aufzählung definiert das Verwendungsmuster eines QOpenGLBuffer Objekts.
Konstante | Wert | Beschreibung |
---|---|---|
QOpenGLBuffer::StreamDraw | 0x88E0 | Die Daten werden einmal gesetzt und einige Male für Zeichenoperationen verwendet. Unter OpenGL/ES 1.1 ist dies identisch mit StaticDraw. |
QOpenGLBuffer::StreamRead | 0x88E1 | Die Daten werden einmal gesetzt und ein paar Mal für das Zurücklesen von Daten vom OpenGL-Server verwendet. Nicht unterstützt unter OpenGL/ES. |
QOpenGLBuffer::StreamCopy | 0x88E2 | Die Daten werden einmal gesetzt und einige Male für das Zurücklesen von Daten vom OpenGL-Server zur Verwendung in weiteren Zeichenoperationen verwendet. Nicht unterstützt unter OpenGL/ES. |
QOpenGLBuffer::StaticDraw | 0x88E4 | Die Daten werden einmal gesetzt und viele Male für Zeichenoperationen verwendet. |
QOpenGLBuffer::StaticRead | 0x88E5 | Die Daten werden einmal gesetzt und viele Male für das Zurücklesen von Daten vom OpenGL-Server verwendet. Nicht unterstützt unter OpenGL/ES. |
QOpenGLBuffer::StaticCopy | 0x88E6 | Die Daten werden einmal gesetzt und viele Male für das Zurücklesen von Daten vom OpenGL-Server zur Verwendung in weiteren Zeichenoperationen verwendet. Nicht unterstützt unter OpenGL/ES. |
QOpenGLBuffer::DynamicDraw | 0x88E8 | Die Daten werden wiederholt geändert und viele Male für Zeichenoperationen verwendet. |
QOpenGLBuffer::DynamicRead | 0x88E9 | Die Daten werden wiederholt modifiziert und viele Male zum Zurücklesen von Daten vom OpenGL-Server verwendet. Nicht unterstützt unter OpenGL/ES. |
QOpenGLBuffer::DynamicCopy | 0x88EA | Die Daten werden wiederholt geändert und viele Male für das Zurücklesen von Daten vom OpenGL-Server zur Verwendung in weiteren Zeichenoperationen verwendet. Wird unter OpenGL/ES nicht unterstützt. |
Dokumentation der Mitgliedsfunktionen
QOpenGLBuffer::QOpenGLBuffer()
Konstruiert ein neues Pufferobjekt vom Typ QOpenGLBuffer::VertexBuffer.
Hinweis: Dieser Konstruktor erzeugt nur die QOpenGLBuffer-Instanz. Das eigentliche Pufferobjekt im OpenGL-Server wird erst nach dem Aufruf von create() erstellt.
Siehe auch create().
[explicit]
QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer::Type type)
Konstruiert ein neues Pufferobjekt von type.
Hinweis: Dieser Konstruktor erzeugt nur die QOpenGLBuffer-Instanz. Das eigentliche Pufferobjekt im OpenGL-Server wird erst nach dem Aufruf von create() erstellt.
Siehe auch create().
QOpenGLBuffer::QOpenGLBuffer(const QOpenGLBuffer &other)
Konstruiert eine flache Kopie von other.
Hinweis: QOpenGLBuffer implementiert keine Copy-on-Write-Semantik, so dass other immer dann betroffen ist, wenn die Kopie verändert wird.
[noexcept, since 6.5]
QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer &&other)
Move-konstruiert einen neuen QOpenGLBuffer aus other.
Hinweis: Das verschobene Objekt other wird in einen teilweise gebildeten Zustand versetzt, in dem die einzigen gültigen Operationen Zerstörung und Zuweisung eines neuen Wertes sind.
Diese Funktion wurde in Qt 6.5 eingeführt.
[noexcept]
QOpenGLBuffer::~QOpenGLBuffer()
Zerstört dieses Pufferobjekt, einschließlich des im OpenGL-Server verwendeten Speichers.
void QOpenGLBuffer::allocate(const void *data, int count)
Weist dem Puffer count Bytes Speicherplatz zu, der mit dem Inhalt von data initialisiert wird. Alle vorherigen Inhalte werden entfernt.
Es wird davon ausgegangen, dass create() für diesen Puffer aufgerufen wurde und dass er an den aktuellen Kontext gebunden wurde.
Siehe auch create(), read(), und write().
void QOpenGLBuffer::allocate(int count)
Dies ist eine überladene Funktion.
Weist dem Puffer count Bytes an Speicherplatz zu. Alle vorherigen Inhalte werden entfernt.
Es wird angenommen, dass create() für diesen Puffer aufgerufen wurde und dass er an den aktuellen Kontext gebunden ist.
Siehe auch create() und write().
bool QOpenGLBuffer::bind()
Bindet den mit diesem Objekt verbundenen Puffer an den aktuellen OpenGL-Kontext. Gibt false
zurück, wenn die Bindung nicht möglich war, normalerweise weil type() von dieser OpenGL-Implementierung nicht unterstützt wird.
Der Puffer muss an denselben QOpenGLContext gebunden sein, der beim Aufruf von create() aktuell ist, oder an einen anderen QOpenGLContext, der mit ihm geteilt wird. Andernfalls wird false von dieser Funktion zurückgegeben.
Siehe auch release() und create().
GLuint QOpenGLBuffer::bufferId() const
Gibt den OpenGL-Bezeichner zurück, der mit diesem Puffer verbunden ist; Null, wenn der Puffer nicht erstellt wurde.
Siehe auch isCreated().
bool QOpenGLBuffer::create()
Erzeugt das Pufferobjekt im OpenGL-Server. Gibt true
zurück, wenn das Objekt erstellt wurde; andernfalls false.
Diese Funktion muss mit einem aktuellen QOpenGLContext aufgerufen werden. Der Puffer wird an diesen Kontext gebunden und kann nur in diesem verwendet werden (oder in einem anderen Kontext, der mit ihm geteilt wird).
Diese Funktion gibt false zurück, wenn die OpenGL-Implementierung keine Puffer unterstützt oder wenn es keinen aktuellen QOpenGLContext gibt.
Siehe auch isCreated(), allocate(), write(), und destroy().
void QOpenGLBuffer::destroy()
Zerstört dieses Pufferobjekt, einschließlich des im OpenGL-Server verwendeten Speichers. Alle Verweise auf den Puffer werden ungültig.
bool QOpenGLBuffer::isCreated() const
Gibt true
zurück, wenn dieser Puffer erstellt wurde; andernfalls false.
Siehe auch create() und destroy().
void *QOpenGLBuffer::map(QOpenGLBuffer::Access access)
Ordnet den Inhalt dieses Puffers in den Speicherbereich der Anwendung ein und gibt einen Zeiger darauf zurück. Gibt null zurück, wenn eine Speicherzuordnung nicht möglich ist. Der Parameter access gibt die Art des Zugriffs an, der durchgeführt werden soll.
Es wird davon ausgegangen, dass create() für diesen Puffer aufgerufen wurde und dass er an den aktuellen Kontext gebunden wurde.
Hinweis: Diese Funktion wird nur unter OpenGL ES 2.0 oder früher unterstützt, wenn die Erweiterung GL_OES_mapbuffer
vorhanden ist.
Hinweis: Unter OpenGL ES 3.0 und neuer oder, im Falle von Desktop OpenGL, wenn GL_ARB_map_buffer_range
unterstützt wird, verwendet diese Funktion glMapBufferRange
anstelle von glMapBuffer
.
Siehe auch unmap(), create(), bind(), und mapRange().
void *QOpenGLBuffer::mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access)
Bildet den durch offset und count angegebenen Bereich des Inhalts dieses Puffers in den Speicherbereich der Anwendung ab und gibt einen Zeiger darauf zurück. Gibt null zurück, wenn die Speicherzuordnung nicht möglich ist. Der Parameter access gibt eine Kombination von Zugriffsflags an.
Es wird davon ausgegangen, dass create() für diesen Puffer aufgerufen wurde und dass er an den aktuellen Kontext gebunden wurde.
Hinweis: Diese Funktion ist unter OpenGL ES 2.0 und früher nicht verfügbar.
Siehe auch unmap(), create(), und bind().
bool QOpenGLBuffer::read(int offset, void *data, int count)
Liest die count Bytes in diesem Puffer beginnend bei offset in data. Gibt bei Erfolg true
zurück; false, wenn das Lesen aus dem Puffer nicht unterstützt wird. Das Lesen von Puffern wird unter OpenGL/ES nicht unterstützt.
Es wird angenommen, dass dieser Puffer an den aktuellen Kontext gebunden wurde.
Siehe auch write() und bind().
void QOpenGLBuffer::release()
Gibt den mit diesem Objekt verbundenen Puffer aus dem aktuellen OpenGL-Kontext frei.
Diese Funktion muss mit demselben QOpenGLContext current aufgerufen werden, mit dem bind() für den Puffer aufgerufen wurde.
Siehe auch bind().
[static]
void QOpenGLBuffer::release(QOpenGLBuffer::Type type)
Gibt den mit type verbundenen Puffer im aktuellen QOpenGLContext frei.
Diese Funktion ist ein direkter Aufruf von glBindBuffer(type, 0)
für den Fall, dass der Aufrufer nicht weiß, welcher QOpenGLBuffer an den Kontext gebunden ist, aber sicherstellen will, dass er freigegeben wird.
QOpenGLBuffer::release(QOpenGLBuffer::VertexBuffer);
void QOpenGLBuffer::setUsagePattern(QOpenGLBuffer::UsagePattern value)
Setzt das Verwendungsmuster für dieses Pufferobjekt auf value. Diese Funktion muss vor allocate() oder write() aufgerufen werden.
Siehe auch usagePattern(), allocate(), und write().
int QOpenGLBuffer::size() const
Gibt die Größe der Daten in diesem Puffer für Lesevorgänge zurück. Gibt -1 zurück, wenn das Abrufen der Puffergröße nicht unterstützt wird oder der Puffer nicht erstellt wurde.
Es wird angenommen, dass dieser Puffer an den aktuellen Kontext gebunden wurde.
Siehe auch isCreated() und bind().
[noexcept, since 6.5]
void QOpenGLBuffer::swap(QOpenGLBuffer &other)
Tauscht diesen Puffer mit other aus. Dieser Vorgang ist sehr schnell und schlägt nie fehl.
Diese Funktion wurde in Qt 6.5 eingeführt.
QOpenGLBuffer::Type QOpenGLBuffer::type() const
Gibt den Typ des Puffers zurück, der durch dieses Objekt repräsentiert wird.
bool QOpenGLBuffer::unmap()
Hebt die Zuordnung des Puffers auf, nachdem er mit einem früheren Aufruf von map() in den Speicherbereich der Anwendung eingeordnet wurde. Gibt true
zurück, wenn das Unmap erfolgreich war; andernfalls false.
Es wird davon ausgegangen, dass dieser Puffer an den aktuellen Kontext gebunden wurde und dass er zuvor mit map() abgebildet wurde.
Hinweis: Diese Funktion wird nur unter OpenGL ES 2.0 und früher unterstützt, wenn die Erweiterung GL_OES_mapbuffer
vorhanden ist.
Siehe auch map().
QOpenGLBuffer::UsagePattern QOpenGLBuffer::usagePattern() const
Gibt das Verwendungsmuster für dieses Pufferobjekt zurück. Der Standardwert ist StaticDraw.
Siehe auch setUsagePattern().
void QOpenGLBuffer::write(int offset, const void *data, int count)
Ersetzt die count Bytes dieses Puffers ab offset durch den Inhalt von data. Alle anderen Bytes im Puffer werden nicht verändert.
Es wird davon ausgegangen, dass create() für diesen Puffer aufgerufen wurde und dass er an den aktuellen Kontext gebunden wurde.
Siehe auch create(), read(), und allocate().
[noexcept, since 6.5]
QOpenGLBuffer &QOpenGLBuffer::operator=(QOpenGLBuffer &&other)
Verschieben - weist other dieser QOpenGLBuffer Instanz zu.
Hinweis: Das verschobene Objekt other wird in einen teilweise gebildeten Zustand versetzt, in dem die einzigen gültigen Operationen Zerstörung und Zuweisung eines neuen Wertes sind.
Diese Funktion wurde in Qt 6.5 eingeführt.
QOpenGLBuffer &QOpenGLBuffer::operator=(const QOpenGLBuffer &other)
Weist diesem Objekt eine oberflächliche Kopie von other zu.
Hinweis: QOpenGLBuffer implementiert keine Copy-on-Write-Semantik, so dass other immer dann betroffen ist, wenn die Kopie geändert wird.
© 2025 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.