QRhiTexture Class

テクスチャリソース。もっと見る

ヘッダー #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
以来:Qt 6.6
継承: QRhiResource

パブリックな型

struct NativeTexture
(since 6.8) struct ViewFormat
enum Flag { RenderTarget, CubeMap, MipMapped, sRGB, UsedAsTransferSource, …, OneDimensional }
flags Flags
enum Format { UnknownFormat, RGBA8, BGRA8, R8, RG8, …, ASTC_12x12 }

パブリック関数

int arrayRangeLength() const
int arrayRangeStart() const
int arraySize() const
virtual bool create() = 0
virtual bool createFrom(QRhiTexture::NativeTexture src)
int depth() const
QRhiTexture::Flags flags() const
QRhiTexture::Format format() const
virtual QRhiTexture::NativeTexture nativeTexture()
QSize pixelSize() const
(since 6.8) QRhiTexture::ViewFormat readViewFormat() const
int sampleCount() const
void setArrayRange(int startIndex, int count)
void setArraySize(int arraySize)
void setDepth(int depth)
void setFlags(QRhiTexture::Flags f)
void setFormat(QRhiTexture::Format fmt)
virtual void setNativeLayout(int layout)
void setPixelSize(const QSize &sz)
(since 6.8) void setReadViewFormat(const QRhiTexture::ViewFormat &fmt)
void setSampleCount(int s)
(since 6.8) void setWriteViewFormat(const QRhiTexture::ViewFormat &fmt)
(since 6.8) QRhiTexture::ViewFormat writeViewFormat() const

再実装されたパブリック関数

virtual QRhiResource::Type resourceType() const override

詳細説明

QRhiTexture はVkImageMTLTexture のようなネイティブテクスチャオブジェクトをカプセル化します。

QRhiTextureインスタンスは常にthe QRhi's newTexture() function 。これにより、ネイティブ・グラフィックス・リソースは作成されません。そのためには、フォーマットやサイズなどの適切なオプションを設定した後にcreate() を呼び出しますが、ほとんどの場合、これらはnewTexture() に渡された引数に基づいてすでに設定されています。

flags を正しく設定することが重要です。そうしないと、基盤となるQRhi バックエンドやグラフィック API によって、さまざまなエラーが発生する可能性があります。たとえば、テクスチャがQRhiTextureRenderTarget を介してレンダーパスからレンダリングされる場合、テクスチャはRenderTarget フラグが設定された状態で作成されなければなりません。同様に、テクスチャがread back になる場合は、UsedAsTransferSource フラグを前もって設定する必要があります。ミップマップされたテクスチャにはMipMapped フラグが設定されている必要があります。などです。一旦create() が成功すると、フラグを変更することはできません。既存のテクスチャを解放し、変更した設定で新しいネイティブテクスチャオブジェクトを作成するには、セッターを呼び出し、create() を再度呼び出します。この場合、コストが高くなる可能性があります。

使用例

サイズ512x512ピクセルの2Dテクスチャを作成し、その内容をすべて緑色に設定する:

QRhiTexture *texture = rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512));
if (!texture->create()) { error(); }
QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
QImage image(512, 512, QImage::Format_RGBA8888);
image.fill(Qt::green);
batch->uploadTexture(texture, image);
// ...
commandBuffer->resourceUpdate(batch); // or, alternatively, pass 'batch' to a beginPass() call

一般的なパターン

create() を呼び出すと、create() が以前に正常に呼び出された場合、既存のネイティブ・リソースが破壊されます。これらのネイティブリソースが飛行中のフレームでまだ使用されている(つまり、GPUによってまだ読み込まれている可能性がある)場合、これらのリソースの破棄は自動的に延期されます。したがって、すでに存在するテクスチャのサイズを安全に変更するための非常に一般的で便利なパターンは、次のとおりです。なぜなら、texture オブジェクト自体を破棄しないことで、他のデータ構造(たとえば、QRhiTextureが参照されるQShaderResourceBindingなど)において、それへのすべての参照が有効なままだからです。

// determine newSize, e.g. based on the swapchain's output size or other factors
if (texture->pixelSize() != newSize) {
    texture->setPixelSize(newSize);
    if (!texture->create()) { error(); }
}
// continue using texture, fill it with new data

注意: これは互換性保証が制限されたRHI APIです。詳細はQRhi を参照してください。

QRhiResourceUpdateBatchQRhiQRhiTextureRenderTargetも参照してください

メンバ型ドキュメント

