QRhiColorAttachment Class
レンダーターゲットの単一色アタッチメントを記述します。詳細...
Header: | #include <rhi/qrhi.h> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate) |
qmake: | QT += gui-private |
Since: | 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 を設定することをお勧めします。前者はより多くのランタイム構成で利用可能であるため(例えば、マルチサンプルテクスチャをサポートしていないが、マルチサンプルレンダーバッファをサポートしているOpenGL ES 3.0で実行する場合)、QRhi::MultisampleTexture よりも、QRhi::MultisampleRenderBuffer に依存する方が実際には良い選択です。
非マルチサンプルテクスチャをターゲットにする場合、layer() とlevel() は、ターゲットにするレイヤ(キューブマップの場合は面インデックス0-5
)とミップレベルを示します。3Dテクスチャの場合layer() は、レンダリング先のスライス(3Dテクスチャ内の1つの2D画像)を指定します。テクスチャ配列の場合layer() は配列インデックスです。
texture() またはrenderBuffer() がマルチサンプルの場合、resolveTexture() をオプションで設定できます。設定すると、レンダリングパスの最後に、サンプルは自動的にその(マルチサンプルでない)テクスチャに解決されます。マルチサンプ ルレンダバッファにレンダリングする場合、解決された非マルチサンプ ルコンテンツを取り出す唯一の方法はこれです。マルチサンプルテクスチャでは、シェーダでのサンプリングが可能であるため、これは1つのオプションに過ぎません。
注意: 解決(resolving)が有効になっている場合、マルチサンプ ルデータはまったく書き出されないことがあります。これは、resolveTexture ()が設定されている場合、マルチサンプルtexture ()は、サンプリング用のシェーダでその後使用してはならないことを意味します。
注意: これは互換性が限定的に保証された RHI API です。詳細はQRhi を参照してください。
QRhiTextureRenderTargetDescriptionも参照 。
メンバ関数ドキュメント
[constexpr noexcept]
QRhiColorAttachment::QRhiColorAttachment()
空のカラーアタッチメント記述を構築します。
QRhiColorAttachment::QRhiColorAttachment(QRhiRenderBuffer *renderBuffer)
関連する色バッファとしてrenderBuffer を指定する色添付記述を構築する。
QRhiColorAttachment::QRhiColorAttachment(QRhiTexture *texture)
関連するカラーバッファとしてtexture を指定するカラーアタッチメント記述を構築します。
int QRhiColorAttachment::layer() const
レイヤーインデックス(キューブマップ面または配列レイヤー)を返します。デフォルトは 0。
setLayer()も参照してください 。
int QRhiColorAttachment::level() const
mip レベルを返します。デフォルトは 0。
setLevel()も参照して ください。
[since 6.7]
int QRhiColorAttachment::multiViewCount() const
現在設定されているビュー数を返します。デフォルトは 0 で、この色のアタッチメントを持つレンダーターゲットはマルチビューレンダリングで使用されないことを示します。
この関数は Qt 6.7 で導入されました。
setMultiViewCount()も参照してください 。
QRhiRenderBuffer *QRhiColorAttachment::renderBuffer() const
このアタッチメントの説明が参照するレンダーバッファ、またはない場合はnullptr
を返します。
実際には、QRhiRenderBuffer をQRhiColorAttachment に関連付けることは、レンダリングパスの最後に非マルチサンプルテクスチャに解決されるマルチサンプルcolor レンダーバッファを経由してマルチサンプルレンダリングを設定するときに最も理にかなっています。
setRenderBuffer()も参照してください 。
int QRhiColorAttachment::resolveLayer() const
現在設定されているresolveテクスチャレイヤを返します。デフォルトは 0 です。
setResolveLayer() も参照 。
int QRhiColorAttachment::resolveLevel() const
現在設定されている resolve texture mip level を返します。デフォルトは 0 です。
setResolveLevel()も参照して ください。
QRhiTexture *QRhiColorAttachment::resolveTexture() const
この添付ファイルの説明が参照する resolve texture を返します。ない場合はnullptr
を返します。
NULL 以外の resolveTexture を設定するのは、アタッチメントがマルチサンプ ルテクスチャまたはレンダーバッファを参照している場合に適用されます。resolveTexture() のQRhiTexture は、同じサイズ(ただしサンプルカウントは 1)の非マルチサンプル 2D テクスチャ(またはテクスチャ配列)になります。マルチサンプルコンテンツは、各レンダーパスの終了時に自動的にこのテクスチャに解決されます。
setResolveTexture()も参照してください 。
void QRhiColorAttachment::setLayer(int layer)
layer インデックスを設定します。
layer()も参照して ください。
void QRhiColorAttachment::setLevel(int level)
miplevel を設定します。
level()も参照して ください。
[since 6.7]
void QRhiColorAttachment::setMultiViewCount(int count)
viewcount を設定します。1より大きい値を設定すると、このカラーアタッチメントのレンダーターゲットがマルチビューレンダリングで使用されることを示します。デフォルト値は0です。2より小さい値はマルチビューレンダリングを行わないことを示します。
count が2
以上に設定されている場合、カラーアタッチメントは 2D テクスチャ配列に関連付けられている必要があります。layer() とmultiViewCount() を一緒に使用すると、マルチビューレンダリング時に対象となるテクスチャ配列要素の範囲が定義されます。
たとえば、layer
が0
で、multiViewCount
が2
の場合、テクスチャ配列は 2 つ(またはそれ以上)の要素を持つ必要があり、マルチビューレンダリングは要素 0 と 1 をターゲットにします。シェーダ内の変数gl_ViewIndex
は0
または1
の値を持ち、ビュー0
はテクスチャ配列要素0
に対応し、ビュー1
は配列要素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がサポートされていないと宣言している機能には依存しないことが推奨されます。1つの例外は、gl_ViewIndex
に依存するgl_Position
以外のシェーダステージ出力です。QRhi は、GL_OVR_multiview2
も存在しない限り、マルチビューがサポートされていると報告することはないため、(OpenGL でも)依存することができます。
注意: マルチビューレンダリングは、テッセレーションやジオメトリシェーダとの組み合わせではサポートされていません。
この関数は Qt 6.7 で導入されました。
multiViewCount()も参照してください 。
void QRhiColorAttachment::setRenderBuffer(QRhiRenderBuffer *rb)
レンダーバッファrb を設定します。
注意: texture() とrenderBuffer() の両方を設定することはできません(同時に非 NULL であること)。
renderBuffer()も参照してください 。
void QRhiColorAttachment::setResolveLayer(int layer)
使用する resolve texturelayer を設定します。
resolveLayer() も参照して ください。
void QRhiColorAttachment::setResolveLevel(int level)
使用する resolve texture miplevel を設定します。
resolveLevel()も参照して ください。
void QRhiColorAttachment::setResolveTexture(QRhiTexture *tex)
resolve texturetex を設定します。
tex は 2D テクスチャまたは 2D テクスチャ配列であることが期待されます。いずれの場合も、 の単一レイヤー(配列要素)の単一ミップレベルを対象とします。ミップレベルと配列レイヤーは () と () で指定します。tex 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() も参照して ください。
©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。