QOpenGLBuffer Class
QOpenGLBuffer クラスは、OpenGL バッファオブジェクトの作成および管理を行うための関数を提供します。詳細...
| ヘッダー: | #include <QOpenGLBuffer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
- 継承されたメンバーを含む、すべてのメンバーの一覧
- QOpenGLBufferは、3Dレンダリングの一部です。
パブリック型
| 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::ReadOnly | 0x88B8 | バッファは読み取り専用としてマップされます。 |
QOpenGLBuffer::WriteOnly | 0x88B9 | バッファは書き込み専用としてマップされます。 |
QOpenGLBuffer::ReadWrite | 0x88BA | バッファは読み取りと書き込みの両方に対応するようにマップされます。 |
enum QOpenGLBuffer::RangeAccessFlag
flags QOpenGLBuffer::RangeAccessFlags
この列挙型は、QOpenGLBuffer::mapRange() のアクセスモードビットを定義します。
| 定数 | 値 | 説明 |
|---|---|---|
QOpenGLBuffer::RangeRead | 0x0001 | バッファは読み取り用にマップされます。 |
QOpenGLBuffer::RangeWrite | 0x0002 | バッファは書き込み用にマップされます。 |
QOpenGLBuffer::RangeInvalidate | 0x0004 | 指定された範囲の以前の内容を破棄します。 |
QOpenGLBuffer::RangeInvalidateBuffer | 0x0008 | 指定された範囲の以前の内容を破棄します。 |
QOpenGLBuffer::RangeFlushExplicit | 0x0010 | 変更内容は、glFlushMappedBufferRange によって明示的にフラッシュされることを示します。 |
QOpenGLBuffer::RangeUnsynchronized | 0x0020 | mapRange() から戻る前に、保留中の操作を同期化してはならないことを示します。 |
RangeAccessFlags 型は、QFlags<RangeAccessFlag> の typedef です。これは、RangeAccessFlag 値の論理和 (OR) を格納します。
enum QOpenGLBuffer::Type
この列挙型は、QOpenGLBuffer で作成する OpenGL バッファオブジェクトのタイプを定義します。
| 定数 | 値 | 説明 |
|---|---|---|
QOpenGLBuffer::VertexBuffer | 0x8892 | 頂点配列を指定する際に使用する頂点バッファオブジェクト。 |
QOpenGLBuffer::IndexBuffer | 0x8893 | glDrawElements() と共に使用するインデックスバッファオブジェクト。 |
QOpenGLBuffer::PixelPackBuffer | 0x88EB | OpenGL サーバーからピクセルデータを読み取るためのピクセルパックバッファオブジェクト(例:glReadPixels() を使用する場合)。OpenGL/ES ではサポートされていません。 |
QOpenGLBuffer::PixelUnpackBuffer | 0x88EC | OpenGL サーバーにピクセルデータを書き込むためのピクセルアンパックバッファオブジェクト(例:glTexImage2D() を使用する場合)。OpenGL/ES ではサポートされていません。 |
enum QOpenGLBuffer::UsagePattern
この列挙型は、QOpenGLBuffer オブジェクトの使用パターンを定義します。
| 定数 | 定数値 | 説明 |
|---|---|---|
QOpenGLBuffer::StreamDraw | 0x88E0 | データは一度設定され、描画操作のために数回使用されます。OpenGL/ES 1.1 では、これは StaticDraw と同等です。 |
QOpenGLBuffer::StreamRead | 0x88E1 | データは一度設定され、OpenGL サーバーからデータを読み戻すために数回使用されます。OpenGL/ES ではサポートされていません。 |
QOpenGLBuffer::StreamCopy | 0x88E2 | データは一度設定され、OpenGL サーバーからデータを読み戻して、その後の描画操作に使用する際に数回利用されます。OpenGL/ES ではサポートされていません。 |
QOpenGLBuffer::StaticDraw | 0x88E4 | データは一度設定され、描画処理で何度も使用されます。 |
QOpenGLBuffer::StaticRead | 0x88E5 | データは一度設定され、OpenGL サーバーからデータを読み戻すために何度も使用されます。OpenGL/ES ではサポートされていません。 |
QOpenGLBuffer::StaticCopy | 0x88E6 | データは一度設定され、その後の描画処理に利用するために OpenGL サーバーからデータを読み戻す際に何度も使用されます。OpenGL/ES ではサポートされていません。 |
QOpenGLBuffer::DynamicDraw | 0x88E8 | データは繰り返し変更され、描画処理で何度も使用されます。 |
QOpenGLBuffer::DynamicRead | 0x88E9 | データは繰り返し変更され、OpenGL サーバーからデータを読み戻すために何度も使用されます。OpenGL/ES ではサポートされていません。 |
QOpenGLBuffer::DynamicCopy | 0x88EA | データは繰り返し変更され、さらなる描画処理に使用するために 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)
other から新しい QOpenGLBuffer をムーブコンストラクタで生成します。
注:移動元のオブジェクト `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 コンテキストにバインドします。バインドできなかった場合(通常は、この OpenGL 実装で `type()` がサポートされていないため)、false を返します。
バッファは、create() が呼び出された時点で有効だったQOpenGLContext と同じもの、またはそれと共有されている別のQOpenGLContext にバインドされている必要があります。そうでない場合、この関数はfalseを返します。
release() およびcreate()も参照してください 。
GLuint QOpenGLBuffer::bufferId() const
このバッファに関連付けられた OpenGL 識別子を返します。バッファが作成されていない場合は 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()が呼び出されており、かつ現在のコンテキストにバインドされていることが前提となります。
注:この関数は 、OpenGL ES 2.0 以前において、GL_OES_mapbuffer 拡張機能が実装されている場合にのみサポートされます。
注: 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)
このバッファの内容のうち、offset およびcount で指定された範囲をアプリケーションのメモリ空間にマッピングし、そのポインタを返します。メモリマッピングが不可能な場合は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ではバッファの読み込みはサポートされていません。
このバッファは、現在のコンテキストにバインド済みであることが前提となります。
void QOpenGLBuffer::release()
このオブジェクトに関連付けられているバッファを、現在の OpenGL コンテキストから解放します。
この関数は、そのバッファに対してbind()が呼び出されたときと同じQOpenGLContext が指定された状態で呼び出す必要があります。
bind()も参照してください 。
[static] void QOpenGLBuffer::release(QOpenGLBuffer::Type type)
現在のQOpenGLContext において、type に関連付けられたバッファを解放します。
この関数は、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)
other をこのQOpenGLBuffer インスタンスに代入します。
注: 移動元のオブジェクト other は 、部分的に形成された状態になります。この状態では、有効な操作は破棄と新しい値への代入のみです。
この関数は Qt 6.5 で導入されました。
QOpenGLBuffer &QOpenGLBuffer::operator=(const QOpenGLBuffer &other)
other の浅いコピーをこのオブジェクトに割り当てます。
注:QOpenGLBuffer はコピーオンライトのセマンティクスを実装していないため、コピーが変更されるたびにother も影響を受けます。
© 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.