介绍
虽然DirectX 8已经出来许久了,但是很多人似乎在如何正确使用顶点缓存上遇到问题。即使随便去那些DirectX论坛上看一眼,都会发现很多困惑的程序员或者游戏开发者在抱怨为什么他们的游戏的帧率没有他们认为的那么高。
为了给那些需要的人提供帮助,我决定弄一个小的帮助文档帮助那些人解除疑惑。(需要说明的是我没有写什么‘新’的东西,我只是将那些MSDN和其他的文档收集起来而已)。
那么我们在程序中分配一块内存去写入我们的数据究竟能给我们提供什么帮助呢?这个嘛,理论上来说,顶点缓存是设备驱动在渲染管线中为了提高访问速度和灵活性的优化方式。
原文: http://www.gamedev.net/page/resources/_/technical/game-programming/using-vertex-buffers-with-directx-r1946
虽然DirectX 8已经出来许久了,但是很多人似乎在如何正确使用顶点缓存上遇到问题。即使随便去那些DirectX论坛上看一眼,都会发现很多困惑的程序员或者游戏开发者在抱怨为什么他们的游戏的帧率没有他们认为的那么高。
为了给那些需要的人提供帮助,我决定弄一个小的帮助文档帮助那些人解除疑惑。(需要说明的是我没有写什么‘新’的东西,我只是将那些MSDN和其他的文档收集起来而已)。
translate by my_et
什么是顶点缓存?
顶点缓存是被Direct3D8生成的,它是渲染管线系统让CPU和GPU(或者视频硬件)都能共同处理它们的一种手段。顶点缓存为我们提供了一种机制--在我们利用CPU对顶点缓缓存进行操作的时候,可以同时的让GPU去处理先前的一批顶点。结果,在我们运行程序的时候给我们提供了一定小程度上的并行处理能力。那么我们在程序中分配一块内存去写入我们的数据究竟能给我们提供什么帮助呢?这个嘛,理论上来说,顶点缓存是设备驱动在渲染管线中为了提高访问速度和灵活性的优化方式。
静态或者动态?
顶点缓存可以以两种方式创建:静态或者动态。一旦静态缓存被创建,它们就会一直存在于设备驱动为他们分配的最佳内存中。这个地址是 由设备驱动所决定的,这样设备就能在静态缓存中尽可能快的快速切换。动态缓存,相反,在每一帧画面产生的过程中不断的被填充和丢弃。动态缓存的一个好处就是--根据NVidia和ATI,你可以自己创建一大批三角形,然后将它们送到GPU,这是获得最大性能的途径。注意,这个问题是有争论的。根据SDK,微软建议一旦有可能最好使用静态缓存。这篇文章的内容是关于动态缓存的,因为你的大部分的顶点信息在你的场景生命周期中将会改变。恕我直言,即使很多仍然在纠结使用动态缓存或者静态缓存,选择动态缓存吧。到目前为止,我用DirectX8写过的所以项目中,我都会创建一个动态缓存,在每一帧中我会清空和填充它,以便我能够发送最大的三角形量给GPU.
创建动态缓存
我们优化动态缓存的第一步是仔细的检查如何创建它们。DirectX SDK文档以及NVidia的白皮书所说的不正确的初始顶点缓存的方法将会严重的阻碍你应用的性能。原文: http://www.gamedev.net/page/resources/_/technical/game-programming/using-vertex-buffers-with-directx-r1946