このページでは

QRhiColorAttachment Class

レンダリングターゲットの単色アタッチメントについて説明します。詳細...

ヘッダー: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
以下のように: Qt 6.6

パブリック関数

QRhiColorAttachment()
QRhiColorAttachment(QRhiRenderBuffer *renderBuffer)
QRhiColorAttachment(QRhiTexture *texture)
int layer() const
int level() const
(since 6.7) int multiViewCount() const
QRhiRenderBuffer *renderBuffer() const
int resolveLayer() const
int resolveLevel() const
QRhiTexture *resolveTexture() const
void setLayer(int layer)
void setLevel(int level)
(since 6.7) void setMultiViewCount(int count)
void setRenderBuffer(QRhiRenderBuffer *rb)
void setResolveLayer(int layer)
void setResolveLevel(int level)
void setResolveTexture(QRhiTexture *tex)
void setTexture(QRhiTexture *tex)
QRhiTexture *texture() const

詳細な説明

色アタッチメントは、QRhiTexture またはQRhiRenderBuffer のいずれかです。前者の場合、すなわちtexture() が設定されている場合が、ほとんどの場合に使用されます。QRhiColorAttachment は、通常、QRhiTextureRenderTargetDescription と組み合わせて使用されます。

注: texture() とrenderBuffer() を同時に設定(同時に null 以外にする)ことはできません。

renderBuffer を設定するのは、マルチサンプリングが必要な場合にのみ推奨されます。実際には、QRhi::MultisampleTexture よりもQRhi::MultisampleRenderBuffer を利用することをお勧めします。これは、前者がより多くの実行時構成で利用可能だからです(例えば、マルチサンプルテクスチャはサポートしていないが、マルチサンプルレンダーバッファはサポートしているOpenGL ES 3.0上で実行する場合など)。

マルチサンプリング非対応のテクスチャをターゲットとする場合、layer() およびlevel() は、ターゲットとなるレイヤー(キューブマップの場合は面インデックス0-5 )とミップレベルを示します。3D テクスチャの場合、layer() は、レンダリング先のスライス(3D テクスチャ内の 1 つの 2D 画像)を指定します。テクスチャ配列の場合、layer() は配列インデックスです。

texture() またはrenderBuffer() がマルチサンプルである場合、resolveTexture() はオプションで設定できます。設定すると、レンダリングパスの終了時に、サンプルはその(マルチサンプルではない)テクスチャに自動的に解決されます。マルチサンプル・レンダーバッファにレンダリングする場合、そこから解決済みでマルチサンプルではないコンテンツを取得するには、これが唯一の方法です。 マルチサンプルテクスチャではシェーダー内でのサンプリングが可能であるため、これらはあくまでオプションの一つに過ぎません。

注: リゾルブが有効になっている場合 、マルチサンプルデータはまったく書き出されない可能性があります。つまり、resolveTexture()が設定されている場合、その後でシェーダーによるサンプリングにマルチサンプルtexture()を使用してはなりません。

注:これは 互換性の保証が限定的な RHI API です。詳細については、QRhi を参照してください。

QRhiTextureRenderTargetDescriptionも参照してください 。

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

[constexpr noexcept default] QRhiColorAttachment::QRhiColorAttachment()

空のカラーアタッチメントの説明を作成します。

QRhiColorAttachment::QRhiColorAttachment(QRhiRenderBuffer *renderBuffer)

renderBuffer を関連付けられたカラーバッファとして指定する、カラーアタッチメントの記述を生成します。

QRhiColorAttachment::QRhiColorAttachment(QRhiTexture *texture)

texture を関連付けられたカラーバッファとして指定する、カラーアタッチメントの記述を作成します。

int QRhiColorAttachment::layer() const

レイヤーインデックス(キューブマップの面または配列レイヤー)を返します。デフォルトは 0 です。

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

int QRhiColorAttachment::level() const

ミップレベルを返します。デフォルトは 0 です。

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

[since 6.7] int QRhiColorAttachment::multiViewCount() const

現在設定されているビューの数を返します。デフォルトは 0 で、これはこのカラーアタッチメントを持つレンダリングターゲットがマルチビューレンダリングで使用されないことを示します。

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

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

QRhiRenderBuffer *QRhiColorAttachment::renderBuffer() const

このアタッチメント記述が参照するレンダリングバッファを返します。参照するバッファがない場合は、nullptr を返します。

実際には、マルチサンプルcolor レンダリングバッファを介してマルチサンプルレンダリングを設定し、レンダリングパスの最後にそれを非マルチサンプルテクスチャに変換する場合に、QRhiRenderBuffer をQRhiColorAttachment と関連付けることが最も理にかなっています。

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

int QRhiColorAttachment::resolveLayer() const

現在設定されているリゾルブ・テクスチャ・レイヤーを返します。デフォルトは 0 です。

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

int QRhiColorAttachment::resolveLevel() const

現在設定されている解像度テクスチャのミップレベルを返します。デフォルトは 0 です。

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

QRhiTexture *QRhiColorAttachment::resolveTexture() const

このアタッチメント記述が参照するリゾルブテクスチャを返します。参照するテクスチャが存在しない場合は、nullptr を返します。

アタッチメントがマルチサンプルテクスチャまたはレンダーバッファを参照している場合、null 以外の resolveTexture を設定できます。この場合、resolveTexture() 内の `QRhiTexture ` は、同じサイズ(ただしサンプル数は 1)の非マルチサンプル 2D テクスチャ(またはテクスチャ配列)となります。 マルチサンプルコンテンツは、各レンダリングパスの終了時に、自動的にこのテクスチャに解決されます。

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

