延迟上下文不渲染任何内容
我试图了解多线程渲染在 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 停止工作,女巫意味着我做错了一些可怕的事情
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于延迟上下文与原始上下文不同,除了修复命令列表参数之外,您还需要为延迟设备重新设置渲染目标。
这解释了为什么您的设备已清除但没有渲染任何几何图形。
As the deferred context is not the same as your original context you need to re-set render targets for your deferred device in addition to fixing your command list arguments.
This explains why your device is cleared but no geometry is being rendered.
不确定您是否已解决此问题,但如果您摆脱 ClearState() 调用,然后将 FinishCommandList 和 ExecuteCommandList 的布尔参数设置为 true,您会在屏幕上看到两个三角形。
我不完全确定为什么会出现这种情况;我对D3D11的多线程部分不太熟悉。您可能需要在本地论坛上询问有关其工作原理的更多信息。
Not sure if you fixed this yet, but if you get rid of the ClearState() call and then set both FinishCommandList's and ExecuteCommandList's boolean parameters to true, you see both triangles on the screen.
I'm not entirely sure why this is the case; I'm not too familiar with the multithreading portions of D3D11. You might have to ask on a native forum for more information on how that works.