QRhiCommandBuffer 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

パブリックな型

enum BeginPassFlag { ExternalContent, DoNotTrackResourcesForCompute }
flags BeginPassFlags
DynamicOffset
enum IndexFormat { IndexUInt16, IndexUInt32 }
VertexInput

パブリック関数

void beginComputePass(QRhiResourceUpdateBatch *resourceUpdates = nullptr, QRhiCommandBuffer::BeginPassFlags flags = {})
void beginExternal()
void beginPass(QRhiRenderTarget *rt, const QColor &colorClearValue, const QRhiDepthStencilClearValue &depthStencilClearValue, QRhiResourceUpdateBatch *resourceUpdates = nullptr, QRhiCommandBuffer::BeginPassFlags flags = {})
void debugMarkBegin(const QByteArray &name)
void debugMarkEnd()
void debugMarkMsg(const QByteArray &msg)
void dispatch(int x, int y, int z)
void draw(quint32 vertexCount, quint32 instanceCount = 1, quint32 firstVertex = 0, quint32 firstInstance = 0)
void drawIndexed(quint32 indexCount, quint32 instanceCount = 1, quint32 firstIndex = 0, qint32 vertexOffset = 0, quint32 firstInstance = 0)
void endComputePass(QRhiResourceUpdateBatch *resourceUpdates = nullptr)
void endExternal()
void endPass(QRhiResourceUpdateBatch *resourceUpdates = nullptr)
double lastCompletedGpuTime()
const QRhiNativeHandles *nativeHandles()
void resourceUpdate(QRhiResourceUpdateBatch *resourceUpdates)
void setBlendConstants(const QColor &c)
void setComputePipeline(QRhiComputePipeline *ps)
void setGraphicsPipeline(QRhiGraphicsPipeline *ps)
void setScissor(const QRhiScissor &scissor)
void setShaderResources(QRhiShaderResourceBindings *srb = nullptr, int dynamicOffsetCount = 0, const QRhiCommandBuffer::DynamicOffset *dynamicOffsets = nullptr)
void setStencilRef(quint32 refValue)
void setVertexInput(int startBinding, int bindingCount, const QRhiCommandBuffer::VertexInput *bindings, QRhiBuffer *indexBuf = nullptr, quint32 indexOffset = 0, QRhiCommandBuffer::IndexFormat indexFormat = IndexUInt16)
void setViewport(const QRhiViewport &viewport)

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

virtual QRhiResource::Type resourceType() const override

詳細説明

現時点ではアプリケーションからは作成できない。有効なQRhiCommandBufferを取得する唯一の方法は、QRhiSwapChain::currentFrameCommandBuffer ()を介して対象のスワップチェーンから取得するか、完全にオフスクリーンでレンダリングする場合は、QRhi::beginOffscreenFrame ()を介して初期化することです。

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

メンバー型ドキュメント

enum QRhiCommandBuffer::BeginPassFlag
flags QRhiCommandBuffer::BeginPassFlags

QRhi::beginPass() のフラグ値

定数説明
QRhiCommandBuffer::ExternalContent0x01このパスでQRhiCommandBuffer::beginExternal() の呼び出しがあることを指定します。このフラグが設定されておらず、beginExternal() が呼び出されたままの場合、一部のバックエンド、特に Vulkan は失敗します。
QRhiCommandBuffer::DoNotTrackResourcesForCompute0x02このパスで使用されるリソースを追跡する必要がないことを指定します。そのような追跡の唯一の目的は、計算のためのバリアを生成することです。フレーム内に計算パスがないことを意味します。これは、特定のバックエンド、特にOpenGLによって考慮される可能性のある最適化のヒントであり、特定の操作をスキップすることを可能にします。フレーム内のレンダーパスにこのフラグが設定されている場合、そのフレームでbeginComputePass() を呼び出すと、レンダーパスとコンピュートパスのリソース依存関係によっては予期しない動作になる可能性があります。

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

[alias] QRhiCommandBuffer::DynamicOffset

QPair<int, quint32>の同義語。最初のエントリはバインディングで、2番目はバッファ内のオフセットです。

enum QRhiCommandBuffer::IndexFormat

インデックスのデータ型を指定する

