0

我试图了解多线程渲染在 dx11 中是如何工作的,所以我开始时没有任何线程,只创建一个延迟上下文,并尝试用它渲染三角形


代码在这里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 停止工作时,女巫意味着我做错了什么

4

2 回答 2

1

由于延迟上下文与原始上下文不同,因此除了修复命令列表参数外,您还需要为延迟设备重新设置渲染目标。

这解释了为什么您的设备被清除但没有渲染几何图形。

于 2014-02-22T10:15:45.493 回答
0

不确定您是否已修复此问题,但如果您摆脱 ClearState() 调用,然后将 FinishCommandList 和 ExecuteCommandList 的布尔参数都设置为 true,您会在屏幕上看到两个三角形。

我不完全确定为什么会这样。我对 D3D11 的多线程部分不太熟悉。您可能需要在本地论坛上询问有关其工作原理的更多信息。

于 2011-06-15T02:11:35.680 回答