enum QRhiTexture::Flag
flags QRhiTexture::Flags

テクスチャがどのように使用されるかを指定するフラグ値。create() の前に設定されたフラグに従わず、前もって宣言されていない方法でテクスチャを使用しようとすると、バックエンドや基礎となるグラフィックスAPIによっては、仕様外の動作やパフォーマンスの低下につながる可能性があります。

定数説明
QRhiTexture::RenderTarget1 << 0QRhiTextureRenderTarget と組み合わせて使用するテクスチャ。
QRhiTexture::CubeMap1 << 2テクスチャはキューブマップです。このようなテクスチャには6つのレイヤーがあり、+X、-X、+Y、-Y、+Z、-Zの順番で各面に1つずつあります。キューブマップテクスチャはマルチサンプルにできません。
QRhiTexture::MipMapped1 << 3テクスチャにはミップマップがあります。適切なミップカウントは自動的に計算され、QRhi::mipLevelsForSize() で取得することもできます。ミップレベルのイメージは、アップロードされたテクスチャで提供されるか、QRhiResourceUpdateBatch::generateMips() 経由で生成される必要があります。マルチサンプルテクスチャはミップマップを持つことができません。
QRhiTexture::sRGB1 << 4sRGB フォーマットを使用してください。
QRhiTexture::UsedAsTransferSource1 << 5テクスチャはテクスチャコピーまたはリードバックのソースとして使用されます。つまり、テクスチャはQRhiResourceUpdateBatch::copyTexture() またはQRhiResourceUpdateBatch::readBackTexture() でソースとして与えられます。
QRhiTexture::UsedWithGenerateMips1 << 6テクスチャをQRhiResourceUpdateBatch::generateMips() で使用する。
QRhiTexture::UsedWithLoadStore1 << 7テクスチャは、例えば、コンピュートシェーダにおいて、イメージのロード/ストア操作で使用されます。
QRhiTexture::UsedAsCompressedAtlas1 << 8テクスチャは圧縮されたフォーマットを持っており、サブリソースのアップロードの寸法はテクスチャサイズと一致しない可能性があります。
QRhiTexture::ExternalOES1 << 9テクスチャはOpenGLでGL_TEXTURE_EXTERNAL_OESターゲットを使用する必要があります。このフラグは他のグラフィックスAPIでは無視されます。
QRhiTexture::ThreeDimensional1 << 10テクスチャは3Dテクスチャです。このようなテクスチャは、幅と高さに加えて深さを取るQRhi::newTexture() オーバーロードで作成する必要があります。3Dテクスチャはミップマップを持つことができますが、マルチサンプルにすることはできません。3Dテクスチャにレンダリングするとき、または3Dテクスチャにデータをアップロードするとき、レンダーターゲットのカラーアタッチメントまたはアップロード記述で指定されたlayer 、範囲[0..depth-1]の単一のスライスを参照します。基礎となるグラフィックス API は、実行時に 3D テクスチャをサポートしない場合があります。サポートはQRhi::ThreeDimensionalTextures 機能で示されます。
QRhiTexture::TextureRectangleGL1 << 11テクスチャはOpenGLでGL_TEXTURE_RECTANGLEターゲットを使用する必要があります。このフラグは他のグラフィックスAPIでは無視されます。ExternalOESと同様に、このフラグは、プラットフォームから受信したネイティブOpenGLテクスチャオブジェクトがQRhiTexture 、プラットフォームが非2Dテクスチャターゲット用のテクスチャしか提供できないプラットフォームAPIで動作するときに便利です。
QRhiTexture::TextureArray1 << 12テクスチャはテクスチャ配列、つまり2Dテクスチャの均質な配列である1つのテクスチャオブジェクトです。テクスチャ配列はQRhi::newTextureArray() で作成されます。基礎となるグラフィックスAPIは、実行時にテクスチャ配列オブジェクトをサポートしていない場合があります。サポートはQRhi::TextureArrays 機能で示されます。テクスチャ配列にレンダリングするとき、またはテクスチャ配列にデータをアップロードするとき、レンダーターゲットのカラーアタッチメントまたはアップロード記述で指定されたlayer は、配列内の単一の要素を選択します。
QRhiTexture::OneDimensional1 << 13テクスチャは1Dテクスチャです。このようなテクスチャは、QRhi::newTexture() に 0 の高さと深さを渡すことで作成できます。1次元テクスチャには、基盤となるグラフィックスAPIによって制限がある場合があることに注意してください。例えば、1次元テクスチャへのレンダリングやミップマップベースのフィルタリングでの使用はサポートされていない場合があります。これはQRhi::OneDimensionalTexturesQRhi::OneDimensionalTextureMipmaps 機能フラグで示されます。

