0

dx11 でマルチスレッド レンダリングがどのように機能するかを理解しようとしているので、スレッドなしで開始し、遅延コンテキストを 1 つだけ作成して、それを使用して三角形をレンダリングしようとしました。


コードはここにありますhttps://gist.github.com/998406 私はこのようにSlimDX MiniTriサンプルを変更しました->遅延コンテキストを作成します

var deferredContext = new DeviceContext(device);

次に、シェーダーをそれにバインドしてレンダリングします

deferredContext.ClearState();
deferredContext.InputAssembler.InputLayout = layout;
deferredContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;
deferredContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices2, 32, 0));

 for (int i = 0; i < technique.Description.PassCount; ++i){
                              pass.Apply(deferredContext);
                              deferredContext.Draw(3, 0);}

次に、コマンドリストを取得して実行してみてください

CommandList dc_cl = deferredContext.FinishCommandList(false);
device.ImmediateContext.ExecuteCommandList(dc_cl, true);

私が期待しているのは2つの三角形ですが、即時のコンテキストのみをレンダリングしますが、deferredContext.ClearRenderTargetView(renderView, Color.Tomato); のような遅延コンテキストで画面をクリアすると 画面はトマト色になりましたが、まだ三角形はありません


また、この遅延コンテキスト PIX を追加すると、PIX が機能しなくなるということは、何かひどい間違いをしているということです。

4

2 に答える 2

0

これを修正したかどうかはまだわかりませんが、ClearState() 呼び出しを取り除き、FinishCommandList と ExecuteCommandList の両方のブール値パラメーターを true に設定すると、画面に両方の三角形が表示されます。

なぜそうなのかは完全にはわかりません。私は D3D11 のマルチスレッド部分についてあまり詳しくありません。それがどのように機能するかについての詳細は、ネイティブ フォーラムで質問する必要があるかもしれません。

于 2011-06-15T02:11:35.680 に答える