1

我有点困惑,为什么您可以设置活动顶点缓冲区数组但只有一个索引缓冲区?那一个索引缓冲区能否处理所有顶点缓冲区中的顶点?如果是这样,我将如何指定索引属于哪个缓冲区?

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

4

1 回答 1

1

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

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

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

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

因此,如果我理解您的问题,不,您不能将四个 64mb 缓冲区放入 128mb 的内存中。

于 2013-06-03T15:50:00.243 回答