QOpenGLTextureBlitter Class

QOpenGLTextureBlitterクラスは、OpenGL経由でテクスチャ付き四角形を描画する便利な方法を提供します。詳細...

Header: #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()、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()

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

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

void QOpenGLTextureBlitter::setOpacity(float opacity)

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

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

void QOpenGLTextureBlitter::setRedBlueSwizzle(bool swizzle)

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

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

[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 viewport はソースの寸法を表し,たいていの場合は (0, 0, 画像の幅, 画像の高さ) に設定されます。

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

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

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。