QOpenGLBuffer Class

QOpenGLBufferクラスは、OpenGLバッファ・オブジェクトを作成・管理する関数を提供します。詳細...

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

パブリックタイプ

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 }

パブリック関数

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)

静的パブリックメンバー

void release(QOpenGLBuffer::Type type)

詳細説明

バッファオブジェクトはOpenGLサーバーに作成され、クライアントアプリケーションが頂点、インデックス、テクスチャ画像データなどを必要なたびにアップロードしなくて済むようにします。

QOpenGLBufferオブジェクトは、基礎となるOpenGLバッファオブジェクトへの参照としてコピーすることができます:

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

QOpenGLBuffer buffer2 = buffer1;

QOpenGLBufferは、この方法でオブジェクトがコピーされるときにシャローコピーを実行しますが、コピーオンライトのセマンティクスは実装していません。元のオブジェクトは、コピーが変更されるたびに影響を受ける。

メンバー型ドキュメント

enum QOpenGLBuffer::Access

この列挙型はQOpenGLBuffer::map() のアクセスモードを定義する。

定数説明
QOpenGLBuffer::ReadOnly0x88B8バッファは読み込み専用にマップされる。
QOpenGLBuffer::WriteOnly0x88B9バッファは書き込み専用にマップされる。
QOpenGLBuffer::ReadWrite0x88BAバッファは読み書きのためにマップされます。

enum QOpenGLBuffer::RangeAccessFlag
flags QOpenGLBuffer::RangeAccessFlags

この enum はQOpenGLBuffer::mapRange() のアクセスモードビットを定義します。

定数説明
QOpenGLBuffer::RangeRead0x0001バッファは読み込み用にマップされます。
QOpenGLBuffer::RangeWrite0x0002バッファは書き込み用にマップされる。
QOpenGLBuffer::RangeInvalidate0x0004指定された範囲の前の内容を破棄する。
QOpenGLBuffer::RangeInvalidateBuffer0x0008バッファ全体の以前の内容を破棄する。
QOpenGLBuffer::RangeFlushExplicit0x0010glFlushMappedBufferRange を介して明示的に変更をフラッシュすることを示します。
QOpenGLBuffer::RangeUnsynchronized0x0020mapRange() から戻る前に、保留中の操作を同期させるべきではないことを示す。

RangeAccessFlags型はQFlags<RangeAccessFlag>のtypedefです。これはRangeAccessFlag値のORの組み合わせを格納します。

enum QOpenGLBuffer::Type

この列挙型は、QOpenGLBuffer で作成する OpenGL バッファオブジェクトのタイプを定義します。

定数説明
QOpenGLBuffer::VertexBuffer0x8892頂点配列を指定するときに使用する頂点バッファオブジェクト。
QOpenGLBuffer::IndexBuffer0x8893glDrawElements() で使用するインデックスバッファオブジェクト。
QOpenGLBuffer::PixelPackBuffer0x88EBOpenGL サーバーからピクセルデータを読み込むためのピクセルパックバッファオブジェクト(たとえば、glReadPixels() )。OpenGL/ESではサポートされていません。
QOpenGLBuffer::PixelUnpackBuffer0x88ECピクセルデータをOpenGLサーバーに書き込むためのピクセルアンパックバッファオブジェクト(例えば、glTexImage2D() )。OpenGL/ESではサポートされていません。

enum QOpenGLBuffer::UsagePattern

この列挙型はQOpenGLBuffer オブジェクトの使用パターンを定義します。

定数説明
QOpenGLBuffer::StreamDraw0x88E0データは一度設定され、描画操作のために数回使用される。OpenGL/ES 1.1では、これはStaticDrawと同じです。
QOpenGLBuffer::StreamRead0x88E1データは一度設定され、OpenGLサーバーからデータを読み戻すために数回使用されます。OpenGL/ESではサポートされていません。
QOpenGLBuffer::StreamCopy0x88E2データは一度設定され、OpenGLサーバーからデータを読み戻すために数回使用され、さらなる描画操作で使用されます。OpenGL/ESではサポートされていません。
QOpenGLBuffer::StaticDraw0x88E4データは一度設定され、描画操作のために何度も使用されます。
QOpenGLBuffer::StaticRead0x88E5データは一度設定され、OpenGLサーバーからデータを読み出すために何度も使用されます。OpenGL/ESではサポートされていません。
QOpenGLBuffer::StaticCopy0x88E6データは一度設定され、OpenGLサーバーからデータを読み出すために何度も使用されます。OpenGL/ESではサポートされていません。
QOpenGLBuffer::DynamicDraw0x88E8データは繰り返し変更され、描画操作のために何度も使用されます。
QOpenGLBuffer::DynamicRead0x88E9データは繰り返し変更され、OpenGLサーバーからデータを読み出すために何度も使用されます。OpenGL/ESではサポートされていません。
QOpenGLBuffer::DynamicCopy0x88EAデータは繰り返し変更され、OpenGLサーバーからデータを読み出すために何度も使用されます。OpenGL/ESではサポートされていません。