定数説明
QRhiCommandBuffer::IndexUInt160符号なし16ビット(quint16)
QRhiCommandBuffer::IndexUInt321符号なし32ビット(quint32)

[alias] QRhiCommandBuffer::VertexInput

QPair<QRhiBuffer *, quint32>の同義語。2番目のエントリは、1番目のエントリで指定されたバッファ内のオフセットです。

メンバ関数ドキュメント

void QRhiCommandBuffer::beginComputePass(QRhiResourceUpdateBatch *resourceUpdates = nullptr, QRhiCommandBuffer::BeginPassFlags flags = {})

新しいコンピュート・パスの開始を記録する。

resourceUpdatesNULLでない場合は、コミットされ、その後リリースされるリソース更新バッチを指定します。

注意: パス間で状態やリソースバインディングが持続すると仮定しないでください。

注意 : コンピュートパスは、setComputePipeline()、setShaderResources()、dispatch()コールを記録することができます。デバッグマーカーやbeginExternal ()などの一般的な機能は、レンダーパスとコンピュートパスの両方で使用できます。

注: 計算機能は、Compute 機能がサポートされていると報告された場合にのみ使用できます。

flags は現在使用されていません。

void QRhiCommandBuffer::beginExternal()

アプリケーションが、グラフィックスAPI関数を直接呼び出してカレントパスのコマンドバッファにコマンドをエンキューしようとする前に呼び出される。

注意: この関数は、beginPass ()またはbeginComputePass ()でインテントが前もって宣言されている場合にのみ使用できます。したがって、この関数は、パス記録がQRhiCommandBuffer::ExternalContent を指定して開始された場合にのみ呼び出される必要があります。

Vulkan、Metal、または Direct3D 12 では、nativeHandles() を介してネイティブコマンドバッファまたはエンコーダオブジェクトを照会し、それらにコマンドをエンキューできます。OpenGLまたはDirect3D 11では、(デバイス)コンテキストはQRhi::nativeHandles ()から取得できます。しかし、QRhiCommandBuffer の状態が最新であることを保証しなければ、このようなことは決して行ってはならない。したがって、beginExternal()とendExternal()の間に、外部から追加されたコマンドの記録をラップする必要がある。概念的には、これはQPainterbeginNativePainting() およびendNativePainting() 関数と同じである。

特にOpenGLの場合、この関数には追加のタスクがある:それは、コンテキストが現在のスレッドでカレントになっていることを確認することである。

注意: beginExternal()が呼び出されると、endExternal()が呼び出されるまで、QRhiCommandBuffer 上で他のレンダーパス固有の関数(set* またはdraw* )を呼び出してはならない。

警告 バックエンドによっては、beginExternal() -endExternal() ブロックの内部で、QRhiCommandBuffer::nativeHandles() から、プライマリとは異なるネイティブ・コマンド・バッファ・オブジェクトを返すことがある。したがって、beginExternal()を呼び出した後、ネイティブコマンドバッファオブジェクトに(再)問い合わせることが重要である。実用的には、これは、例えばVulkanでは、外部で記録されたVulkanコマンドが(VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BITを持つ)セカンダリコマンドバッファに配置されることを意味します。nativeHandles() は、begin/endExternal の間に呼び出されると、このセカンダリコマンドバッファを返します。

endExternal() およびnativeHandles()も参照のこと

void QRhiCommandBuffer::beginPass(QRhiRenderTarget *rt, const QColor &colorClearValue, const QRhiDepthStencilClearValue &depthStencilClearValue, QRhiResourceUpdateBatch *resourceUpdates = nullptr, QRhiCommandBuffer::BeginPassFlags flags = {})

レンダーターゲットrt を対象とした新しいレンダーパスの開始を記録する。

resourceUpdatesNULLでない場合、コミットされ、その後リリースされるリソース更新バッチを指定します。

レンダーターゲットの色と深度/ステンシルバッファは通常クリアされる。クリア値はcolorClearValuedepthStencilClearValue で指定される。例外は、レンダーターゲットがQRhiTextureRenderTarget::PreserveColorContents および/またはQRhiTextureRenderTarget::PreserveDepthStencilContents で作成された場合です。この場合、クリア値は無視されます。

