2

DirectX 12 に問題があります。小さな 3D レンダラーを作成しました。モデルは、定数バッファーにある基本的なワールド ビュー プロジェクション マトリックスを使用して、頂点シェーダーの 3D 空間に変換されます。

現在このコマンドを使用している定数バッファーのデータを変更するには、定数memcpy(pMappedConstantBuffer + alignedSize * frame, newConstantBufferData, alignedSize)バッファーのデータをすぐに置き換えます。


ここで問題が発生します。描画はコマンド リストに記録され、後で実行のために GPU に送信されます。

例:

/* Now i want to change the constant buffer to change the next draw call's position to (0, 1, 0) */
memcpy(/*Parameters*/);

/* Now i want to record a draw call to the command list */
DrawInstanced(/*Parameters*/);

/* But now i want to draw other mesh to other position so i have to change the constant buffer. After this memcpy() the draw position will be (0, -1, 0) */
memcpy(/*Parameters*/);

/* Now i want to record new draw call to the list */
DrawInstanced(/*Parameters*/);

この後、実行のためにコマンドリストをgpuに送信しましたが、コマンドリストがgpuに送信される前にすべてのmemcpyが実行されるため、すべてのメッシュが同じ位置にあることを確認してください。したがって、基本的に最後の memcpy は前のものを上書きします。


したがって、基本的に問題は、メッシュを異なる位置に描画する方法、またはコマンドリスト内の定数バッファーのデータを置き換える方法で、gpu の各描画呼び出し間で定数バッファーが変更されるようにすることです。

ありがとう


もう助けは必要ありません。自分で解決しました。メッシュごとに定数バッファーを作成しました。

4

1 に答える 1