Auf dieser Seite

QOpenGLBuffer Class

Die Klasse „QOpenGLBuffer“ bietet Funktionen zum Erstellen und Verwalten von OpenGL-Pufferobjekten. Mehr...

Header: #include <QOpenGLBuffer>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpenGL)
target_link_libraries(mytarget PRIVATE Qt6::OpenGL)
qmake: QT += opengl

Ö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)

Ausführliche Beschreibung

Pufferobjekte werden im OpenGL-Server erstellt, damit die Client-Anwendung vermeiden kann, Vertices, Indizes, Texturbilddaten usw. jedes Mal hochzuladen, wenn sie benötigt werden.

QOpenGLBuffer-Objekte können als Referenz auf das zugrunde liegende OpenGL-Pufferobjekt kopiert werden:

QOpenGLBuffer buffer1(QOpenGLBuffer::IndexBuffer);
buffer1.create();

QOpenGLBuffer buffer2 = buffer1;

QOpenGLBuffer führt bei dieser Art des Kopierens eine flache Kopie durch, implementiert jedoch keine „Copy-on-Write“-Semantik. Das Originalobjekt wird jedes Mal beeinflusst, wenn die Kopie geändert wird.

Warnung: Es wird erwartet, dassalle von QOpenGLBuffer verwendeten Daten vertrauenswürdige Inhalte sind. Pufferdaten werden an die zugrunde liegende OpenGL-Implementierung weitergegeben. Anwendungsentwicklern wird empfohlen, die möglichen Auswirkungen sorgfältig abzuwägen, bevor sie vom Benutzer bereitgestellte Inhalte an Funktionen wie ` allocate()` und ` write()` übergeben.

Dokumentation zu den Mitgliedstypen

enum QOpenGLBuffer::Access

Diese Enumeration definiert den Zugriffsmodus für die Funktion „ QOpenGLBuffer::map()“.

KonstanteWertBeschreibung
QOpenGLBuffer::ReadOnly0x88B8Der Puffer wird nur zum Lesen zugeordnet.
QOpenGLBuffer::WriteOnly0x88B9Der Puffer wird nur zum Schreiben zugeordnet.
QOpenGLBuffer::ReadWrite0x88BADer Puffer wird sowohl zum Lesen als auch zum Schreiben zugeordnet.

enum QOpenGLBuffer::RangeAccessFlag
flags QOpenGLBuffer::RangeAccessFlags

Diese Enumeration definiert die Bits für den Zugriffsmodus der Funktion „ QOpenGLBuffer::mapRange()“.

KonstanteWertBeschreibung
QOpenGLBuffer::RangeRead0x0001Der Puffer wird zum Lesen zugeordnet.
QOpenGLBuffer::RangeWrite0x0002Der Puffer wird zum Schreiben zugeordnet.
QOpenGLBuffer::RangeInvalidate0x0004Der bisherige Inhalt des angegebenen Bereichs wird verworfen.
QOpenGLBuffer::RangeInvalidateBuffer0x0008Der bisherige Inhalt des gesamten Puffers wird verworfen.
QOpenGLBuffer::RangeFlushExplicit0x0010Gibt an, dass Änderungen explizit über ` glFlushMappedBufferRange` übertragen werden sollen.
QOpenGLBuffer::RangeUnsynchronized0x0020Gibt an, dass ausstehende Operationen vor der Rückkehr aus ` mapRange()` nicht synchronisiert werden sollen.

Der Typ `RangeAccessFlags` ist ein `typedef` für ` QFlags<RangeAccessFlag>`. Er speichert eine ODER-Kombination von `RangeAccessFlag`-Werten.

enum QOpenGLBuffer::Type

Diese Enumeration definiert den Typ des OpenGL-Pufferobjekts, das mit ` QOpenGLBuffer` erstellt werden soll.

