在DirectX11中绘制一些对象线框

时间:2014-07-31 09:17:20

标签: directx directx-11 rasterizer-state

我需要绘制一些线框和一些实体的对象。我认为为每个对象调用RSSetState是一种不好的做法。

可能我可以将对象分成两组,然后绘制线框组,然后绘制实体组。但我不确定这是可能的,因为我可能有其他事情需要考虑。

也许我可以以某种方式为线条创建索引缓冲区并使用线条绘制线框,但我仍然需要剔除这些线条,是否可能?

rasterDesc.FillMode = D3D11_FILL_SOLID;
...
rasterDesc.FillMode = D3D11_FILL_WIREFRAME;

1 个答案:

答案 0 :(得分:2)

是的,这是可能的,但浪费时间,因为如果你也想要剔除,你可以用它来启用线框,这样你的额外工作和时间就会浪费。

正如MSDN所述:

  

在Direct3D 10中,设备状态被分组为状态对象,这大大降低了状态变化的成本。

虽然这是针对D3D10的,但它在D3D11中完全相同(D3D11部分优化)。最好的方法是将你的对象分成两组,如你所说,或尽量做尽可能多的组,如你所说,这可能是不可能的。

旁注:您可能还设置了每个帧的顶点缓冲区,索引缓冲区和原始拓扑列表(至少这是我的工作),因此设置RSSetState基本上是一回事!