メンバー関数ドキュメント

QOpenGLBuffer::QOpenGLBuffer()

QOpenGLBuffer::VertexBuffer 型の新しいバッファオブジェクトを構築する。

注意:このコンストラクタはQOpenGLBufferインスタンスを生成するだけです。OpenGLサーバ内の実際のバッファオブジェクトはcreate() が呼ばれるまで作成されません。

create()も参照してください

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

type の新しいバッファオブジェクトを構築する。

注意:このコンストラクタはQOpenGLBufferインスタンスを生成するだけです。OpenGLサーバーの実際のバッファオブジェクトはcreate() が呼ばれるまで作成されません。

create()も参照してください

QOpenGLBuffer::QOpenGLBuffer(const QOpenGLBuffer &other)

other の浅いコピーを構築します。

注意: QOpenGLBuffer は copy-on-write セマンティクスを実装していないので、コピーが変更されるたびにother が影響を受けます。

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

Move-constructs new QOpenGLBuffer fromother.

注意: 移動元のオブジェクトother は部分的に形成された状態に置かれ、その中で有効な操作は破壊と新しい値の割り当てだけです。

この関数は Qt 6.5 で導入されました。

[noexcept] QOpenGLBuffer::~QOpenGLBuffer()

OpenGLサーバーで使用されているストレージも含めて、このバッファオブジェクトを破棄します。

void QOpenGLBuffer::allocate(const void *data, int count)

count data 。以前の内容はすべて削除される。

このバッファに対してcreate() が呼び出され、現在のコンテキストにバインドされていることが前提である。

create()、read()、write()も参照のこと

void QOpenGLBuffer::allocate(int count)

これはオーバーロードされた関数である。

バッファにcount バイトの領域を確保する。以前の内容はすべて削除される。

このバッファに対してcreate() が呼び出され、現在のコンテキストにバインドされていることが前提である。

create() およびwrite()も参照

bool QOpenGLBuffer::bind()

このオブジェクトに関連付けられたバッファを現在のOpenGLコンテキストにバインドする。バインドできなかった場合はfalse を返します。通常、type() がこの OpenGL 実装でサポートされていないためです。

バッファは、create ()が呼び出されたときと同じQOpenGLContext 現在にバインドされているか、それと共有されている別のQOpenGLContext にバインドされていなければなりません。そうでない場合、この関数からfalseが返されます。

release() およびcreate()も参照してください

GLuint QOpenGLBuffer::bufferId() const

バッファが作成されていない場合は0。

isCreated()も参照してください

bool QOpenGLBuffer::create()

OpenGLサーバーにバッファオブジェクトを作成します。オブジェクトが作成された場合はtrue を返し、そうでない場合は false を返す。

この関数は現在のQOpenGLContext 。バッファはそのコンテキスト(またはそのコンテキストと共有されている他のコンテキスト)にバインドされ、そのコンテキストでのみ使用できます。

OpenGL 実装がバッファをサポートしていない場合、または現在のQOpenGLContext がない場合、この関数は false を返します。

isCreated(),allocate(),write(),destroy()も参照してください

void QOpenGLBuffer::destroy()

OpenGLサーバーで使用されているストレージも含めて、このバッファオブジェクトを破棄します。バッファへの参照はすべて無効になります。

bool QOpenGLBuffer::isCreated() const

このバッファが作成されていればtrue を返し、そうでなければ false を返す。

create() およびdestroy()も参照

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

このバッファの内容をアプリケーションのメモリ空間にマッピングし、そのポインタを返します。メモリマッピングができない場合はNULLを返す。access パラメータは、実行されるアクセスのタイプを示す。