Flags 型はQFlags<Flag> の typedef です。これはFlag値のORの組み合わせを格納します。

enum QRhiTexture::Format

テクスチャフォーマットを指定します。QRhi::isTextureFormatSupported() も参照してください。また、QRhiTexture::sRGB が設定されている場合、flags() はフォーマットを変更できることに注意してください。

定数説明
QRhiTexture::UnknownFormat0有効なフォーマットではありません。これはsetFormat() には渡せない。
QRhiTexture::RGBA814成分、符号なし正規化8ビット。常にサポートされる。
QRhiTexture::BGRA824 コンポーネント、各コンポーネントにつき符号なし正規化 8 ビット。
QRhiTexture::R831コンポーネント、符号なし正規化8ビット。
QRhiTexture::RG842コンポーネント、符号なし正規化8ビット。
QRhiTexture::R1651コンポーネント、符号なし正規化16ビット。
QRhiTexture::RG1662成分、符号なし正規化16ビット。
QRhiTexture::RED_OR_ALPHA87R8と同じか、RedOrAlpha8IsRed に応じて成分がアルファ値にスウィズルされた同様のフォーマット。
QRhiTexture::RGBA16F84成分、1成分あたり16ビット浮動小数点。
QRhiTexture::RGBA32F94成分、1成分あたり32ビットfloat。
QRhiTexture::R16F101コンポーネント、16-bit float。
QRhiTexture::R32F111コンポーネント、32ビットfloat。
QRhiTexture::RGB10A2124成分、符号なし正規化10ビットR、G、B、2ビットアルファ。これはパックされたフォーマットなので、ネイティブのエンディアンが適用されます。BGR10A2がないことに注意。これは、RGB10A2がD3DのDXGI_FORMAT_R10G10B10A2_UNORM、MetalのMTLPixelFormatRGB10A2Unorm、VulkanのVK_FORMAT_A2B10G10R10_UNORM_PACK32、OpenGL(ES)のGL_RGB10_A2/GL_RGB/GL_UNSIGNED_INT_2_10_10_REVにマッピングされるためです。これは普遍的にサポートされている唯一のRGB30オプションです。対応するQImage フォーマットはQImage::Format_BGR30QImage::Format_A2BGR30_Premultiplied です。
QRhiTexture::D161316 ビット深度(正規化符号なし整数)
QRhiTexture::D241424 ビット深度(正規化符号なし整数)
QRhiTexture::D24S81524 ビ ッ ト 深度 (正規化 さ れた符号なし整数)、 8 ビ ッ ト ス テ ン シル
QRhiTexture::D32F1632ビット深度(32ビット浮動小数点)
QRhiTexture::BC117
QRhiTexture::BC218
QRhiTexture::BC319
QRhiTexture::BC420
QRhiTexture::BC521
QRhiTexture::BC6H22
QRhiTexture::BC723
QRhiTexture::ETC2_RGB824
QRhiTexture::ETC2_RGB8A125
QRhiTexture::ETC2_RGBA826
QRhiTexture::ASTC_4x427
QRhiTexture::ASTC_5x428
QRhiTexture::ASTC_5x529
QRhiTexture::ASTC_6x530
QRhiTexture::ASTC_6x631
QRhiTexture::ASTC_8x532
QRhiTexture::ASTC_8x633
QRhiTexture::ASTC_8x834
QRhiTexture::ASTC_10x535
QRhiTexture::ASTC_10x636
QRhiTexture::ASTC_10x837
QRhiTexture::ASTC_10x1038
QRhiTexture::ASTC_12x1039
QRhiTexture::ASTC_12x1240

メンバ関数ドキュメント

int QRhiTexture::arrayRangeLength() const

setArrayRange() がコールされたときに公開されていた配列範囲のサイズを返す。

setArrayRange()も参照

int QRhiTexture::arrayRangeStart() const

setArrayRange() がコールされたときの最初の配列レイヤーを返す。

setArrayRange()も参照

int QRhiTexture::arraySize() const

テクスチャ配列のサイズを返します。

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

[pure virtual] bool QRhiTexture::create()

対応するネイティブ・グラフィックス・リソースを作成する。以前の create() で対応するdestroy() がなかったためにすでにリソースが存在する場合は、destroy() が暗黙的に最初に呼び出されます。