KonstanteWertBeschreibung
QOpenGLBuffer::VertexBuffer0x8892Vertex-Pufferobjekt zur Verwendung bei der Angabe von Vertex-Arrays.
QOpenGLBuffer::IndexBuffer0x8893Index-Pufferobjekt zur Verwendung mit ` glDrawElements()`.
QOpenGLBuffer::PixelPackBuffer0x88EBPixel-Pack-Buffer-Objekt zum Lesen von Pixeldaten vom OpenGL-Server (beispielsweise mit ` glReadPixels()`). Wird unter OpenGL/ES nicht unterstützt.
QOpenGLBuffer::PixelUnpackBuffer0x88ECPixel-Unpack-Buffer-Objekt zum Schreiben von Pixeldaten an den OpenGL-Server (z. B. mit ` glTexImage2D()`). Wird unter OpenGL/ES nicht unterstützt.

enum QOpenGLBuffer::UsagePattern

Diese Enumeration definiert das Verwendungsmuster eines Objekts vom Typ „ QOpenGLBuffer “.

KonstanteWertBeschreibung
QOpenGLBuffer::StreamDraw0x88E0Die Daten werden einmal festgelegt und mehrmals für Zeichenvorgänge verwendet. Unter OpenGL/ES 1.1 entspricht dies „StaticDraw“.
QOpenGLBuffer::StreamRead0x88E1Die Daten werden einmal festgelegt und mehrmals zum Zurücklesen von Daten vom OpenGL-Server verwendet. Wird unter OpenGL/ES nicht unterstützt.
QOpenGLBuffer::StreamCopy0x88E2Die Daten werden einmal festgelegt und mehrmals zum Zurücklesen von Daten vom OpenGL-Server verwendet, um diese für weitere Zeichenoperationen zu nutzen. Wird unter OpenGL/ES nicht unterstützt.
QOpenGLBuffer::StaticDraw0x88E4Die Daten werden einmal festgelegt und mehrfach für Zeichenvorgänge verwendet.
QOpenGLBuffer::StaticRead0x88E5Die Daten werden einmal festgelegt und mehrfach zum Zurücklesen von Daten vom OpenGL-Server verwendet. Wird unter OpenGL/ES nicht unterstützt.
QOpenGLBuffer::StaticCopy0x88E6Die Daten werden einmal festgelegt und mehrfach zum Zurücklesen von Daten vom OpenGL-Server verwendet, um diese für weitere Zeichenvorgänge zu nutzen. Wird unter OpenGL/ES nicht unterstützt.
QOpenGLBuffer::DynamicDraw0x88E8Die Daten werden wiederholt geändert und mehrfach für Zeichenvorgänge verwendet.
QOpenGLBuffer::DynamicRead0x88E9Die Daten werden wiederholt geändert und mehrfach zum Zurücklesen von Daten vom OpenGL-Server verwendet. Wird unter OpenGL/ES nicht unterstützt.
QOpenGLBuffer::DynamicCopy0x88EADie Daten werden wiederholt geändert und mehrfach zum Zurücklesen von Daten vom OpenGL-Server verwendet, um diese für weitere Zeichenvorgänge zu nutzen. Wird unter OpenGL/ES nicht unterstützt.

Dokumentation der Mitgliedsfunktionen

QOpenGLBuffer::QOpenGLBuffer()

Erstellt ein neues Pufferobjekt vom Typ ` QOpenGLBuffer::VertexBuffer`.

Hinweis: Dieser Konstruktor erstellt lediglich die QOpenGLBuffer-Instanz. Das eigentliche Pufferobjekt im OpenGL-Server wird erst erstellt, wenn create() aufgerufen wird.

Siehe auch ` create()`.

[explicit] QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer::Type type)

Erstellt ein neues Pufferobjekt vom Typ ` type`.

Hinweis: Dieser Konstruktor erstellt lediglich die QOpenGLBuffer-Instanz. Das eigentliche Pufferobjekt im OpenGL-Server wird erst erstellt, wenn create() aufgerufen wird.

Siehe auch ` create()`.

QOpenGLBuffer::QOpenGLBuffer(const QOpenGLBuffer &other)

Erstellt eine flache Kopie von ` other`.

Hinweis: QOpenGLBuffer implementiert keine „Copy-on-Write“-Semantik, sodass other bei jeder Änderung der Kopie betroffen ist.

[noexcept, since 6.5] QOpenGLBuffer::QOpenGLBuffer(QOpenGLBuffer &&other)

