3
查看MSDN文档,找不到锁定VertexBuffers的方法,以便我可以在设备上更改其数据。这在XNA中可能吗?有没有办法在XNA中锁定VertexBuffers?
查看MSDN文档,找不到锁定VertexBuffers的方法,以便我可以在设备上更改其数据。这在XNA中可能吗?有没有办法在XNA中锁定VertexBuffers?
你有多种选择在XNA修改顶点缓冲区的内容:
VertexBuffer
有SetData
成员。在任何情况下,您只能在Draw
之外安全地使用此项目,您可以激活Predicated Tiling(因此最好总是在Draw之外完成)。
DynamicVertexBuffer
就像VertexBuffer
,但设置其内容时速度更快。但是它很容易丢失图形设备,并且必须处理这种情况。另请看SetDataOptions
。
DrawUserPrimitives
(和indexed版本)。这具有不影响Predicated Tiling的优点,并且不会导致命令缓冲区对少量基元进行刷新。
有关MSDN约Dynamically Updating Vertices的详细信息。而XNA论坛上的this thread也值得一读。
非常感谢。这是很多很好的信息。还有一个问题:在Draw之外的VertexBuffer上调用SetData总是安全的吗? – blachniet 2010-07-30 15:38:09
@blachniet:是的(实际上它是一个命令缓冲区,但是,是的,在简单情况下,在Draw之外)。您听起来像是来自DirectX背景:如果需要绝对确定XNA在后台执行的操作,则始终可以通过PIX运行您的游戏。 – 2010-07-30 15:58:10