我编码与DirectX 10 3D应用程序和我想知道的Shadermanagement的tackeling如何。

这是最有效的预加载有在应用程序启动的所有着色器,然后根据需要使用这些或做硬件这列火车的资源,如果数量变得更高。

另外不知是否是一个速度考虑由着色器,以便将着色器开关被最小化,以命令该渲染。

有帮助吗?

解决方案

我不DX10,DX9只有工作,但我猜这些东西仍然是相同的。

根据您的应用程序,你实际上可能在运行时生成着色器(目前许多复杂的3D游戏做到这一点)。

预加载着色器是不是一个坏主意,这取决于如果您生成着色器上,有多少,你的记忆的考虑是 - 它依赖。然而,预加载着色器(由我假设你的意思是创建ID3DXEffect实例)只需内存在运行时,没有CPU使用率。

排序方式着色器是一个好主意。一般情况下,由材料排序是一个好主意,因为切换着色器确实招致一些开销(未过度,但明显的依赖于应用程式的复杂性)。

有关分拣的drawcalls,阅读本: http://realtimecollisiondetection.net/blog/?p = 86

其他提示

在D3D10,所有的设备资源进行虚拟化,所以你不会跑了出来。当然,你仍然可能会耗尽物理资源卡上,并导致大量颠簸的,如果你不关注你在做什么。

此外,他们已经改变了设备状态显著减少的开关状态,其中包括着色器的成本。

但是,你真的问的是“是方法X比方法Y更快的应用?”虽然D3D10简化状态管理,使开关状态更快,回答上述问题的唯一方法是做的的应用和的数据的性能测量

在realtimecollectiondetection.net博客文章只是说说你的排序绘制调用。这将导致更少的状态切换。不要紧状态切换速度有多快,少做的它总是更快。所以这是很好的一般性建议。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top