Erstellt mittels „Move“ einen neuen QOpenGLBuffer aus other.

Hinweis: Das Objekt, aus dem die Verschiebung erfolgt ( other ), befindet sich in einem teilweise initialisierten Zustand, in dem nur die Zerstörung und die Zuweisung eines neuen Werts zulässig sind.

Diese Funktion wurde in Qt 6.5 eingeführt.

[noexcept] QOpenGLBuffer::~QOpenGLBuffer()

Löscht 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. Etwaige zuvor vorhandene Inhalte werden entfernt.

Es wird vorausgesetzt, dass für diesen Puffer die Funktion ` create()` aufgerufen wurde und dass er an den aktuellen Kontext gebunden ist.

Siehe auch create(), read() und write().

void QOpenGLBuffer::allocate(int count)

Weist dem Puffer count Bytes Speicherplatz zu. Der bisherige Inhalt wird dabei gelöscht.

Es wird davon ausgegangen, dass für diesen Puffer die Funktion ` create()` aufgerufen wurde und dass er an den aktuellen Kontext gebunden ist.

Dies ist eine überladene Funktion.

Siehe auch ` create()` und ` write()`.

bool QOpenGLBuffer::bind()

Bindet den diesem Objekt zugeordneten Puffer an den aktuellen OpenGL-Kontext. Gibt ` false ` zurück, wenn die Bindung nicht möglich war, was in der Regel daran liegt, dass ` type()` von dieser OpenGL-Implementierung nicht unterstützt wird.

Der Puffer muss an denselben „ QOpenGLContext “ gebunden sein, der zum Zeitpunkt des Aufrufs von ` create()` aktuell war, oder an einen anderen „ QOpenGLContext “, der diesen mit ihm gemeinsam nutzt. Andernfalls gibt diese Funktion „false“ zurück.

Siehe auch „ release()“ und „ create()“.

GLuint QOpenGLBuffer::bufferId() const

Gibt die diesem Puffer zugeordnete OpenGL-Kennung zurück; Null, wenn der Puffer noch nicht angelegt wurde.

Siehe auch „ isCreated()“.

bool QOpenGLBuffer::create()

Erstellt 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 Kontext (oder in jedem anderen Kontext, der mit ihm geteilt wird) verwendet werden.

Diese Funktion gibt „false“ zurück, wenn die OpenGL-Implementierung keine Puffer unterstützt oder kein aktuelles „ QOpenGLContext “ vorhanden ist.

Siehe auch ` isCreated()`, ` allocate()`, ` write()` und ` destroy()`.

void QOpenGLBuffer::destroy()

Löscht dieses Pufferobjekt, einschließlich des im OpenGL-Server belegten Speichers. Alle Verweise auf den Puffer werden ungültig.

bool QOpenGLBuffer::isCreated() const

Gibt „ true “ zurück, wenn dieser Puffer angelegt wurde; andernfalls „false“.

Siehe auch create() und destroy().

void *QOpenGLBuffer::map(QOpenGLBuffer::Access access)

Ordnet den Inhalt dieses Puffers dem Speicherbereich der Anwendung zu 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 durchzuführenden Zugriffs an.

Es wird davon ausgegangen, dass für diesen Puffer die Funktion ` create()` aufgerufen wurde und dass er an den aktuellen Kontext gebunden wurde.

Hinweis: Diese Funktion wird unter OpenGL ES 2.0 oder früher nur unterstützt, wenn die Erweiterung „ GL_OES_mapbuffer “ vorhanden ist.

Hinweis: Unter OpenGL ES 3.0 und neuer oder bei Desktop-OpenGL, sofern „ 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)

Ordnet den durch offset und count angegebenen Bereich des Inhalts dieses Puffers dem Speicherbereich der Anwendung zu 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 für diesen Puffer die Funktion ` create()` aufgerufen wurde und dass er an den aktuellen Kontext gebunden wurde.

Hinweis: Diese Funktion ist unter OpenGL ES 2.0 und früheren Versionen nicht verfügbar.

Siehe auch ` unmap()`, ` create()` und ` bind()`.

bool QOpenGLBuffer::read(int offset, void *data, int count)