グラフィックス操作に成功した場合はtrue を、失敗した場合はfalse を返します。返り値に関係なく、destroy() を呼び出すことは常に安全です。

[virtual] bool QRhiTexture::createFrom(QRhiTexture::NativeTexture src)

create() と似ているが、新しいネイティブテクスチャは作成されない。代わりに、src によって指定されたネイティブテクスチャリソースが使用される。

これにより、外部のグラフィックスエンジンから既存のネイティブテクスチャオブジェクト(グラフィックス API によっては、同じデバイスまたは共有コンテキストに属している必要があります)をインポートすることができます。

指定された既存のネイティブテクスチャオブジェクトが正常に非所有QRhiTexture としてラップされた場合、true を返します。

注意: format(),pixelSize(),sampleCount(),flags() は正しく設定されている必要があります。正しくないサイズやその他の値をQRhi::newTexture() に渡し、その後に createFrom() を実行することで、ネイティブのテクスチャ・オブジェクトだけでそのような値を推測できると期待するのは誤りであり、問題につながります。

注意: QRhiTexture はテクスチャオブジェクトの所有権を取りません。destroy() はオブジェクトや関連メモリを解放しません。

この操作の逆で、QRhiTexture で作成されたネイティブのテクスチャオブジェクトを外国のエンジンに公開することは、nativeTexture() で可能です。

注意: 3D テクスチャ、テクスチャ配列オブジェクト、または OpenGL ES で外部テクスチャをインポートする場合、この関数を呼び出す前にsetFlags() を使用して対応するフラグ (ThreeDimensional,TextureArray,ExternalOES) を設定することが特に重要です。

int QRhiTexture::depth() const

3D テクスチャの深度を返します。

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

QRhiTexture::Flags QRhiTexture::flags() const

テクスチャフラグを返します。

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

QRhiTexture::Format QRhiTexture::format() const

テクスチャフォーマットを返します。

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

[virtual] QRhiTexture::NativeTexture QRhiTexture::nativeTexture()

このテクスチャの基礎となるネイティブリソースを返します。基盤となるネイティブリソースの公開がバックエンドでサポートされていない場合、返される値は空になります。

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

QSize QRhiTexture::pixelSize() const

ピクセル単位のサイズを返します。

setPixelSize()も参照

[since 6.8] QRhiTexture::ViewFormat QRhiTexture::readViewFormat() const

テクスチャをサンプリングするときに使用されるビューフォーマットを返します。呼び出されない場合、ビューフォーマットはformat() と同じと見なされます。

この関数は Qt 6.8 で導入されました。

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

[override virtual] QRhiResource::Type QRhiTexture::resourceType() const

再実装:QRhiResource::resourceType() const.

リソース型を返します。

int QRhiTexture::sampleCount() const

サンプル数を返します。1 は、マルチサンプル アンチエイリアシングを行わないことを意味します。

setSampleCount()も参照

void QRhiTexture::setArrayRange(int startIndex, int count)

通常、すべての配列レイヤは公開され、sampler2DArray をサンプリングするときにtexture() GLSL 関数に渡される 3 番目の座標を介してレイヤを選択するのはシェーダ次第です。QRhi::TextureArrayRange がサポートされていると報告された場合、create() またはcreateFrom() の前に setArrayRange() を呼び出すと、指定された範囲、startIndex から始まるcount 要素のみを選択するように要求されます。 シェーダロジックは、このことを念頭に置いて記述できます。

QRhi::TextureArrayRangeも参照してください

void QRhiTexture::setArraySize(int arraySize)

テクスチャarraySize を設定します。

arraySize()も参照

void QRhiTexture::setDepth(int depth)

3D テクスチャのdepth を設定します。

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

void QRhiTexture::setFlags(QRhiTexture::Flags f)

テクスチャフラグをf に設定します。

flags()も参照

void QRhiTexture::setFormat(QRhiTexture::Format fmt)

要求されたテクスチャフォーマットをfmt に設定します。

注意: 設定された値は、次にcreate ()を呼び出すとき、つまり基礎となるグラフィック・リソースが(再)作成されるときにのみ考慮されます。そうでない場合、新しい値を設定しても無駄であり、一貫性のない状態になる可能性があるため、避けなければならない。

format()も参照

[virtual] void QRhiTexture::setNativeLayout(int layout)

VulkanのようないくつかのグラフィックスAPIでは、グラフィックスAPIを直接使用するカスタムレンダリングコードの統合は、画像レイアウトに関しては特別な注意が必要です。この関数を使用すると、ネイティブのレンダリングコマンドの後に、QRhiTexture のイメージのバッキングが予想されるlayout を伝えることができます。

