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の座標系の規則に従っていることを示します。
QOpenGLTextureBlitter::OriginTopLeft1テクスチャ内のデータが、Yが上から下に向かっていることを示します。これは、通常の、反転されていない画像データで一般的です。

blit()も参照

メンバ関数ドキュメント

QOpenGLTextureBlitter::QOpenGLTextureBlitter()

新しい QOpenGLTextureBlitter インスタンスを構築します。

注意: コンストラクタではグラフィック・リソースは初期化されません。なぜなら、OpenGLコンテキストに依存する実際の初期化はcreate() の中だけで起こるからです。

[noexcept] QOpenGLTextureBlitter::~QOpenGLTextureBlitter()

インスタンスを破壊する。

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

void QOpenGLTextureBlitter::bind(GLenum target = GL_TEXTURE_2D)

ブリッターが使用するグラフィックリソースをバインドする。これは、blit ()を呼び出す前に呼び出す必要があります。OpenGLの状態を変更するコードは、bind()とblit()の呼び出しの間に存在しないようにする必要があります。

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 は、画像データの反転が必要かどうかを指定します。 が FBO パス にアタッチされたテクスチャに対応する場合。一方、 が反転されていない画像データに基づいている場合は、 を渡します。これは () を使うよりも効率的です。texture OriginBottomLeft texture OriginTopLeft QImage::mirrored

targetTransform()、Originbind()も参照してください

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

ソーステクスチャtexture でブリットを実行します。

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

sourceTransform はソースに適用されるトランスフォームを指定します。これにより、ソース テクスチャのサブレクトのみを使用できます。これは通常、 () ヘルパー関数によって生成されます。sourceTransform

sourceTransform()、targetTransform()、Originbind()も参照してください

bool QOpenGLTextureBlitter::create()

ブリッタが使用するグラフィックス・リソースを初期化する。

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

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

void QOpenGLTextureBlitter::destroy()

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

この関数は、ブリッタが作成された状態でないときには何の効果もありません。

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

bool QOpenGLTextureBlitter::isCreated() const

create() がコールされ、成功した場合はtrue を返す。そうでない場合はfalse を返す。

create() およびdestroy()も参照のこと

void QOpenGLTextureBlitter::release()

ブリッターが使用するグラフィックリソースのバインドを解除する。

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

void QOpenGLTextureBlitter::setOpacity(float opacity)

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

注意: blitterはブレンド状態を変更しません。正しいブレンド設定がアクティブであることを確認するのは、blit ()の呼び出し側次第です。

void QOpenGLTextureBlitter::setRedBlueSwizzle(bool swizzle)

赤と青のカラーチャンネルでスウィズリングが有効かどうかをswizzle に設定します。BGRA から RGBA への変換(遅い CPU 側の変換の代わりに GPU 上のシェーダで発生)は、ソーステクスチャがQImage::Format_ARGB32 のようなフォーマットでQImage からのデータを含んでいるときに便利です。

デフォルトでは、フレームバッファオブジェクトにアタッチされたテクスチャ、またはバイトオーダQImage フォーマット(QImage::Format_RGBA8888 のような)に基づくテクスチャが必要とするものであるため、赤青スウィズルは無効になっています。

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

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

subTexture textureSize は,テクスチャデータの幅と高さです. は,Y軸に対する画像データの方向を指定します.origin

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 はターゲッ ト矩形を ピ ク セル単位で表 し ます。 は元画像の寸法を表 し 、 たいていの場合 (0, 0, 画像の幅, 画像の高さ) に設定 さ れます。viewport

拡大縮小 さ れていない出力の場合、targetviewport のサ イ ズは一致す る 必要があ り ます。

blit()も参照

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