Liest die Bytes „ count “ aus 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 aus dem Puffer wird unter OpenGL/ES nicht unterstützt.

Es wird davon ausgegangen, dass dieser Puffer an den aktuellen Kontext gebunden wurde.

Siehe auch „ write()“ und „ bind()“.

void QOpenGLBuffer::release()

Gibt den diesem Objekt zugeordneten Puffer aus dem aktuellen OpenGL-Kontext frei.

Diese Funktion muss mit demselben „ QOpenGLContext “ aufgerufen werden, der beim Aufruf von „ bind()“ für den Puffer verwendet wurde.

Siehe auch ` bind()`.

[static] void QOpenGLBuffer::release(QOpenGLBuffer::Type type)

Gibt den Puffer frei, der mit „ type “ im aktuellen „ QOpenGLContext “ verknüpft ist.

Diese Funktion ist ein direkter Aufruf von ` glBindBuffer(type, 0) ` und wird verwendet, wenn der Aufrufer nicht weiß, welche ` QOpenGLBuffer ` an den Kontext gebunden wurde, aber sicherstellen möchte, dass sie freigegeben wird.

QOpenGLBuffer::release(QOpenGLBuffer::VertexBuffer);

void QOpenGLBuffer::setUsagePattern(QOpenGLBuffer::UsagePattern value)

Legt das Nutzungsmuster für dieses Pufferobjekt auf „ value “ fest. Diese Funktion muss vor dem Aufruf von „ allocate()“ oder „ write()“ aufgerufen werden.

Siehe auch usagePattern(), allocate() und write().

int QOpenGLBuffer::size() const

Gibt bei Lesevorgängen die Größe der Daten in diesem Puffer zurück. Gibt -1 zurück, wenn das Abrufen der Puffergröße nicht unterstützt wird oder der Puffer noch nicht angelegt wurde.

Es wird davon ausgegangen, 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 niemals fehl.

Diese Funktion wurde in Qt 6.5 eingeführt.

QOpenGLBuffer::Type QOpenGLBuffer::type() const

Gibt den Typ des Puffers zurück, den dieses Objekt darstellt.

bool QOpenGLBuffer::unmap()

Hebt die Zuordnung des Puffers auf, nachdem dieser durch einen vorherigen Aufruf von ` map()` in den Speicherbereich der Anwendung eingebunden wurde. Gibt ` true ` zurück, wenn das Aufheben der Zuordnung erfolgreich war; andernfalls `false`.

Es wird davon ausgegangen, dass dieser Puffer an den aktuellen Kontext gebunden wurde und zuvor mit ` map()` zugeordnet wurde.

Hinweis: Diese Funktion wird unter OpenGL ES 2.0 und früheren Versionen nur unterstützt, wenn die Erweiterung „ GL_OES_mapbuffer “ vorhanden ist.

Siehe auch ` map()`.

QOpenGLBuffer::UsagePattern QOpenGLBuffer::usagePattern() const

Gibt das Nutzungsmuster 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, beginnend bei offset, durch den Inhalt von data. Alle anderen Bytes im Puffer bleiben unverändert.

Es wird davon ausgegangen, dass die Funktion „ create()“ für diesen Puffer aufgerufen wurde und dass dieser an den aktuellen Kontext gebunden ist.

Siehe auch create(), read() und allocate().

[noexcept, since 6.5] QOpenGLBuffer &QOpenGLBuffer::operator=(QOpenGLBuffer &&other)

Weist „ other “ dieser Instanz von „ QOpenGLBuffer “ zu.

Hinweis: Das verschobene Objekt other befindet sich in einem teilweise initialisierten Zustand, in dem die einzigen zulässigen Operationen die Zerstörung und die Zuweisung eines neuen Werts sind.

Diese Funktion wurde in Qt 6.5 eingeführt.

QOpenGLBuffer &QOpenGLBuffer::operator=(const QOpenGLBuffer &other)

Weist diesem Objekt eine flache Kopie von ` other ` zu.

Hinweis: „ QOpenGLBuffer “ implementiert keine Copy-on-Write-Semantik, sodass „ other “ bei jeder Änderung der Kopie beeinflusst wird.

© 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.