注意: 保存されたカラーまたは深度コンテンツを有効にすると、基 盤となるハードウェアによってはパフォーマンスが低下します。タイルアーキテクチャを持つモバイル GPU では、タイルバッファに以前のコンテンツを再ロードする必要がないため、メリットがあります。同様に、QRhiTexture をデプスバッファとするQRhiTextureRenderTarget は、QRhiRenderBuffer よりも効率的ではありません。なぜなら、デプステクスチャを使用するとデータを書き出す必要が生じますが、レンダーバッファではその必要がないからです(API がレンダーバッファからのサンプリングや読み込みを許可しないため)。

Note: パス間でステートやリソースバインディングが持続すると仮定しないでください。

:QRhiCommandBuffersetdraw 関数は、パスの内部でのみ呼び出すことができます。また、setGraphicsPipeline ()を除き、これらの関数は、コマンドバッファにパイプラインセットがすでに設定されていることを想定しています。バックエンドによっては、そうでない場合、不特定の問題が発生する可能性がある。

rtQRhiTextureRenderTarget の場合、beginPass() は、レンダーターゲットから参照されるテクスチャとレンダーバッファオブジェクトが最新であるかどうかのチェックを実行する。これは、QRhiShaderResourceBindings に対してsetShaderResources() が行うことと同様である。QRhiTextureRenderTarget::create() 以降にアタッチメントのいずれかが再構築されていた場合、rt で create() が暗黙的に呼び出される。したがって、rtQRhiTexture カラーアタッチメントtexture があり、テクスチャを異なるサイズにする必要がある場合、以下のようにすることが有効である:

QRhiTextureRenderTarget *rt = rhi->newTextureRenderTarget({ { texture } });
rt->create();
// ...
texture->setPixelSize(new_size);
texture->create();
cb->beginPass(rt, colorClear, dsClear); // this is ok, no explicit rt->create() is required before

flags 特定の高度な機能を制御できるようにします。よく使われるフラグの1つは です。これは、この関数によって開始されるパス内で () が呼び出されるときは常に指定する必要があります。ExternalContents beginExternal

endPass() およびBeginPassFlagsも参照してください

void QRhiCommandBuffer::debugMarkBegin(const QByteArray &name)

指定されたデバッググループを、指定されたname でコマンドバッファに記録します。これはRenderDocや XCodeのようなグラフィックデバッグツールで表示されます。グループ化の終わりはdebugMarkEnd() で示される。

注: QRhi::DebugMarkers がサポートされていないか、QRhi::EnableDebugMarkers が設定されていない場合は無視される。

注: パスの内外を問わず、フレーム内の任意の場所で呼び出すことができます。

void QRhiCommandBuffer::debugMarkEnd()

デバッググループの終了を記録する。

注: QRhi::DebugMarkers がサポートされていないか、QRhi::EnableDebugMarkers が設定されていない場合は無視される。

注: パスの内外を問わず、フレーム内の任意の場所で呼び出すことができる。

void QRhiCommandBuffer::debugMarkMsg(const QByteArray &msg)

デバッグ・メッセージmsg をコマンド・ストリームに挿入する。

注: QRhi::DebugMarkers がサポートされていないか、QRhi::EnableDebugMarkers が設定されていない場合は無視される。

: バックエンドによっては、debugMarkMsg() はパスの内部でのみサポートされ、パスの外部で呼び出されると無視されます。その他のバックエンドでは、フレーム内のどこにいても記録されます。

void QRhiCommandBuffer::dispatch(int x, int y, int z)

xy 、およびz は、対応するディメンジョンのローカルワークグルー プの数を指定します。

注意 : この関数は、計算パスの内部、つまりbeginComputePass() とendComputePass() 呼び出しの間でのみ呼び出すことができます。

注: xyz は、実行時に基礎となるグラフィックス API 実装からの制限に適合する必要があります。最大値は通常65535である。

