QOpenGLFramebufferObject Class
QOpenGLFramebufferObject クラスは、OpenGL フレームバッファオブジェクトをカプセル化しています。詳細...
| ヘッダー: | #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 クラスは(GL_TEXTURE_2D ターゲットを使用して)2D OpenGLテクスチャを生成し、これを内部のレンダリングターゲットとして使用します。
QOpenGLFramebufferObject を作成する際には、有効な OpenGL コンテキストが存在していることが重要です。そうでない場合、初期化は失敗します。
QPainter で正しくレンダリングを行うには、CombinedDepthStencil アタッチメントを使用してQOpenGLFrameBufferObjectインスタンスを作成してください。QPainter を使用して描画する際にプリミティブにアンチエイリアシングを適用するには、1ピクセルあたり複数のサンプルを持つQOpenGLFramebufferObjectを作成する必要があることに注意してください。マルチサンプルフレームバッファオブジェクトを作成するには、QOpenGLFramebufferObjectFormat パラメータを取るコンストラクタのいずれかを使用し、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 | blit 操作の後、デフォルトのフレームバッファをバインドします。 |
QOpenGLFramebufferObject::RestoreFrameBufferBinding | 2 | 以前にバインドされていたフレームバッファを復元します。現在バインドされているフレームバッファを照会する必要があるため、処理コストが高くなる可能性があります。 |
関連項目: ` blitFramebuffer()`。
メンバ関数のドキュメント
[explicit] QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, GLenum target = GL_TEXTURE_2D)
OpenGLフレームバッファオブジェクトを構築し、サイズsize のバッファに2D OpenGLテクスチャをバインドします。このテクスチャは、フレームバッファオブジェクト内のGL_COLOR_ATTACHMENT0 ターゲットにバインドされます。
target パラメータは、OpenGLテクスチャターゲットを指定するために使用されます。デフォルトのターゲットはGL_TEXTURE_2D です。OpenGL 2.0以降を使用している場合を除き、GL_TEXTURE_2D テクスチャの幅と高さは2の冪でなければならない(例:256x512)ことに注意してください。
デフォルトでは、深度バッファおよびステンシルバッファは接続されていません。この動作は、オーバーロードされたコンストラクタのいずれかを使用して切り替えることができます。
デフォルトの内部テクスチャ形式は、デスクトップ OpenGL では `GL_RGBA8 `、OpenGL/ES では `GL_RGBA ` です。
QOpenGLFramebufferObject を作成する際には、最新の OpenGL コンテキストが設定されていることが重要です。そうでない場合、初期化は失敗します。
size()、texture()、およびattachment()も参照してください 。
QOpenGLFramebufferObject::QOpenGLFramebufferObject(const QSize &size, const QOpenGLFramebufferObjectFormat &format)
指定されたsize に基づき、渡されたformat を用いて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)
指定されたwidth およびheight に基づき、渡されたformat に基づいて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)をサポートしている場合にのみ機能します。サポートされていない場合、この関数は追加のカラーアタッチメントを追加しません。MRTがサポートされているかどうかを確認するには、実行時にQOpenGLFunctions::hasOpenGLFeature()をQOpenGLFunctions::MultipleRenderTargets 引数で呼び出してください。
注: カラーアタッチメントの内部形式は 異なる場合がありますが、ドライバによってはサポートされる組み合わせに制限がある可能性があります。
注: カラーアタッチメントのサイズは 異なる場合がありますが、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を返します。
bind() およびrelease()も参照してください 。
[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() が true を返さない限り、この関数は何の効果も持ちません。
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 に等しい場合、同じバッファ内でコピーが行われます。ソースとターゲットの矩形が重なり、かつサイズが異なる場合、結果は未定義となります。また、いずれかのフレームバッファオブジェクトがマルチサンプルフレームバッファである場合も、サイズは同一でなければなりません。
注: シザーテストが 有効になっている場合、ブリット領域が制限されます。
複数のレンダリングターゲットが使用されている場合、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)
* 2つのフレームバッファオブジェクト間でデータを転送するための便利なオーバーロード関数。
これはオーバーロードされた関数です。
[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
このフレームバッファオブジェクト(glGenFrameBuffersEXT() 関数によって返されるもの)のOpenGLフレームバッファオブジェクトハンドルを返します。このハンドルを使用すると、新しい画像やバッファをフレームバッファにアタッチすることができます。これらのオブジェクトのクリーンアップおよび破棄は、ユーザーが責任を持って行う必要があります。
[static] bool QOpenGLFramebufferObject::hasOpenGLFramebufferBlit()
このシステムに OpenGL の「GL_EXT_framebuffer_blit 」拡張機能が実装されている場合は `true ` を返し、そうでない場合は `false` を返します。
blitFramebuffer()も参照してください 。
[static] bool QOpenGLFramebufferObject::hasOpenGLFramebufferObjects()
このシステムに OpenGL のGL_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 がtrueの場合、画像はOpenGL座標からラスタ座標に変換されます。QOpenGLPaintDevice と併用する場合、flipped はQOpenGLPaintDevice::paintFlipped()の値と逆の値にする必要があります。
返される画像のフォーマットは、プリマルチプライドARGB32またはRGB32となります。 後者は、internalTextureFormat()がGL_RGB に設定されている場合にのみ使用されます。Qt 5.2以降、(A)RGB32への読み込みがサポートされていない場合(OpenGL ESを含む)、この関数はプリマルチプライドRGBA8888またはRGBx8888にフォールバックします。 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
フレームバッファオブジェクトのアタッチメントの幅を返します。
© 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.