void QRhiColorAttachment::setLayer(int layer)

layer のインデックスを設定します。

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

void QRhiColorAttachment::setLevel(int level)

ミップlevel を設定します。

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

[since 6.7] void QRhiColorAttachment::setMultiViewCount(int count)

ビューのcount を設定します。1より大きい値を設定すると、このカラーアタッチメントを持つレンダリングターゲットがマルチビューレンダリングで使用されることを示します。デフォルト値は0です。2より小さい値は、マルチビューレンダリングを行わないことを示します。

count が2 以上に設定されている場合、カラーアタッチメントは2Dテクスチャ配列に関連付けられている必要があります。layer()およびmultiViewCount()を組み合わせて、マルチビューレンダリング中にターゲットとなるテクスチャ配列要素の範囲を定義します。

たとえば、layer が0 で、multiViewCount が2 の場合、テクスチャ配列には2つ(またはそれ以上)の要素が必要であり、マルチビューレンダリングでは要素0と1が対象となります。この場合、シェーダー内のgl_ViewIndex 変数の値は0 または1 となります。ここで、view0 はテクスチャ配列の要素0 に対応し、view1 は配列の要素1 に対応します。

注: count を1より大きい値に設定し 、テクスチャ配列をtexture()として使用し、このカラーアタッチメントを持つQRhiTextureRenderTarget に対してbeginPass()を呼び出すと、レンダリングパス全体でマルチビューレンダリングが行われます。マルチビューレンダリングを意図していない限り、multiViewCount()を設定すべきではありません。 マルチビューは、2Dテクスチャ配列以外のテクスチャタイプでは使用できません(グラフィックスAPIやバックエンドによっては3Dテクスチャが機能する場合もありますが、アプリケーションではそれに依存せず、マルチビューレンダリングのレンダリングターゲットとして2Dテクスチャ配列のみを使用することを推奨します)。

マルチビューレンダリングに関する詳細については、GL_OVR_multiviewを参照してください。なお、Qt OpenGL (ES) 上で実行する場合、GL_OVR_multiview2も必要とする点に注意してください。

マルチビューレンダリングは、isFeatureSupported() からMultiView 機能がサポートされていると報告された場合にのみ利用可能です。

注: 移植性を確保するため 、一部のグラフィックス API におけるマルチビューレンダリングの制限事項に注意してください。マルチビューレンダリングパスでは、GL_OVR_multiview が非対応と宣言している機能に依存しないことを推奨します。 唯一の例外は、gl_ViewIndex に依存するgl_Position 以外のシェーダステージ出力です。これは(OpenGL であっても)信頼して使用できます。なぜなら、QRhi は、GL_OVR_multiview2 が存在しない限り、マルチビューがサポートされていると報告することは決してないからです。

注: 一部のグラフィックスAPIの実装では許可されている場合もありますが、テッセレーションやジオメトリシェーダーとの組み合わせでのマルチビュー レンダリングはサポートされていません。

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

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

void QRhiColorAttachment::setRenderBuffer(QRhiRenderBuffer *rb)

レンダリングバッファ「rb 」を設定します。

注: texture() とrenderBuffer() は、同時に設定(同時に null 以外)することはできません。

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

void QRhiColorAttachment::setResolveLayer(int layer)

使用する解像度テクスチャ「layer 」を設定します。

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

void QRhiColorAttachment::setResolveLevel(int level)

使用する解像度テクスチャのミップlevel を設定します。

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

void QRhiColorAttachment::setResolveTexture(QRhiTexture *tex)

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

tex tex は、2Dテクスチャまたは2Dテクスチャ配列であることが想定されます。いずれの場合も、リゾルブ処理は の単一レイヤー(配列要素)の単一ミップレベルを対象とします。ミップレベルと配列レイヤーは、 ()および ()によって指定されます。resolveLevel resolveLayer

例外として、multiview があります。カラーアタッチメントがテクスチャ配列に関連付けられており、マルチビューが有効になっている場合、resolveテクスチャもすべてのビューに対応する十分な要素数を持つテクスチャ配列でなければなりません。この場合、ビューに対応するすべての要素が自動的に解決されます。この動作は、以下の擬似コードに類似しています:

for (i = 0; i < multiViewCount(); ++i)
    resolve texture's layer() + i into resolveTexture's resolveLayer() + i

マルチサンプルテクスチャやレンダリングバッファを、レンダリングパスの終了時に自動的に解決するために、マルチサンプルではないテクスチャを設定することは、マルチサンプルテクスチャを直接扱う(かつ解決用テクスチャを設定しない)場合よりも好ましいことがよくあります。これは、マルチサンプルテクスチャ専用に動作するフラグメントシェーダー(sampler2DMS 、texelFetch 、 など)を扱うために専用のフラグメントシェーダーを記述する必要がなくなり、むしろ、アタッチメントのテクスチャが最初からマルチサンプルでなかった場合と同じように、同じシェーダーを使用できるようになるためです。その代償として、追加のリソース(非マルチサンプルのtex )が必要となります。

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

void QRhiColorAttachment::setTexture(QRhiTexture *tex)

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

注: texture() とrenderBuffer() は、同時に設定することはできません(同時に null 以外にすることはできません)。

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

QRhiTexture *QRhiColorAttachment::texture() const

このアタッチメント記述が参照するテクスチャを返します。該当するテクスチャがない場合は、nullptr を返します。

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

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