注意: ローカルワークグループサイズも制限される可能性があるので注意し てください。これはシェーダで指定されます(例:layout(local_size_x = 16, local_size_y = 16) in; )。たとえば、OpenGL では、1 つのローカルワー クグループ(local_size_xlocal_size_ylocal_size_z の積)内の呼び出し数の仕様で義務付けられた最小値は 1024 ですが、OpenGL ES(3.1)では 128 になる可能性があります。つまり、上記の例は、OpenGL ESの実装によっては、呼び出し数が256であるため、拒否される可能性があります。

void QRhiCommandBuffer::draw(quint32 vertexCount, quint32 instanceCount = 1, quint32 firstVertex = 0, quint32 firstInstance = 0)

インデックスを持たない描画を記録する。

頂点数はvertexCount で指定する。インスタンス描画の場合はinstanceCount に 1 以外の値を設定する。firstVertex は最初に描画する頂点のインデックス。複数のインスタンスを描画する場合、最初のインスタンス ID はfirstInstance で指定します。

注: firstInstance はサポートされていない場合があり、QRhi::BaseInstance 機能がサポートされていないと報告された場合は無視されます。その場合、最初の ID は常に 0 になります。

注: この関数は、レンダーパスの内部、つまりbeginPass() とendPass() の呼び出しの間でのみ呼び出すことができます。

void QRhiCommandBuffer::drawIndexed(quint32 indexCount, quint32 instanceCount = 1, quint32 firstIndex = 0, qint32 vertexOffset = 0, quint32 firstInstance = 0)

インデックス付きドローを記録する。

頂点数はindexCount で指定する。firstIndex は基本インデックス。インデックス・バッファ内の有効オフセットはindexOffset + firstIndex * n で指定します。n はインデックス要素のタイプによって 2 または 4 になります。indexOffsetsetVertexInput() で指定します。

注意: インデックス・バッファの有効オフセットは、いくつかのバックエンド(例えばMetal)では4バイト・アラインでなければなりません。これらのバックエンドでは、NonFourAlignedEffectiveIndexBufferOffset 機能はサポートされていないと報告されます。

インスタンス描画の場合は、instanceCount に 1 以外の値を設定してください。複数のインスタンスを描画する場合、最初のインスタンス ID はfirstInstance で指定します。

注: firstInstance はサポートされていない可能性があり、QRhi::BaseInstance 機能がサポートされていないと報告された場合は無視されます。その場合、最初のIDは常に0となります。

vertexOffset ( とも呼ばれる) は符号付き値で、頂点バッファにインデックスを付ける前に要素インデックスに追加されます。この値は、 がサポートされていないと報告された場合は無視されます。base vertex QRhi::BaseVertex

注意: この関数は、レンダーパスの内部、つまりbeginPass() とendPass() の呼び出しの間でのみ呼び出すことができます。

void QRhiCommandBuffer::endComputePass(QRhiResourceUpdateBatch *resourceUpdates = nullptr)

現在のコンピュートパスを終了するレコード。

resourceUpdatesNULLでない場合は、コミットされた後に解放されるリソース更新バッチを指定します。

void QRhiCommandBuffer::endExternal()

外部から追加されたコマンドがコマンドバッファまたはコンテキストに記録されると、呼び出される。

注意: この関数を呼び出した後は、QRhiCommandBuffer の状態はすべて無効であると見なさなければならない。外部コマンドの後にさらに描画コールが記録される場合、パイプライン、頂点バッファ、インデックスバッファ、およびその他のステートを再度設定する必要があります。

beginExternal() およびnativeHandles()も参照

void QRhiCommandBuffer::endPass(QRhiResourceUpdateBatch *resourceUpdates = nullptr)

現在のレンダーパスを終了するレコード。

resourceUpdatesNULLでない場合は、コミットされた後に解放されるリソース更新バッチを指定します。

beginPass()も参照

double QRhiCommandBuffer::lastCompletedGpuTime()

QRhi を作成する際にQRhi::EnableTimestamps が有効になっていた場合、最後に利用可能だったタイムスタンプを秒単位で返します。 この値は、最後に完了したフレームの GPU 上での経過時間を示します。

