このページでは

QOpenGLTextureBlitter Class

QOpenGLTextureBlitter クラスは、OpenGL を使用してテクスチャ付き四角形を描画するための便利な方法を提供します。詳細...

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

パブリック型

enum Origin { OriginBottomLeft, OriginTopLeft }

パブリック関数

QOpenGLTextureBlitter()
~QOpenGLTextureBlitter()
void bind(GLenum target = GL_TEXTURE_2D)
void blit(GLuint texture, const QMatrix4x4 &targetTransform, QOpenGLTextureBlitter::Origin sourceOrigin)
void blit(GLuint texture, const QMatrix4x4 &targetTransform, const QMatrix3x3 &sourceTransform)
bool create()
void destroy()
bool isCreated() const
void release()
void setOpacity(float opacity)
void setRedBlueSwizzle(bool swizzle)
bool supportsExternalOESTarget() const
bool supportsRectangleTarget() const

静的パブリックメンバー

QMatrix3x3 sourceTransform(const QRectF &subTexture, const QSize &textureSize, QOpenGLTextureBlitter::Origin origin)
QMatrix4x4 targetTransform(const QRectF &target, const QRect &viewport)

詳細な説明

テクスチャ付きクワッドを描画して、テクスチャの内容を画面に表示することは、2D ユーザーインターフェースの開発において一般的な操作です。QOpenGLTextureBlitter は、頂点データ、シェーダーソース、バッファおよびプログラムの管理、行列計算の繰り返しを回避するための便利なクラスを提供します。

たとえば、QOpenGLWidget のサブクラスは、フレームバッファにレンダリングされた内容をピクセル座標(x, y) に描画するために、次のように処理できます:

void OpenGLWidget::initializeGL()
{
    m_blitter.create();
    m_fbo = new QOpenGLFramebufferObject(size);
}

void OpenGLWidget::paintGL()
{
    m_fbo->bind();
    // update offscreen content
    m_fbo->release();

    m_blitter.bind();
    const QRect targetRect(QPoint(x, y), m_fbo->size());
    const QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(targetRect, QRect(QPoint(0, 0), m_fbo->size()));
    m_blitter.blit(m_fbo->texture(), target, QOpenGLTextureBlitter::OriginBottomLeft);
    m_blitter.release();
}

このブリッターは、GLSL 1.00(OpenGL (ES) 2.x および新しい OpenGL バージョンの互換プロファイルに適しています)とバージョン 150(OpenGL 3.2 以降のコアプロファイルコンテキストに適しています)の両方に対応した GLSL シェーダーを実装しています。

メンバ型のドキュメント

enum QOpenGLTextureBlitter::Origin

定数値説明
QOpenGLTextureBlitter::OriginBottomLeft0テクスチャ内のデータがOpenGLの座標系の規約に従っていることを示します。つまり、Y軸は下から上へ向かっています。
QOpenGLTextureBlitter::OriginTopLeft1テクスチャ内のデータにおいて、Y 軸が上から下へ伸びていることを示します。これは、通常の、反転されていない画像データでは一般的なものです。

関連項目: blit()。

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

QOpenGLTextureBlitter::QOpenGLTextureBlitter()

新しい QOpenGLTextureBlitter インスタンスを生成します。

注: コンストラクタ内ではグラフィックリソースは初期化されません 。これにより、OpenGLコンテキストに依存する実際の初期化はcreate()内でのみ行われるため、QOpenGLTextureBlitterのメンバをそのままクラス内に配置しても安全です。

[noexcept] QOpenGLTextureBlitter::~QOpenGLTextureBlitter()

インスタンスを破棄します。

注: create() の呼び出し時にアクティブだった OpenGL コンテキスト(またはそれと同じリソースを共有しているコンテキスト)がアクティブでなくなった場合 、グラフィックスリソースは解放されません。したがって、OpenGL リソースのクリーンアップをデストラクタに依存するのではなく、destroy() を手動で呼び出すことをお勧めします。

void QOpenGLTextureBlitter::bind(GLenum target = GL_TEXTURE_2D)

ブリッタが使用するグラフィックスリソースをバインドします。これは、blit() を呼び出す前に呼び出す必要があります。bind() の呼び出しとblit() の呼び出しの間で、OpenGL ステートを変更するコードを実行することは避けてください。そうしないと、競合が発生する可能性があります。

target はソーステクスチャのテクスチャターゲットであり、GL_TEXTURE_2D 、GL_TEXTURE_RECTANGLE 、またはGL_OES_EGL_image_external のいずれかでなければなりません。

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

void QOpenGLTextureBlitter::blit(GLuint texture, const QMatrix4x4 &targetTransform, QOpenGLTextureBlitter::Origin sourceOrigin)

