【问题标题】:Deferred context does not render anything延迟上下文不渲染任何东西
【发布时间】:2014-02-22 18:15:45
【问题描述】:

我试图了解 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 停止工作时,女巫意味着我做错了什么

【问题讨论】:

    标签: multithreading slimdx directx-11


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-21
        • 2014-09-08
        相关资源
        最近更新 更多