延迟上下文不会呈现任何内容

时间:2011-06-02 12:26:18

标签: multithreading slimdx directx-11

我试图了解多线程渲染在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个三角形 但它只渲染不朽的上下文,但如果我在deffered上下文中清除屏幕 喜欢deferredContext.ClearRenderTargetView(renderView,Color.Tomato); 我的屏幕现在是番茄色,但仍然没有三角形


当我添加这个延迟上下文PIX停止工作时,女巫意味着我正在做一些可怕的错误

2 个答案:

答案 0 :(得分:1)

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

这解释了清除设备但未渲染几何体的原因。

答案 1 :(得分:0)

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

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