このバッファに対してcreate ()が呼び出され、現在のコンテキストにバインドされていることが前提である。

注: この関数は、GL_OES_mapbuffer 拡張が存在する場合、OpenGL ES 2.0 以前でのみサポートされます。

注意: OpenGL ES 3.0以降、またはデスクトップOpenGLの場合、GL_ARB_map_buffer_range がサポートされていれば、この関数はglMapBuffer の代わりにglMapBufferRange を使用します。

unmap(),create(),bind(),mapRange()も参照

void *QOpenGLBuffer::mapRange(int offset, int count, QOpenGLBuffer::RangeAccessFlags access)

このバッファの内容のoffsetcount で指定された範囲をアプリケーションのメモリ空間にマッピングし、そのポインタを返します。メモリマッピングができない場合はNULLを返す。access パラメータは、アクセス・フラグの組み合わせを指定する。

このバッファに対してcreate ()が呼び出され、現在のコンテキストにバインドされていることが前提である。

注意: この関数はOpenGL ES 2.0以前では使用できません。

unmap(),create(),bind()も参照

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

このバッファのoffset から始まるcount バイトをdata に読み込む。成功した場合はtrue を返す。バッファからの読み込みがサポートされていない場合は false を返す。バッファからの読み込みはOpenGL/ESではサポートされていません。

このバッファは現在のコンテキストにバインドされていると仮定されます。

write() およびbind()も参照してください

void QOpenGLBuffer::release()

このオブジェクトに関連付けられたバッファを現在のOpenGLコンテキストから解放する。

この関数は、バッファに対してbind() が呼び出されたときと同じQOpenGLContext current で呼び出されなければならない。

bind()も参照してください

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

現在のQOpenGLContexttype に関連付けられたバッファを解放する。

この関数は、glBindBuffer(type, 0) を直接呼び出すもので、呼び出し元が、どのQOpenGLBuffer がコンテキストにバインドされているかわからないが、それが解放されていることを確認したい場合に使用する。

QOpenGLBuffer::release(QOpenGLBuffer::VertexBuffer);

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

このバッファオブジェクトの使用パターンをvalue に設定する。 この関数は、allocate() またはwrite() の前に呼び出されなければならない。

usagePattern()、allocate()、write()も参照

int QOpenGLBuffer::size() const

読み込み操作のために、このバッファ内のデータのサイズを返します。バッファサイズの取得がサポートされていないか、バッファが作成されていない場合は -1 を返します。

このバッファは現在のコンテキストにバインドされているものと見なされます。

isCreated() およびbind()も参照

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

このバッファをother と交換する。この操作は非常に高速で、失敗することはありません。

この関数は Qt 6.5 で導入されました。

QOpenGLBuffer::Type QOpenGLBuffer::type() const

このオブジェクトが表すバッファのタイプを返します。

bool QOpenGLBuffer::unmap()

map()のコールによってアプリケーションのメモリ空間にマッピングされたバッファのマッピングを解除する。アンマップに成功した場合はtrue を返し、失敗した場合は false を返します。

このバッファは現在のコンテキストにバインドされており、map() で以前にマップされていたものと見なされます。

注意: この関数は、OpenGL ES 2.0以前のバージョンでは、GL_OES_mapbuffer 拡張が存在する場合にのみサポートされます。

map()も参照してください

QOpenGLBuffer::UsagePattern QOpenGLBuffer::usagePattern() const

このバッファオブジェクトの使用パターンを返します。デフォルト値はStaticDraw です。

setUsagePattern()も参照

void QOpenGLBuffer::write(int offset, const void *data, int count)

このバッファのoffset から始まるcount バイトをdata の内容で置き換える。 バッファ内の他のバイトは変更されない。

このバッファに対してcreate() が呼び出され、現在のコンテキストにバインドされていることが前提である。

create()、read()、allocate()も参照

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

Move-assignother をこのQOpenGLBuffer インスタンスに割り当てる。

注意: 移動元のオブジェクトother は、部分的に形成された状態に置かれます。この状態では、有効な操作は破壊と新しい値の割り当てだけです。

この関数は Qt 6.5 で導入されました。

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

other の浅いコピーをこのオブジェクトに割り当てる。

注意:QOpenGLBuffer は copy-on-write セマンティクスを実装していないので、コピーが変更されるたびにother は影響を受ける。

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