注意: QRhi::Timestamps 機能がサポートされていないと報告された場合や、QRhi::EnableTimestampsQRhi::create() に渡されなかった場合は、0 以外の結果を期待しないでください。一部のグラフィックスAPI(Metal)では、余分な操作(タイムスタンプクエリ)を行わなくてもタイミングを取得できるため、これには例外があります。しかし、ポータブルアプリケーションは、それが必要だとわかっているときは、常に意識的にタイムスタンプの収集を選択し、それに応じてこの関数を呼び出す必要があります。

値の精度と粒度は Qt では制御できないことが多く、基盤となるグラフィックス API とその実装に依存するため、値の解釈には注意が必要です。特に、異なるグラフィックスAPIやハードウェア間で値を比較することは推奨されませんし、意味がないかもしれません。

フレームがbeginFrame() とendFrame() で記録された場合、つまりスワップチェーンで記録された場合、タイミング値はおそらく非同期で利用可能になります。そのため、返される値は0(最初の1~2フレームなど)であったり、ある前のフレームを参照した最後の既知の値であったりします。また、ウィンドウのサイズを変更した場合など、特定の条件下では値が再び0になることもあります。利用可能な最新の値は beginFrame() で取得され、beginFrame() が返ると、この関数で問い合わせ可能になることが期待できます。

注意: 値が直前 (currently_recorded - 1) のフレームを指していると思わないでください。currently_recorded - 2currently_recorded - 3 を参照することもあります。正確な動作は、グラフィックスAPIとその実装に依存します。

一方、オフスクリーンフレームでは、endOffscreenFrame() が返ると、返される値は最新のものになります。これは、オフスクリーンフレームでは GPU のパイプライン処理が削減され、コマンドが完了するのを待つからです。

注意: これは、スワップチェーンフレームとは異なり、オフスクリーンフレームでは、返される値はちょうど投入され完了したフレームを指すことが保証されていることを意味します。(この関数が endOffscreenFrame() の後、次の beginOffscreenFrame() の前に呼ばれると仮定して)

プラットフォームによる GPU 周波数のスケーリングと GPU クロックの変化の結果に注意 してください。たとえば、Windows では、最近のグラフィックカードでは、同じような、あるいは同じワークロードでフレームを送信しても、返されるタイミングがフレーム間でかなり広い範囲で異なることがあります。これは一般的に言って、Qtが制御したり解決したりする範囲外です。しかし、D3D12バックエンドは、環境変数QT_D3D_STABLE_POWER_STATE がゼロ以外の値に設定されるたびに、ID3D12Device::SetStablePowerState() を自動的に呼び出します。これは結果を大きく安定させることができます。また、特にオフスクリーンフレームが関係する場合など、QElapsedTimer を介して測定される CPU 側のタイミングに、重要でない影響を与えることもあります。

注意: QT_D3D_STABLE_POWER_STATE を設定したアプリケーションを本番環境に出荷しないでください。詳しくはWindows APIドキュメントを参照してください。

QRhi::Timestamps およびQRhi::EnableTimestampsも参照して ください。

const QRhiNativeHandles *QRhiCommandBuffer::nativeHandles()

QRhiVulkanCommandBufferNativeHandles のような、バックエンド固有のQRhiNativeHandles サブクラスへのポインタを返します。基盤となるネイティブリソースの公開がバックエンドでサポートされていない、 あるいはバックエンドに適用できない場合に返される値はnullptr です。

QRhiVulkanCommandBufferNativeHandlesQRhiMetalCommandBufferNativeHandlesbeginExternal()、endExternal()も参照

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

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

リソース型を返します。

void QRhiCommandBuffer::resourceUpdate(QRhiResourceUpdateBatch *resourceUpdates)

リソースの更新をコミットすることが必要な場合や、レンダーパスを開始しない方が便利な場合がある。この関数をresourceUpdates で呼び出すと、beginPass() 呼び出しにresourceUpdates を渡す代わりに使用できます(リードバックの場合はendPass() が一般的です)。

注: パスの内部で呼び出すことはできません。

void QRhiCommandBuffer::setBlendConstants(const QColor &c)

アクティブブレンド定数をc に設定する。

これは、バインドパイプラインにQRhiGraphicsPipeline::UsesBlendConstants が設定されている場合にのみ呼び出すことができます。

注意: この関数はレンダーパスの内側、つまりbeginPass() とendPass() の間でしか呼び出すことができません。

