QSGTexture Class
QSGTexture クラスは、シーングラフで使用されるテクスチャの基本クラスです。詳細...
Header: | #include <QSGTexture> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
qmake: | QT += quick |
Inherits: | QObject |
Inherited By: |
パブリックタイプ
enum | AnisotropyLevel { AnisotropyNone, Anisotropy2x, Anisotropy4x, Anisotropy8x, Anisotropy16x } |
enum | Filtering { None, Nearest, Linear } |
enum | WrapMode { Repeat, ClampToEdge, MirroredRepeat } |
パブリック関数
QSGTexture() | |
virtual | ~QSGTexture() override |
QSGTexture::AnisotropyLevel | anisotropyLevel() const |
(since 6.0) virtual void | commitTextureOperations(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates) |
virtual qint64 | comparisonKey() const = 0 |
QRectF | convertToNormalizedSourceRect(const QRectF &rect) const |
QSGTexture::Filtering | filtering() const |
virtual bool | hasAlphaChannel() const = 0 |
virtual bool | hasMipmaps() const = 0 |
QSGTexture::WrapMode | horizontalWrapMode() const |
virtual bool | isAtlasTexture() const |
QSGTexture::Filtering | mipmapFiltering() const |
QNativeInterface * | nativeInterface() const |
virtual QRectF | normalizedTextureSubRect() const |
virtual QSGTexture * | removedFromAtlas(QRhiResourceUpdateBatch *resourceUpdates = nullptr) const |
(since 6.0) virtual QRhiTexture * | rhiTexture() const |
void | setAnisotropyLevel(QSGTexture::AnisotropyLevel level) |
void | setFiltering(QSGTexture::Filtering filter) |
void | setHorizontalWrapMode(QSGTexture::WrapMode hwrap) |
void | setMipmapFiltering(QSGTexture::Filtering filter) |
void | setVerticalWrapMode(QSGTexture::WrapMode vwrap) |
virtual QSize | textureSize() const = 0 |
QSGTexture::WrapMode | verticalWrapMode() const |
詳細説明
ユーザーは、YUVビデオフレームや8ビットアルファマスクなどの任意の入力テクスチャをサポートするために、独自のテクスチャクラスを自由に実装することができます。シーングラフは、RGBA テクスチャのデフォルト実装を提供します。デフォルト実装は直接インスタンス化されず、QQuickWindow::createTextureFromImage() などのファクトリ関数によって構築されます。
デフォルトの実装では、各 QSGTexture はQRhiTexture でサポートされ、この には OpenGL テクスチャや Vulkan イメージなどのネイティブテクスチャオブジェクトが含まれます。
ピクセル単位のサイズはtextureSize() で与えられます。hasAlphaChannel() は、テクスチャに不透明度が含まれているかどうかを報告し、hasMipmaps() は、テクスチャにミップマップレベルが含まれているかどうかを報告します。
Materials テクスチャを扱う QSGTexture は、 () を再実装して、特定のシェーダ・リソース・バインディング・ポイントでどの QSGTexture の基礎となるネイティブ・テクスチャを公開すべきかを決定するロジックを提供します。updateSampledImage
QSGTexture は、イメージ(テクスチャ)オブジェクトとサンプラーオブジェクトを分離しません。フィルタリングとラッピングのパラメータは、setMipmapFiltering ()、setFiltering ()、setHorizontalWrapMode ()、setVerticalWrapMode ()で指定できます。シーングラフとQtのグラフィックスの抽象化によって、サンプラーオブジェクトを分離することができます。
テクスチャ・アトラス
シーングラフのバックエンドの中には、複数の小さなテクスチャを1つの大きなテクスチャにまとめるテクスチャアトラスを使うものがあります。この場合、関数isAtlasTexture() は true を返します。アトラスは、レンダリングアルゴリズムがより良いソートを行うのを補助し、パフォーマンスを向上させるために使用されます。アトラスはバッチ処理(ジオメトリをマージして描画呼び出し回数を減らす)にも不可欠です。2つの異なる QSGTexture を使用した同じマテリアルの2つのインスタンスはバッチ処理できませんが、両方の QSGTexture が同じアトラスを参照している場合は、マテリアルに互換性があればバッチ処理できます。
アトラス内のテクスチャの位置は、normalizedTextureSubRect ()関数で与えられます。
テクスチャがアトラスが好ましくない方法で使用される場合、removedFromAtlas() 関数を使用して、アトラスでないコピーを抽出できます。
注意: QSG 接頭辞を持つすべてのクラスは、シーングラフのレンダリングスレッドでのみ使用する必要があります。詳細については、シーングラフとレンダリングを参照してください。
メンバータイプ ドキュメント
enum QSGTexture::AnisotropyLevel
テクスチャがスクリーンアライメントされていないときに使用される異方性フィルタリングレベルを指定する。
定数 | 値 | 説明 |
---|---|---|
QSGTexture::AnisotropyNone | 0 | 異方性フィルタリングなし。 |
QSGTexture::Anisotropy2x | 1 | 2x 異方性フィルタリング。 |
QSGTexture::Anisotropy4x | 2 | 4倍の異方性フィルタリング。 |
QSGTexture::Anisotropy8x | 3 | 8倍の異方性フィルタリング。 |
QSGTexture::Anisotropy16x | 4 | 16x 異方性フィルタリング。 |
enum QSGTexture::Filtering
テクスチャ座標がピクセル整列されていない場合に、テクスチャのサンプリングがどのようにフィルタリングされるかを指定します。
定数 | 値 | 説明 |
---|---|---|
QSGTexture::None | 0 | フィルタリングを行わない。この値はsetMipmapFiltering() とともにのみ使用されます。 |
QSGTexture::Nearest | 1 | サンプリングは、最も近いテクセルを返します。 |
QSGTexture::Linear | 2 | サンプリングは、隣接するテクセル間の線形補間を返します。 |
enum QSGTexture::WrapMode
サンプラーがテクスチャ座標をどのように扱うかを指定します。
定数 | 値 | 説明 |
---|---|---|
QSGTexture::Repeat | 0 | テクスチャ座標の分数部分のみが使用され、1より上と0より下の値が繰り返されます。 |
QSGTexture::ClampToEdge | 1 | 1以上の値は1にクランプされ、0以下の値は0にクランプされます。 |
QSGTexture::MirroredRepeat | 2 | テクスチャ座標が偶数の場合、小数部のみが使用される。奇数の場合、テクスチャ座標は1 - fractional part に設定されます。この値は Qt 5.10 で導入されました。 |
メンバ関数 ドキュメント
QSGTexture::QSGTexture()
QSGTexture ベースクラスを構築します。
[override virtual noexcept]
QSGTexture::~QSGTexture()
QSGTexture を破棄します。
QSGTexture::AnisotropyLevel QSGTexture::anisotropyLevel() const
このテクスチャのフィルタリングに使用されている異方性レベルを返します。
setAnisotropyLevel()も参照してください 。
[virtual, since 6.0]
void QSGTexture::commitTextureOperations(QRhi *rhi, QRhiResourceUpdateBatch *resourceUpdates)
resourceUpdates への画像アップロード操作が保留されている場合は、この関数を呼び出してエンキューします。新しいデータがない場合(たとえば、この関数を最後にコールしてから setImage() がなかった場合など)、この関数は何もしません。
rhi テクスチャを含むマテリアルは、そのupdateSampledImage() 実装からこの関数を呼び出すことが期待されます。通常、この関数は無条件で呼び出され、state.rhi()
とstate.resourceUpdateBatch()
をQSGMaterialShader::RenderState から渡します。
警告 この関数はレンダリングスレッドからのみ呼び出すことができます。
この関数は Qt 6.0 で導入されました。
[pure virtual]
qint64 QSGTexture::comparisonKey() const
テクスチャの比較に適したキーを返します。通常、QSGMaterial::compare() の実装で使用されます。
同じネイティブテクスチャオブジェクトを参照する2つのQSGTexture インスタンスも等しいと見なされる必要があるため、QSGTexture ポインタを比較するだけでは必ずしも十分ではありません。そのため、この関数が必要になります。
この関数の実装は、グラフィックス・リソース(ネイティブ・テクスチャ・オブジェクト)を生成することを期待されていません。
下にネイティブ・テクスチャ・オブジェクトを持たないQSGTexture は、通常、他のQSGTexture と等しくないので、戻り値はそれに応じて細工されなければなりません。これには例外があり、特にアトレーシングが使用される場合(複数のテクスチャがフードの下で同じアトラステクスチャを共有する場合)は、サブクラスの実装次第で適切に対処できます。
警告 この関数はレンダリングスレッドからのみ呼び出すことができます。
QRectF QSGTexture::convertToNormalizedSourceRect(const QRectF &rect) const
正規化座標に変換されたrect を返します。
normalizedTextureSubRect()も参照してください 。
QSGTexture::Filtering QSGTexture::filtering() const
このテクスチャに使用するサンプリングモードを返します。
setFiltering()も参照して ください。
[pure virtual]
bool QSGTexture::hasAlphaChannel() const
テクスチャデータにアルファチャンネルが含まれている場合は true を返します。
[pure virtual]
bool QSGTexture::hasMipmaps() const
テクスチャデータにミップマップレベルが含まれている場合は true を返します。
QSGTexture::WrapMode QSGTexture::horizontalWrapMode() const
このテクスチャに使用する水平ラップモードを返します。
setHorizontalWrapMode()も参照してください 。
[virtual]
bool QSGTexture::isAtlasTexture() const
このテクスチャがアトラスの一部であるかどうかを返します。
デフォルトの実装は false を返します。
QSGTexture::Filtering QSGTexture::mipmapFiltering() const
このテクスチャからサンプリングするときにミップマッピングを使用するかどうかを返します。
setMipmapFiltering()も参照してください 。
template <typename QNativeInterface> QNativeInterface *QSGTexture::nativeInterface() const
テクスチャの指定されたタイプのネイティブインターフェイスを返します。
この関数は、QNativeInterface 名前空間で宣言されているQSGTexture のプラットフォーム固有の機能へのアクセスを提供します:
Direct3D 11 テクスチャオブジェクトへのアクセスを提供し、Direct3D 11 テクスチャオブジェクトの採用を可能にします。 | |
Direct3D 12 テクスチャオブジェクトへのアクセスを提供し、Direct3D 12 テクスチャオブジェクトの採用を可能にします。 | |
Metal テクスチャオブジェクトへのアクセスを提供し、Metal テクスチャオブ ジェクトの採用を可能にします。 | |
OpenGLテクスチャオブジェクトへのアクセスを提供し、OpenGLテクスチャオブジェクトの採用を可能にします。 | |
Vulkanイメージオブジェクトへのアクセスを提供し、Vulkanイメージオブジェクトの採用を可能にします。 |
これは、OpenGLではGLuint
テクスチャID、VulkanではVkImage
ハンドルのような、基礎となるネイティブテクスチャオブジェクトへのアクセスを可能にします。
要求されたインターフェースが利用できない場合は、nullptr
。
[virtual]
QRectF QSGTexture::normalizedTextureSubRect() const
このテクスチャが表すtextureSize() 内の矩形を正規化座標で返します。
デフォルトの実装は、位置 (0, 0) で幅と高さが 1 の矩形を返します。
[virtual]
QSGTexture *QSGTexture::removedFromAtlas(QRhiResourceUpdateBatch *resourceUpdates = nullptr) const
この関数は、アトラスから削除された現在のテクスチャのコピーを返します。
現在のテクスチャは変更されないので、テクスチャ座標を更新する必要はありません。
アトラスからテクスチャを削除することは、主に、アトラス内のテクスチャサブレクトの代わりにテクスチャ座標0-1で操作するシェーダに渡すときに便利です。
テクスチャがテクスチャアトラスの一部でない場合、この関数は0を返します。
この関数の実装では、メモリ使用量を制限するために、複数の呼び出しに対して同じインスタンスを返すことが推奨されます。
resourceUpdates はオプションのリソース更新バッチで、テクスチャ操作がある場合は、その操作がエンキューされます。マテリアルは、 からインスタンスを取得できます。 NULL の場合、removedFromAtlas() 実装は独自のバッチを作成し、すぐにそれをサブミットします。ただし、有効なインスタンスが指定されている場合、この関数は更新バッチを送信しません。QSGMaterialShader::RenderState
警告: この関数は、レンダリングスレッドからのみ呼び出すことができます。
[virtual, since 6.0]
QRhiTexture *QSGTexture::rhiTexture() const
有効なテクスチャがまだ内部で作成されていないか、コンセプトが使用中の scenegraph バックエンドに適用されないため)このQSGTexture のQRhiTexture を返すか、NULL を返します。
この関数は、QRhiTexture がない場合、新しい を作成することは期待されていません。その場合はNULLを返す必要があります。レンダラーに期待されることは、NULLテクスチャは、代わりに透明なダミーテクスチャを使用することにつながるということです。
警告 この関数はレンダリングスレッドからのみ呼び出すことができます。
この関数は Qt 6.0 で導入されました。
void QSGTexture::setAnisotropyLevel(QSGTexture::AnisotropyLevel level)
異方性フィルタリングのレベルをlevel に設定します。デフォルト値はQSGTexture::AnisotropyNone で、これは異方性フィルタリングが有効になっていないことを意味します。
注意: 使用されているグラフィックス API によっては、このリクエストは無視されるかもしれません。実行時に異方性フィルタリングがサポートされている保証はありません。
anisotropyLevel()も参照 。
void QSGTexture::setFiltering(QSGTexture::Filtering filter)
サンプリング・モードをfilter に設定します。
filtering() も参照して ください。
void QSGTexture::setHorizontalWrapMode(QSGTexture::WrapMode hwrap)
水平ラップ・モードをhwrap
horizontalWrapMode() も参照 。
void QSGTexture::setMipmapFiltering(QSGTexture::Filtering filter)
ミップマップのサンプリング・モードをfilter に設定します。
テクスチャにミップマップがない場合、ミップマップフィルタリングを設定しても効果はありません。
mipmapFiltering() およびhasMipmaps()も参照してください 。
void QSGTexture::setVerticalWrapMode(QSGTexture::WrapMode vwrap)
垂直ラップモードをvwrap
verticalWrapMode() も参照 。
[pure virtual]
QSize QSGTexture::textureSize() const
テクスチャのサイズをピクセル単位で返します。
QSGTexture::WrapMode QSGTexture::verticalWrapMode() const
このテクスチャに使用する垂直ラップモードを返します。
setVerticalWrapMode() も参照して ください。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。