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

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

KonstanteWertBeschreibung
QOpenGLBuffer::ReadOnly0x88B8Der Puffer wird nur zum Lesen abgebildet.
QOpenGLBuffer::WriteOnly0x88B9Der Puffer wird nur zum Schreiben abgebildet.
QOpenGLBuffer::ReadWrite0x88BADer Puffer wird zum Lesen und Schreiben zugeordnet.

enum QOpenGLBuffer::RangeAccessFlag
flags QOpenGLBuffer::RangeAccessFlags

Dieses Enum definiert die Zugriffsmodus-Bits für QOpenGLBuffer::mapRange().

KonstanteWertBeschreibung
QOpenGLBuffer::RangeRead0x0001Der Puffer wird zum Lesen abgebildet.
QOpenGLBuffer::RangeWrite0x0002Der Puffer wird zum Schreiben abgebildet.
QOpenGLBuffer::RangeInvalidate0x0004Verwirft den vorherigen Inhalt des angegebenen Bereichs.
QOpenGLBuffer::RangeInvalidateBuffer0x0008Verwirft den vorherigen Inhalt des gesamten Puffers.
QOpenGLBuffer::RangeFlushExplicit0x0010Gibt an, dass Änderungen explizit über glFlushMappedBufferRange gespült werden sollen.
QOpenGLBuffer::RangeUnsynchronized0x0020Zeigt 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.

KonstanteWertBeschreibung
QOpenGLBuffer::VertexBuffer0x8892Vertex-Pufferobjekt zur Verwendung bei der Angabe von Vertex-Arrays.
QOpenGLBuffer::IndexBuffer0x8893Index-Puffer-Objekt für die Verwendung mit glDrawElements().
QOpenGLBuffer::PixelPackBuffer0x88EBPixelpack-Pufferobjekt zum Lesen von Pixeldaten vom OpenGL-Server (z. B. mit glReadPixels()). Nicht unterstützt unter OpenGL/ES.
QOpenGLBuffer::PixelUnpackBuffer0x88ECPixel-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.

KonstanteWertBeschreibung
QOpenGLBuffer::StreamDraw0x88E0Die Daten werden einmal gesetzt und einige Male für Zeichenoperationen verwendet. Unter OpenGL/ES 1.1 ist dies identisch mit StaticDraw.
QOpenGLBuffer::StreamRead0x88E1Die 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::StreamCopy0x88E2Die 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::StaticDraw0x88E4Die Daten werden einmal gesetzt und viele Male für Zeichenoperationen verwendet.
QOpenGLBuffer::StaticRead0x88E5Die 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::StaticCopy0x88E6Die 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::DynamicDraw0x88E8Die Daten werden wiederholt geändert und viele Male für Zeichenoperationen verwendet.
QOpenGLBuffer::DynamicRead0x88E9Die Daten werden wiederholt modifiziert und viele Male zum Zurücklesen von Daten vom OpenGL-Server verwendet. Nicht unterstützt unter OpenGL/ES.
QOpenGLBuffer::DynamicCopy0x88EADie 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.