void QRhiCommandBuffer::setComputePipeline(QRhiComputePipeline *ps)

新しい計算パイプラインps の設定を記録する。

注意: この関数は、setShaderResources ()またはdispatch () コマンドをコマンド・バッファに記録する前に呼び出さなければならない。

注: QRhi は、パス内の不要な呼び出しを最適化するので、アプリケーション側でこの関数の呼び出しを避けるために最適化しすぎる必要はありません。

注: この関数は、計算パスの内部、つまりbeginComputePass ()とendComputePass ()の呼び出しの間でのみ呼び出すことができる。

void QRhiCommandBuffer::setGraphicsPipeline(QRhiGraphicsPipeline *ps)

新しいグラフィックスパイプラインps の設定を記録する。

注意: この関数は、コマンド・バッファに他のset またはdraw コマンドを記録する前に呼び出す必要があります。

注: QRhi はパス内の不要な呼び出しを最適化するため、アプリケーション側でこの関数の呼び出しを避けるために最適化しすぎる必要はありません。

注: この関数はレンダーパスの内部、つまりbeginPass() とendPass() の呼び出しの間にのみ呼び出すことができます。

注: 新しいグラフィックスパイプラインps は、有効なポインタでなければなりません。

void QRhiCommandBuffer::setScissor(const QRhiScissor &scissor)

scissor で指定されたアクティブシザー矩形の設定を記録する。

これは、バインドパイプラインにUsesScissor が設定されているときにのみ呼び出される。このフラグがアクティブパイプラインにセットされると、シザーのテストが有効になるため、シザー矩形を提供する必要があるため、この関数を呼び出す必要があります。

注意: QRhi はOpenGLスタイルのビューポート座標、つまりxとyが左下であることを想定しています。

注意: この関数はレンダーパスの内部、つまりbeginPass() とendPass() の呼び出しの間でのみ呼び出すことができます。

void QRhiCommandBuffer::setShaderResources(QRhiShaderResourceBindings *srb = nullptr, int dynamicOffsetCount = 0, const QRhiCommandBuffer::DynamicOffset *dynamicOffsets = nullptr)

一様バッファやテクスチャなど、1 つまたは複数のシェーダステージに可視化されるシェーダリソースのセットをバインドするレコード。

srb は null であってもよく、その場合は現在のグラフィックスまたはコンピュートパイプラインの関連する が使用されます。 が NULL でない場合、それは でなければなりません。つまり、レイアウト(バインディングの数、各バインディングのタイプとバインディング番号)は、パイプラインの create() を呼び出した時点でパイプラインに関連付けられていた と完全に一致しなければなりません。QRhiShaderResourceBindings srb layout-compatible QRhiShaderResourceBindings

一見不要に見える setShaderResources() 呼び出しが必須である場合があります。srb から参照されるリソースを再構築するとき、たとえばQRhiBuffer のサイズを変更し、その後にQRhiBuffer::create() が続く場合、これは関連するネイティブオブジェクト(Vulkan の場合はディスクリプタセットなど)が更新され、srb から参照されるQRhiBuffer,QRhiTexture,QRhiSampler オブジェクトをバックする現在のネイティブリソースを参照する場所です。この場合、setShaderResources() は、srb が前回の呼び出しと同じであっても呼び出されなければならない。

srb が NULL でない場合、パイプラインが create() でビルドされたQRhiShaderResourceBindings オブジェクトは、いかなる形でもアクセスされないことが保証されます。実際、この時点でも有効である必要はありません。create() の後でパイプラインに関連する srb を破棄し、代わりにすべての setShaderResources() 呼び出しで別のlayout compatible を明示的に指定することは有効です。

dynamicOffsets QRhiShaderResourceBinding::uniformBufferWithDynamicOffset() を介して に関連付けられたユニフォームバッファのバッファオフセッ トを指定することができます。これは、 自体でオフセットを提供するのとは異なります。動的オフセットは、異なるオフセットごとに新しい を構築する必要がなく、(該当する場合はバックエンドを含む)基礎となる記述子の書き込みを回避できるため、より効率的である可能性があります。 の各要素は、 - のペアである。 は、 の要素数を指定する。srb srb QRhiShaderResourceBindings dynamicOffsets binding offset dynamicOffsetCount dynamicOffsets