たとえば、QRhiCommandBuffer::beginExternal() とQRhiCommandBuffer::endExternal() で囲まれたコードブロックで、QRhiTexture's VkImage に直接 Vulkan でレンダリングし、その後、QRhi-based render pass でテクスチャサンプリングのために画像を使用することを考えます。潜在的に不正確なイメージレイアウトの遷移を避けるために、この関数を使用して、前記コードブロックに記録されたコマンドが完了すると、イメージレイアウトがどうなるかを示すことができます。

この関数を呼び出すのは、QRhiCommandBuffer::endExternal ()の後と、それに続くQRhiCommandBuffer::beginPass ()の前だけです。

この関数は、基礎となる Graphical API が画像レイアウトの概念を公開しないQRhi バックエンドでは効果がありません。

注: Vulkanの場合、layoutVkImageLayout です。 Direct 3D 12の場合、layoutD3D12_RESOURCE_STATES のビットから構成される値です。

void QRhiTexture::setPixelSize(const QSize &sz)

ピクセル単位で指定されたテクスチャサイズをsz に設定します。

注意: 設定された値は、次にcreate() を呼び出すとき、つまり基礎となるグラフィック・リソースが(再)作成されるときにのみ考慮されます。そうでない場合、新しい値を設定しても無駄であり、一貫性のない状態になる可能性があるため、避けなければなりません。他のすべてのセッターも同様です。

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

[since 6.8] void QRhiTexture::setReadViewFormat(const QRhiTexture::ViewFormat &fmt)

シェーダーリソースビューフォーマット(またはテクスチャをサンプリングするために使用されるビューのフォーマット)をfmt に設定します。 デフォルトでは、テクスチャそのものと同じフォーマット(およびsRGB-ness)が使用され、ほとんどの場合、この関数を呼び出す必要はありません。

この設定は、TextureViewFormat機能がサポートされていると報告された場合にのみ考慮されます。

注意: この機能は、シェーダが暗黙のsRGB変換を実行するかしないかを読み取るために、non-sRGBとsRGB間の「キャスト」を可能にするために提供されています。他のタイプのキャストは機能する場合としない場合があります。

この関数は Qt 6.8 で導入されました。

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

void QRhiTexture::setSampleCount(int s)

サンプル数をs に設定する。

sampleCount()も参照のこと

[since 6.8] void QRhiTexture::setWriteViewFormat(const QRhiTexture::ViewFormat &fmt)

レンダーターゲットのビューフォーマットをfmt に設定します。デフォルトでは、テクスチャ自体と同じフォーマット(およびsRGB-ness)が使用され、ほとんどの場合、この関数を呼び出す必要はありません。

書き込みビューフォーマットを提供するための1つの一般的なユースケースは、私たちの制御の範囲外で、VulkanやDirect 3Dのような3D APIでsRGBフォーマットを使用する外部提供のテクスチャを扱うことですが、レンダリングエンジンは、そのシェーディングパイプラインの最後に線形化とsRGBへの変換を処理するようにすでに準備されています。この場合、このようなテクスチャにレンダリングするときに必要なのは、同じ、しかし非sRGBフォーマットを持つレンダーターゲットビュー(VkImageViewなど)です。(例えば、OpenXRの実装からVK_FORMAT_R8G8B8A8_SRGBテクスチャを取得した場合、レンダリングエンジンのパイプラインが要求するものであれば、VK_FORMAT_R8G8B8A8_UNORMビューを使用してレンダリングする必要があります。この例では、フォーマットがQRhiTexture::RGBA8srgbfalse に設定されたViewFormat を使用してこの関数を呼び出します。)

この設定は、TextureViewFormat 機能がサポートされていると報告された場合にのみ考慮されます。

注意: この機能は、シェーダが暗黙の sRGB 変換を実行しない、または実行するように、non-sRGB と sRGB 間の「キャスト」を可能にするために提供されています。他のタイプのキャストは機能する場合としない場合があります。

この関数は Qt 6.8 で導入されました。

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

[since 6.8] QRhiTexture::ViewFormat QRhiTexture::writeViewFormat() const

テクスチャに書き込むとき、および image load/store で使用するときに使用されるビューフォーマットを返します。呼び出されない場合、ビューフォーマットはformat() と同じと見なされます。

この関数は Qt 6.8 で導入されました。

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

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