DX10 +多个顶点缓冲区,单个索引缓冲区

时间:2013-06-02 09:46:07

标签: c++ directx

我有点困惑为什么你可以设置一个活跃的顶点缓冲区数组但只有一个索引缓冲区?那一个索引缓冲区可以解决所有顶点缓冲区的顶点吗?如果是这样,我将如何指定哪个索引属于哪个缓冲区?

我的另一个问题是,由于我使用索引三角形列表,索引数据的大小与每个网格的顶点数据大致相同。我在考虑为每个顶点缓冲区创建一个索引缓冲区。我将动态添加网格,直到其中一个缓冲区用完,此时创建另一对。不可避免地,通过这样做,对中的一个缓冲区将始终在另一个缓冲区之前填满,并且剩余的空间将永远不会被使用。该空间实际上是否在gpu中标记为保留? 例如,我可以容纳4个包含32MB数据的缓冲区,但是创建的字节宽度为64MB到128MB的vram中吗?

1 个答案:

答案 0 :(得分:1)

必须同时对所有顶点缓冲区使用相同的索引。这样做的目的是允许不同的顶点缓冲区包含顶点数据的不同组件。例如,您可能决定将位置存储在一个顶点缓冲区中,将纹理坐标存储在第二个缓冲区中。第零个索引将访问第一个顶点缓冲区的第一个位置和第二个顶点缓冲区的第一个纹理坐标。

如果您想每帧更新纹理坐标但不改变位置,这将节省带宽。

多个顶点缓冲区也用于实例化。

创建顶点或索引缓冲区时,指定缓冲区的大小。然后,此数量的内存将保留在视频RAM中,并且不能被其他任何内容使用。

因此,如果我理解你的问题,那么你不能将四个64mb缓冲区装入128 mb内存。