QOpenGLBuffer Class
QOpenGLBufferクラスは、OpenGLバッファ・オブジェクトを作成・管理する関数を提供します。詳細...
Header: | #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
この enum は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)
Move-constructsother から新しい QOpenGLBuffer を構築します。
注意: 移動元のオブジェクトother は部分的に形成された状態に置かれ、有効な操作は破壊と新しい値の割り当てだけです。
この関数はQt 6.5で導入されました。
[noexcept]
QOpenGLBuffer::~QOpenGLBuffer()
OpenGLサーバーで使用されているストレージを含め、このバッファオブジェクトを破棄します。
void QOpenGLBuffer::allocate(const void *data, int count)
data の内容で初期化された、count バイトの空間をバッファに割り当てます。以前の内容はすべて削除されます。
このバッファに対してcreate() が呼び出され、現在のコンテキストにバインドされていることが前提です。
void QOpenGLBuffer::allocate(int count)
これはオーバーロードされた関数である。
バッファにcount バイトの領域を割り当てます。以前の内容はすべて削除される。
このバッファに対してcreate() が呼び出され、現在のコンテキストにバインドされていることが前提である。
bool QOpenGLBuffer::bind()
このオブジェクトに関連付けられたバッファを現在のOpenGLコンテキストにバインドします。false
type() がこのOpenGL実装でサポートされていないためである。
バッファは、create ()が呼び出されたときと同じQOpenGLContext 現在にバインドされているか、それと共有されている別のQOpenGLContext にバインドされていなければなりません。そうでない場合、この関数からfalseが返されます。
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)
このバッファの内容の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 current で呼び出されなければならない。
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 を返します。
このバッファは現在のコンテキストにバインドされていると仮定されます。
[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-other をこのQOpenGLBuffer インスタンスに代入する。
注意: 移動元のオブジェクトother は、部分的に形成された状態に置かれます。この状態では、有効な操作は破棄と新しい値の割り当てのみです。
この関数は Qt 6.5 で導入されました。
QOpenGLBuffer &QOpenGLBuffer::operator=(const QOpenGLBuffer &other)
other の浅いコピーをこのオブジェクトに割り当てます。
注意:QOpenGLBuffer は copy-on-write セマンティクスを実装していないので、コピーが変更されるたびにother も影響を受けます。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。