我需要绘制一些线框和一些实体的对象。我认为为每个对象调用RSSetState
是一种不好的做法。
可能我可以将对象分成两组,然后绘制线框组,然后绘制实体组。但我不确定这是可能的,因为我可能有其他事情需要考虑。
也许我可以以某种方式为线条创建索引缓冲区并使用线条绘制线框,但我仍然需要剔除这些线条,是否可能?
rasterDesc.FillMode = D3D11_FILL_SOLID;
...
rasterDesc.FillMode = D3D11_FILL_WIREFRAME;
答案 0 :(得分:2)
是的,这是可能的,但浪费时间,因为如果你也想要剔除,你可以用它来启用线框,这样你的额外工作和时间就会浪费。
正如MSDN所述:
在Direct3D 10中,设备状态被分组为状态对象,这大大降低了状态变化的成本。
虽然这是针对D3D10的,但它在D3D11中完全相同(D3D11部分优化)。最好的方法是将你的对象分成两组,如你所说,或尽量做尽可能多的组,如你所说,这可能是不可能的。
旁注:您可能还设置了每个帧的顶点缓冲区,索引缓冲区和原始拓扑列表(至少这是我的工作),因此设置RSSetState
基本上是一回事!