常见问题 开发软件的常见问题>>

如果我要生成动态数据,怎样才算是较好地使用顶点缓冲区了呢?

发布时间:2010-11-23 15:36:58

答案:

具体的实施步骤。 借助 D3DUSAGE_DYNAMIC 和 D3DUSAGE_WRITEONLY 使用标志以及 D3DPOOL_DEFAULT 缓冲池标志来创建一个顶点缓冲区。(如果您正使用软件顶点处理功能的话,还要指定 D3DUSAGE_SOFTWAREPROCESSING) I = 0 设置状态(纹理、描绘状态等) 检查缓冲区内是否有空间,即 i.e.I + M <= N? (其中 M 是新顶点的数目) 如果为真,则借助 D3DLOCK_NOOVERWRITE 对 VB 进行 Lock (锁定)。这告知 Direct3D 和驱动程序,您将要添加顶点,而并不修改您先前批处理过的顶点。因此,如果当时正在进行一项DMA 操作,则并不中断该操作。否则,转至 11 在 I 处填充 M 个顶点 解锁 (Unlock) 调用 Draw[Indexed]Primitive。对于未经索引的,请将 I 用作 StartVertex 参数。对于已编索的基本类型,请确保索引指向顶点缓冲区的正确部分(要做到这一点,使用 SetIndices 调用的 BaseVertexIndex 参数可能最为容易) I + = M 转到 3 好,空间已用尽,就让我们开始一个新的顶点缓冲区。我们不想使用同一个顶点缓冲区,因为有可能有一个 DMA 操作正在进行之中。我们将这一情形告知 Direct3D, 方法是借助 D3DLOCK_DISCARD 标志,将“同一个”顶点缓冲区锁定。这意思是,“你可以给我一个新的指针了,因为我已用完旧的指针,不再在意旧的内容。” I = 0 转至 4(或 6)

本FAQ适用范围

下一步您可以:
查看开发软件产品 >>