ソーステクスチャtexture を使用して、ブリットを実行します。

targetTransform 適用される変換を指定します。これは通常、targetTransform() ヘルパー関数によって生成されます。

sourceOrigin 画像データを反転させる必要があるかどうかを指定します。texture がFBOパスにアタッチされたテクスチャに対応する場合はOriginBottomLeft を指定します。一方、texture が反転されていない画像データに基づいている場合は、OriginTopLeft を指定します。これはQImage::flipped()を使用するよりも効率的です。

targetTransform()、Origin 、およびbind()も参照してください 。

void QOpenGLTextureBlitter::blit(GLuint texture, const QMatrix4x4 &targetTransform, const QMatrix3x3 &sourceTransform)

ソーステクスチャ `texture` を使用してブリットを実行します。

targetTransform 適用される変換を指定します。これは通常、targetTransform() ヘルパー関数によって生成されます。

sourceTransform ソースに適用される変換を指定します。これにより、ソーステクスチャのサブ矩形のみを使用できるようになります。これは通常、sourceTransform() ヘルパー関数によって生成されます。

関連項目: sourceTransform()、targetTransform()、Origin 、およびbind()。

bool QOpenGLTextureBlitter::create()

ブリッターで使用されるグラフィックスリソースを初期化します。

成功した場合はtrue を、失敗した場合はfalse を返します。現在のスレッドで有効なOpenGLコンテキストが存在しない場合や、何らかの理由でシェーダーのコンパイルに失敗した場合に、失敗が発生することがあります。

isCreated() およびdestroy()も参照してください 。

void QOpenGLTextureBlitter::destroy()

ブリッタが保持しているすべてのグラフィックリソースを解放します。create() の呼び出し時にスレッドでアクティブだった OpenGL コンテキスト、またはそれと同一のリソースを共有する別のコンテキストが、現在もアクティブであることを前提としています。

ブリッターが作成済み状態でない場合、この関数は何の効果も持ちません。

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

bool QOpenGLTextureBlitter::isCreated() const

create() が呼び出され、成功した場合はtrue を返します。それ以外の場合はfalse を返します。

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

void QOpenGLTextureBlitter::release()

ブリッターによって使用されているグラフィックリソースのバインドを解除します。

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

void QOpenGLTextureBlitter::setOpacity(float opacity)

不透明度をopacity に変更します。デフォルトの不透明度は1.0です。

注:ブリッターは ブレンド状態を変更しません。正しいブレンド設定が有効になっていることを確認するのは、blit() を呼び出す側の責任です。

void QOpenGLTextureBlitter::setRedBlueSwizzle(bool swizzle)

赤および青の色チャンネルに対して、swizzle 形式へのスウィズリングを有効にするかどうかを設定します。ソーステクスチャに、リトルエンディアンシステムでは BGRA に変換されるQImage::Format_ARGB32 のような形式のQImage からのデータが含まれている場合、BGRA から RGBA への変換(処理速度の遅い CPU 側での変換ではなく、GPU 上のシェーダー内で実行される)が有用となることがあります。

デフォルトでは、赤・青のスウィズルは無効になっています。これは、フレームバッファオブジェクトにアタッチされたテクスチャや、バイト順がQImage 形式(QImage::Format_RGBA8888 など)に基づくテクスチャに必要な処理だからです。

[static] QMatrix3x3 QOpenGLTextureBlitter::sourceTransform(const QRectF &subTexture, const QSize &textureSize, QOpenGLTextureBlitter::Origin origin)

blit() の入力として適した 3x3 行列を計算します。これは、ブリットでテクスチャの一部のみを使用する場合に用いられます。

subTexture は、ピクセル単位で指定された目的のソース矩形であり、textureSize はテクスチャデータの全幅および全高です。origin は、Y軸に対する画像データの向きを指定します。

blit() およびOriginも参照してください 。

bool QOpenGLTextureBlitter::supportsExternalOESTarget() const

bind() がGL_TEXTURE_EXTERNAL_OES をターゲット引数として受け入れた場合、true を返します。

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

bool QOpenGLTextureBlitter::supportsRectangleTarget() const

bind() がGL_TEXTURE_RECTANGLE をターゲット引数として受け入れた場合、true を返します。

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

[static] QMatrix4x4 QOpenGLTextureBlitter::targetTransform(const QRectF &target, const QRect &viewport)

blit() に適したターゲット変換を計算します。

target は、ピクセル単位のターゲット矩形です。viewport はソースの寸法を記述するもので、ほとんどの場合 (0, 0, 画像の幅, 画像の高さ) に設定されます。

拡大・縮小を行わない出力の場合、target とviewport のサイズは一致している必要があります。

blit()も参照してください 。

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