注意 :dynamicOffsets のオフセットはすべて、QRhi::ubufAlignment()から返される値に バイトアラインされていなければならない。

注意 :バックエンドによっては、サポートされるダイナミック・オフセットの数を 制限している場合がある。8を超えるdynamicOffsetCount の使用は避けること。

注: QRhi は(上記の条件を考慮して)パス内の不要な呼び出しを最適化するため、アプリケーション側でこの関数の呼び出しを避けるために最適化しすぎる必要はない。

注: この関数は、レンダー・パスまたはコンピュート・パスの内部、つまりbeginPass() とendPass() の間、またはbeginComputePass() とendComputePass() の間でのみ呼び出すことができます。

void QRhiCommandBuffer::setStencilRef(quint32 refValue)

アクティブなステンシル参照値をrefValue に設定することを記録する。

これは、バインドパイプラインにQRhiGraphicsPipeline::UsesStencilRef が設定されている場合にのみ呼び出すことができます。

注意: この関数は、レンダーパスの内部、つまりbeginPass() とendPass() の呼び出しの間でのみ呼び出すことができます。

void QRhiCommandBuffer::setVertexInput(int startBinding, int bindingCount, const QRhiCommandBuffer::VertexInput *bindings, QRhiBuffer *indexBuf = nullptr, quint32 indexOffset = 0, QRhiCommandBuffer::IndexFormat indexFormat = IndexUInt16)

頂点入力バインディングを記録する。

後続のdrawIndexed() コマンドで使用されるインデックスバッファは、indexBufindexOffsetindexFormat で指定されます。インデックス描画が不要な場合は、indexBuf を NULL に設定できます。

頂点バッファのバインディングはバッチ処理されます。startBinding は最初のバインディング番号を指定します。記録されたコマンドは、bindings からの各バッファをバインドポイントstartBinding + i にバインドします。ibindings のインデックスです。bindings の各要素は、QRhiBuffer とオフセットを指定する。

注意: バックエンドによっては、頂点バッファのバインディング数を制限している場合があります。8より大きいbindingCount の使用は避けてください。

ほとんどのバックエンドでは、同じパスでの余分な頂点入力とインデックスの変更は自動的に無視されるため、アプリケーションはこの関数の呼び出しを避けるために過剰に最適化する必要はありません。

注意: この関数はレンダーパスの内部、つまりbeginPass() とendPass() の間でしか呼び出すことができません。

簡単な例として、2 つの入力を持つ頂点シェーダを考えてみましょう:

layout(location = 0) in vec4 position;
layout(location = 1) in vec3 color;

このシェーダでは、 を呼び出すことができます。このシェーダ用のQRhiGraphicsPipeline は、入力レイアウトを使用して作成できます:

QRhiVertexInputLayout inputLayout;
inputLayout.setBindings({
    { 5 * sizeof(float) }
});
inputLayout.setAttributes({
    { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
    { 0, 1, QRhiVertexInputAttribute::Float3, 2 * sizeof(float) }
});

ここではバッファバインディング(バインディング番号 0)が 1 つあり、それを参照する入力が 2 つあります。パスを記録するとき、パイプラインが設定されると、頂点バインディング は次のように単純に指定できます。vbuf はすべてのインターリーブされた位置+色デー タを持つQRhiBuffer であると仮定します:

const QRhiCommandBuffer::VertexInput vbufBinding(vbuf, 0);
cb->setVertexInput(0, 1, &vbufBinding);

void QRhiCommandBuffer::setViewport(const QRhiViewport &viewport)

viewport で指定されたアクティブビューポート矩形の設定を記録する。

基礎となるグラフィックスAPIが常にシザリングを有効にしているバックエンドでは、アクティブなQRhiGraphicsPipelineUsesScissor を設定していないときはいつでも、この関数はビューポートに一致するようにシザリングも設定します。

注意: QRhi はOpenGLスタイルのビューポート座標、つまりxとyが左下であることを想定しています。

注: この関数はレンダーパスの内部、つまりbeginPass() とendPass() の呼び出しの間でのみ呼び出すことができます。

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