QOpenGLFramebufferObject Class
QOpenGLFramebufferObjectクラスは、OpenGLフレームバッファオブジェクトをカプセル化します。詳細...
Header: | #include <QOpenGLFramebufferObject> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
qmake: | QT += opengl |
- 継承メンバを含む全メンバのリスト
- QOpenGLFramebufferObjectは、3Dレンダリングの一部です。
パブリック・タイプ
enum | Attachment { NoAttachment, CombinedDepthStencil, Depth } |
enum | FramebufferRestorePolicy { DontRestoreFramebufferBinding, RestoreFramebufferBindingToDefault, RestoreFrameBufferBinding } |
パブリック関数
QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D) | |
QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format) | |
QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D) | |
QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format) | |
QOpenGLFramebufferObject(const QSize &size, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0) | |
QOpenGLFramebufferObject(int width, int height, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0) | |
virtual | ~QOpenGLFramebufferObject() |
void | addColorAttachment(const QSize &size, GLenum internalFormat = 0) |
void | addColorAttachment(int width, int height, GLenum internalFormat = 0) |
QOpenGLFramebufferObject::Attachment | attachment() const |
bool | bind() |
QOpenGLFramebufferObjectFormat | format() const |
GLuint | handle() const |
int | height() const |
bool | isBound() const |
bool | isValid() const |
bool | release() |
void | setAttachment(QOpenGLFramebufferObject::Attachment attachment) |
QSize | size() const |
QList<QSize> | sizes() const |
GLuint | takeTexture() |
GLuint | takeTexture(int colorAttachmentIndex) |
GLuint | texture() const |
QList<GLuint> | textures() const |
QImage | toImage(bool flipped = true) const |
QImage | toImage(bool flipped, int colorAttachmentIndex) const |
int | width() const |
静的パブリックメンバー
bool | bindDefault() |
void | blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex, QOpenGLFramebufferObject::FramebufferRestorePolicy restorePolicy) |
void | blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST) |
void | blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST) |
void | blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex) |
bool | hasOpenGLFramebufferBlit() |
bool | hasOpenGLFramebufferObjects() |
詳細な説明
QOpenGLFramebufferObjectクラスは、GL_EXT_framebuffer_object
拡張によって定義されたOpenGLフレームバッファオブジェクトをカプセル化します。これは、QOpenGLPaintDevice の助けを借りて、QPainter でペイントしたり、ネイティブのOpenGLコールを使ってレンダリングしたりできるレンダリングサーフェスを提供します。このサーフェスはバインドすることができ、独自のOpenGL描画コードで通常のテクスチャとして使用できます。デフォルトでは、QOpenGLFramebufferObjectクラスは2D OpenGLテクスチャを生成し(GL_TEXTURE_2D
ターゲットを使用)、内部レンダリングターゲットとして使用されます。
QOpenGLFramebufferObjectを作成するときに、現在のOpenGLコンテキストを持っていることが重要で、そうでないと初期化に失敗します。
QPainter を正しくレンダリングしたい場合は、QOpenGLFrameBufferObject インスタンスをCombinedDepthStencil 添付で作成してください。QPainter を使用して描画するときにプリミティブにアンチエイリアスをかけるには、ピクセルごとに 1 つ以上のサンプルを持つ QOpenGLFramebufferObject を作成する必要があることに注意してください。マルチサンプルフレームバッファオブジェクトを作成するには、QOpenGLFramebufferObjectFormat パラメータを取るコンストラクタの 1 つを使用し、QOpenGLFramebufferObjectFormat::samples() プロパティを 0 以外の値に設定する必要があります。
マルチサンプルフレームバッファオブジェクトの場合、カラーレンダーバッファが作成され、そうでない場合は、指定されたテクスチャターゲットを持つテクスチャが作成されます。カラーレンダーバッファまたはテクスチャは、指定された内部フォーマットを持ち、フレームバッファオブジェクトのGL_COLOR_ATTACHMENT0
アタッチメントにバインドされます。
OpenGLの実装がサポートしている場合は、複数のレンダーターゲットもサポートされます。ここでは、複数のテクスチャ(マルチサンプリングの場合はレンダーバッファ)が存在し、それぞれがGL_COLOR_ATTACHMENT0
、1
、2
、...にアタッチされます。
マルチサンプリングが有効になっているフレームバッファオブジェクトをテクスチャとして使いたい場合は、まず QOpenGLContext::blitFramebuffer() を使って通常のフレームバッファオブジェクトにコピーする必要があります。
別スレッドでQPainter とQOpenGLPaintDevice を使って QOpenGLFramebufferObject に描画することも可能です。
メンバ型ドキュメント
enum QOpenGLFramebufferObject::Attachment
この列挙型は、フレームバッファオブジェクトが生成されるときに、フレームバッファオブジェクトにアタッチされる深度バッファとステンシルバッファを設定するために使用されます。
定数 | 値 | 説明 |
---|---|---|
QOpenGLFramebufferObject::NoAttachment | 0 | アタッチメントはフレームバッファオブジェクトに追加されません。深度バッファやステンシルバッファのないフレームバッファオブジェクトにレンダリングする場合、OpenGLの深度テストやステンシルテストは動作しないことに注意してください。これはデフォルト値です。 |
QOpenGLFramebufferObject::CombinedDepthStencil | 1 | GL_EXT_packed_depth_stencil 拡張が存在する場合、深度とステンシルバッファが結合されます。エクステンションが存在しない場合は、深度バッファのみがアタッチされます。 |
QOpenGLFramebufferObject::Depth | 2 | 深度バッファはフレームバッファオブジェクトにアタッチされます。 |
attachment()も参照 。
enum QOpenGLFramebufferObject::FramebufferRestorePolicy
この列挙型は、blitFramebuffer() を呼び出したときのフレームバッファバインディングの復元に関する動作を設定するために使用されます。
定数 | 値 | 説明 |
---|---|---|
QOpenGLFramebufferObject::DontRestoreFramebufferBinding | 0 | 以前のフレームバッファバインディングを復元しません。呼び出し側は、必要に応じてフレームバッファバインディングを追跡し、設定する責任があります。 |
QOpenGLFramebufferObject::RestoreFramebufferBindingToDefault | 1 | ブリット操作の後、デフォルトのフレームバッファをバインドします。 |
QOpenGLFramebufferObject::RestoreFrameBufferBinding | 2 | 以前にバインドされたフレームバッファを復元します。これは、現在バインドされているフレームバッファを問い合わせる必要があるため、コストがかかる可能性があります。 |
blitFramebuffer()も参照 。
メンバ関数ドキュメント
[explicit]
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D)
OpenGLフレームバッファオブジェクトを構築し、サイズsize のバッファに2D OpenGLテクスチャをバインドする。テクスチャはフレームバッファオブジェクトのGL_COLOR_ATTACHMENT0
ターゲットにバインドされる。
OpenGLテクスチャターゲットを指定するには、target パラメータを使用します。デフォルトのターゲットはGL_TEXTURE_2D
です。GL_TEXTURE_2D
テクスチャは、OpenGL 2.0以上を使用していない限り、幅と高さが2のべき乗(たとえば256x512)でなければならないことに注意してください。
デフォルトでは、深度バッファとステンシルバッファはアタッチされません。この動作は、オーバーロードされたコンストラクタの1つを使用して切り替えることができます。
デフォルトの内部テクスチャフォーマットは、デスクトップOpenGLではGL_RGBA8
、OpenGL/ESではGL_RGBA
。
QOpenGLFramebufferObjectを作成するときに、現在のOpenGLコンテキストが設定されていることが重要です。
size(),texture(),attachment()も参照してください 。
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format)
与えられたformat に基づいて、与えられたsize の OpenGL フレームバッファオブジェクトを構築します。
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, GLenum target = GL_TEXTURE_2D)
OpenGLフレームバッファオブジェクトを構築し、与えられたwidth とheight のバッファに2D OpenGLテクスチャをバインドします。
size() およびtexture()も参照してください 。
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, const QOpenGLFramebufferObjectFormat &format)
与えられたformat に基づいて、与えられたwidth とheight の OpenGL フレームバッファオブジェクトを構築します。
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)
OpenGLフレームバッファオブジェクトを構築し、与えられたsize のバッファにテクスチャをバインドします。
attachment パラメータは深度/ステンシルバッファ構成を記述し、target はテクスチャターゲット、internalFormat は内部テクスチャフォーマットを記述します。デフォルトのテクスチャターゲットはGL_TEXTURE_2D
であり、デフォルトの内部フォーマットはデスクトップ OpenGL ではGL_RGBA8
であり、OpenGL/ES ではGL_RGBA
です。
size()、texture()、attachment()も参照してください 。
QOpenGLFramebufferObject::QOpenGLFramebufferObject(int width, int height, QOpenGLFramebufferObject::Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internalFormat = 0)
OpenGLフレームバッファオブジェクトを構築し、与えられたwidth とheight のバッファにテクスチャをバインドします。
attachment パラメータは深度/ステンシルバッファ構成を記述し、target はテクスチャターゲット、internalFormat は内部テクスチャフォーマットを記述します。デフォルトのテクスチャターゲットはGL_TEXTURE_2D
で、デフォルトの内部フォーマットはデスクトップ OpenGL ではGL_RGBA8
で、OpenGL/ES ではGL_RGBA
です。
size ()、texture ()、attachment ()も参照して ください。
[virtual noexcept]
QOpenGLFramebufferObject::~QOpenGLFramebufferObject()
フレームバッファオブジェクトを破棄し、割り当てられたリソースを解放します。
void QOpenGLFramebufferObject::addColorAttachment(const QSize &size, GLenum internalFormat = 0)
size の幅と高さの追加のテクスチャまたはレンダーバッファを作成し、アタッチします。
常に GL_COLOR_ATTACHMENT0 にアタッチメントがあります。GL_COLOR_ATTACHMENT1、GL_COLOR_ATTACHMENT2、...に追加のアタッチメントを設定するには、この関数を呼び出します。
internalFormat が0
でない場合、テクスチャまたはレンダーバッファの内部フォーマットを指定する。そうでない場合は、デフォルトのGL_RGBAまたはGL_RGBA8が使用される。
注意: これは、OpenGL実装で複数のレンダーターゲットがサポートされている場合にのみ機能する。そうでない場合、この関数は追加のカラーアタッチメントを追加しません。MRT がサポートされているかどうかを確認するには、実行時にQOpenGLFunctions::MultipleRenderTargets を指定してQOpenGLFunctions::hasOpenGLFeature() を呼び出します。
注意 : カラーアタッチメントの内部フォーマットは異なるかもしれませんが、ドライバによってはサポートされる組み合わせに制限があるかもしれません。
注意: カラーアタッチメントのサイズは異なる場合がありますが、OpenGLの仕様により、レンダリングはすべてのアタッチメントが収まる領域に制限されます。ただし、ドライバによってはこの点に完全に準拠していない場合がある。
void QOpenGLFramebufferObject::addColorAttachment(int width, int height, GLenum internalFormat = 0)
これはオーバーロードされた関数です。
サイズwidth およびheight の追加テクスチャまたはレンダーバッファを作成し、アタッチします。
internalFormat が0
でない場合、テクスチャまたはレンダーバッファの内部フォーマットを指定します。そうでない場合は、デフォルトの GL_RGBA または GL_RGBA8 が使用されます。
QOpenGLFramebufferObject::Attachment QOpenGLFramebufferObject::attachment() const
このフレームバッファオブジェクトにアタッチされている深度バッファとステンシルバッファのステータスを返す。
setAttachment()も参照してください 。
bool QOpenGLFramebufferObject::bind()
デフォルトのウィンドウシステム提供のフレームバッファからこのフレームバッファオブジェクトにレンダリングを切り替えます。成功するとtrue
を返し、失敗すると false を返します。
注意: takeTexture() が呼ばれた場合、新しいテクスチャが作成され、フレームバッファオブジェクトに関連付けられます。これは、潜在的に高価であり、コンテキストの状態(現在バインドされているテクスチャ)を変更します。
release()も参照してください 。
[static]
bool QOpenGLFramebufferObject::bindDefault()
レンダリングをデフォルトの、ウィンドウシステムが提供するフレームバッファに戻します。成功するとtrue
を返し、失敗すると false を返します。
[static]
void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex, QOpenGLFramebufferObject::FramebufferRestorePolicy restorePolicy)
source フレームバッファオブジェクトのsourceRect 矩形からtarget フレームバッファオブジェクトのtargetRect 矩形にブ リットします。
source またはtarget が 0 の場合、それぞれソースまたはターゲットとしてフレームバッファオブジェクトの代わりにデフォルトのフレームバッファが使用されます。
hasOpenGLFramebufferBlit() が真を返さない限り、この関数は何の効果も持たない。
buffers パラメータは、GL_COLOR_BUFFER_BIT
、GL_DEPTH_BUFFER_BIT
、GL_STENCIL_BUFFER_BIT
の任意の組み合わせからなるマスクでなければならない。ソースバッファとターゲットバッファの両方に存在しないバッファタイプは無視される。
sourceRect とtargetRect の矩形は,サイズが異なる場合があります.この場合,buffers は,GL_DEPTH_BUFFER_BIT
またはGL_STENCIL_BUFFER_BIT
を含むべきではないでしょう.filter パラメータは,GL_LINEAR
またはGL_NEAREST
に設定されるべきであり,スケーリングが行われるときに線形補間と最近傍補間のどちらを使用すべきかを指定します.
source がtarget と等しい場合、同じバッファ内でコピーが実行される。コピー元とコピー先の矩形が重なっていて,サイズが異なる場合,結果は不定です。フレームバッファオブジェクトのいずれかがマルチサンプルフレームバッファの場合、サイズも同じでなければなりません。
Note: シザーテストが有効な場合、ブリット領域が制限されます。
複数のレンダーターゲットが使用されている場合、readColorAttachmentIndex とdrawColorAttachmentIndex は、ソースとデスティネーションフレームバッファのカラーアタッチメントのインデックスを指定します。
restorePolicy は、この関数を呼び出す前にバインドされていたフレームバッファが復元されるべきか、デフォルトのフレームバッファが戻る前にバインドされるべきか、呼び出し元がバインドされたフレームバッファを追跡して設定する責任があるかどうかを決定します。以前のフレームバッファを復元することは、glGetIntegerv
への呼び出しのために比較的高価になる可能性があり、OpenGLドライバによってはパイプラインのストールを意味するかもしれません。
hasOpenGLFramebufferBlit()も参照してください 。
[static]
void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, QOpenGLFramebufferObject *source, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)
これはオーバーロードされた関数です。
2つのフレームバッファオブジェクト間でブリットを行うための便利なオーバーロード。
[static]
void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST)
これはオーバーロードされた関数です。
* これはオーバーロードされた関数です。
[static]
void QOpenGLFramebufferObject::blitFramebuffer(QOpenGLFramebufferObject *target, const QRect &targetRect, QOpenGLFramebufferObject *source, const QRect &sourceRect, GLbitfield buffers, GLenum filter, int readColorAttachmentIndex, int drawColorAttachmentIndex)
これはオーバーロードされた関数です。
2つのフレームバッファオブジェクト間でブリットを行い、以前のフレームバッファバインディングを復元するための便利なオーバーロードです。blitFramebuffer(target, targetRect, source, sourceRect, buffers, filter, readColorAttachmentIndex, drawColorAttachmentIndex,RestoreFrameBufferBinding) を呼び出すのと同等です。
QOpenGLFramebufferObjectFormat QOpenGLFramebufferObject::format() const
このフレームバッファオブジェクトのフォーマットを返します。
GLuint QOpenGLFramebufferObject::handle() const
このフレームバッファオブジェクトのOpenGLフレームバッファオブジェクトハンドルを返す(glGenFrameBuffersEXT()
関数によって返される)。このハンドルは、新しいイメージやバッファをフレームバッファにアタッチするために使用することができます。これらのオブジェクトのクリーンアップと破棄はユーザーの責任である。
[static]
bool QOpenGLFramebufferObject::hasOpenGLFramebufferBlit()
OpenGLGL_EXT_framebuffer_blit
拡張がこのシステムに存在する場合はtrue
を返し、そうでない場合はfalse
を返す。
blitFramebuffer()も参照 。
[static]
bool QOpenGLFramebufferObject::hasOpenGLFramebufferObjects()
OpenGLGL_EXT_framebuffer_object
拡張がこのシステムに存在する場合はtrue
を返し、そうでない場合はfalse
を返す。
int QOpenGLFramebufferObject::height() const
フレームバッファオブジェクトのアタッチメントの高さを返します。
bool QOpenGLFramebufferObject::isBound() const
フレームバッファオブジェクトが現在のコンテキストに現在バインドされている場合はtrue
を返し、そうでない場合は false を返します。
bool QOpenGLFramebufferObject::isValid() const
フレームバッファオブジェクトが有効であればtrue
を返す。
フレームバッファは、初期化プロセスが失敗した場合、ユーザーがフレームバッファオブジェクトに無効なバッファをアタッチした場合、またはテクスチャターゲットがGL_TEXTURE_2D
である場合にテクスチャサイズとして2のべき乗でない幅/高さが指定された場合に無効になる可能性があります。OpenGLのバージョンが2.0以上である場合、またはGL_ARB_texture_non_power_of_two拡張が存在する場合は、2のべき乗以外の制限は適用されません。
また、フレームバッファが作成されたQOpenGLContext が破壊され、フレームバッファの所有権を引き継ぐことができる他の共有コンテキストがない場合、フレームバッファは無効になる可能性があります。
bool QOpenGLFramebufferObject::release()
ウィンドウシステムが提供するデフォルトのフレームバッファにレンダリングを戻します。成功するとtrue
を返し、失敗すると false を返します。
bind()も参照してください 。
void QOpenGLFramebufferObject::setAttachment(QOpenGLFramebufferObject::Attachment attachment)
フレームバッファオブジェクトのアタッチメントをattachment に設定します。
これは、必要に応じて、深度バッファとステンシルバッファのアタッチメントを解放または再アタッチするために使用できます。
注意: この関数は、現在のフレームバッファバインディングを変更します。
attachment()も参照してください 。
QSize QOpenGLFramebufferObject::size() const
このフレームバッファオブジェクトにアタッチされている色と深度/ステンシルのアタッチメントのサイズを返します。
QList<QSize> QOpenGLFramebufferObject::sizes() const
このフレームバッファオブジェクトにアタッチされている全てのカラーアタッチメントのサイズを返します。
GLuint QOpenGLFramebufferObject::takeTexture()
このフレームバッファオブジェクトにアタッチされているテクスチャのテクスチャIDを返します。テクスチャの所有権は呼び出し元に移されます。
フレームバッファオブジェクトが現在バインドされている場合、暗黙のrelease ()が実行されます。次のbind ()の呼び出しの間に、新しいテクスチャが作成されます。
マルチサンプルフレームバッファオブジェクトが使用されている場合、テクスチャは存在せず、この関数からの戻り値は無効となります。同様に、不完全なフレームバッファオブジェクトも0を返します。
texture()、bind()、release()も参照 。
GLuint QOpenGLFramebufferObject::takeTexture(int colorAttachmentIndex)
これはオーバーロードされた関数です。
このフレームバッファオブジェクトのインデックスcolorAttachmentIndex のカラーアタッチメントにアタッチされたテクスチャのテクスチャIDを返します。テクスチャの所有権は呼び出し元に移ります。
colorAttachmentIndex が0
の場合、動作はこの関数のパラメータなしのバリアントと同じです。
フレームバッファオブジェクトが現在バインドされている場合、暗黙のrelease() が実行されます。次にbind() を呼び出す間に、新しいテクスチャが作成されます。
マルチサンプルフレームバッファオブジェクトが使用されている場合、テクスチャは存在せず、この関数の戻り値は無効となります。同様に、不完全なフレームバッファオブジェクトも0を返します。
GLuint QOpenGLFramebufferObject::texture() const
このフレームバッファオブジェクトのデフォルトのレンダリングターゲットとしてアタッチされているテクスチャのテクスチャIDを返します。このテクスチャIDは、独自のOpenGLコードで通常のテクスチャとしてバインドすることができます。
マルチサンプルフレームバッファオブジェクトが使用されている場合、この関数から返される値は無効になります。
複数のテクスチャがアタッチされている場合、戻り値は最初のテクスチャのIDになります。
takeTexture() およびtextures()も参照してください 。
QList<GLuint> QOpenGLFramebufferObject::textures() const
すべての添付テクスチャのテクスチャ ID を返します。
マルチサンプルフレームバッファオブジェクトが使用されている場合は、空のベクトルが返されます。
takeTexture() およびtexture()も参照して ください。
QImage QOpenGLFramebufferObject::toImage(bool flipped = true) const
このフレームバッファオブジェクトの内容をQImage として返します。
flipped が真の場合、画像は OpenGL 座標からラスタ座標に反転されます。QOpenGLPaintDevice と共に使用する場合、flipped はQOpenGLPaintDevice::paintFlipped() の値の逆でなければならない。
返される画像のフォーマットは,ARGB32またはRGB32です.後者は、internalTextureFormat() がGL_RGB
に設定されている場合にのみ使用されます。 Qt 5.2 以降、(A)RGB32 への読み込みがサポートされていない場合、この関数は事前乗算された RGBA8888 または RGBx8888 にフォールバックします(これには OpenGL ES も含まれます)。Qt 5.4 以降、内部フォーマットが RGB10_A2 の場合は A2BGR30 画像が返され、Qt 5.12 以降、内部フォーマットが RGBA16 の場合は RGBA64 画像が返されます。
フレームバッファでのレンダリングが、事前乗算されたアルファを念頭に置いて行われていない場合は、事前乗算されていないフォーマットでラッパーQImage を作成してください。これは、QImage::save() のような操作を実行する前に必要です。そうしないと、そもそも事前乗算されていないにもかかわらず、画像データが事前乗算されなくなってしまうからです。ピクセルデータのコピーを実行せずにこのようなラッパーを作成するには、以下のようにします:
QImage fboImage(fbo.toImage()); QImage image(fboImage.constBits(), fboImage.width(), fboImage.height(), QImage::Format_ARGB32);
マルチサンプリングされたフレームバッファオブジェクトの場合、サンプルはGL_EXT_framebuffer_blit
拡張を使用して解決されます。この拡張が利用できない場合、返される画像の内容は未定義です。
シングルサンプリングされたフレームバッファの場合、その内容はglReadPixels
を使って取得されます。これは高価で非効率的な操作になる可能性があります。したがって、この関数はできるだけ使わないことを推奨する。
QOpenGLPaintDevice::paintFlipped()も参照 。
QImage QOpenGLFramebufferObject::toImage(bool flipped, int colorAttachmentIndex) const
これはオーバーロードされた関数です。
このフレームバッファオブジェクトのインデックスcolorAttachmentIndex のカラーアタッチメントの内容をQImage として返します。flipped がtrue
に設定されている場合、このメソッドは画像を OpenGL 座標からラスター座標に反転します。
注意: このオーバーロードが完全に機能するのは、OpenGL実装で複数のレンダーターゲットがサポートされている場合だけです。そうでない場合は、1つのカラーアタッチメントのみが設定されます。
int QOpenGLFramebufferObject::width() const
フレームバッファオブジェクトのアタッチメントの幅を返します。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。