【翻译】Managed DirectX(第八章)[5]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

public System.Array Lock ( System.Int32 offsetToLock ,Microsoft.DirectX.Direct3D.LockFlags flags )

public System.Array Lock ( System.Int32 offsetToLock , System.Type typeVertex , Microsoft.DirectX.Direct3D.LockFlags flags , params int[] ranks )

public Microsoft.DirectX.Direct3D.GraphicsStream Lock ( System.Int32 offsetToLock , System.Int32 sizeToLock , Microsoft.DirectX.Direct3D.LockFlags)

 

如你所见,有3种方法可用来锁定缓冲。我们先从最简单的第一个开始。这个方法对只对通过使用System.Type以及一系列顶点或索引的构造函数创建的缓冲有用。实际上,这个方法只是使用构造函数所传入的数据来再调用第二个重载的方法而已。

接下来的两个重载就比较有意思了。他们的第一个参数都表示开始锁定的偏移值(以比特为单位)。如果需要锁定整个缓冲,把这个值设置为0就可以了。你可能已经注意到前两个重载的方法都把数据以数组的方式作为返回值。在第二个重载中,第二个参数可以设置所返回的数组的类型。最后一个参数决定了返回数组的大小。

由于某些原因“Rank”参数总是困扰着开发者,让我们来仔细讨论一下吧。假设有一个只包含了位置数据(Vector3)的顶点缓冲,并且它保存了1200个顶点。如果你想把它锁定为一个包含1200个元素的Vector3数组,那么应该这样调用方法:

     Vector3[] data = (Vector3[])vb.Lock(0, typeof(Vector3), LockFlags.None, 1200);

注意到额外的参数没有?Rank参数实际上是一个参数数组。它还可以创建三维数组作为返回值。你可以使用这个参数来指定返回多大的数组。

 

特别提示:如何高效的锁定缓冲

本文关键:【翻译】Managed DirectX(第八章)
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top