VertexBuffer.Lock Method |
Language: |
Locks a range of vertex data and obtains the vertex buffer memory.
Visual Basic Public Function Lock( _
ByVal offsetToLock As Integer, _
ByVal flags As LockFlags _
) As ArrayC# public Array Lock(
int offsetToLock,
LockFlags flags
);C++ public:
Array^ Lock(
int offsetToLock,
LockFlags flags
);JScript public function Lock(
offsetToLock : int,
flags : LockFlags
) : Array;
offsetToLock System.Int32
Offset into the vertex data to lock, in bytes. To lock the entire vertex buffer, specify 0 for both param_Int32_sizeToLock and param_Int32_offsetToLock.flags Microsoft.DirectX.Direct3D.LockFlags
Zero or more LockFlags locking flags that describe the type of lock to perform. For this method, the valid flags are Discard, NoDirtyUpdate, NoSystemLock, ReadOnly, and NoOverWrite. For a description of the flags, see LockFlags.
System.Array
An Array that represents the locked vertex buffer.
When working with vertex buffers, multiple lock calls are allowed; however, the number of lock calls must match the number of unlock calls. Any outstanding lock count on any currently set vertex buffer causes the DrawPrimitives calls to fail.
When using a Lock method to retrieve an Array from a resource that was not created with a Type , always use the overload that accepts a Type . Use the ranks parameter to indicate the number of members in the returned Array .
The Lock.Discard and NoOverWrite flags are valid only on buffers created with Dynamic.
Exceptions
InvalidCallException The method call is invalid. For example, a method's parameter might contain an invalid value.
Create a Mesh Object
This example shows how to create a Mesh object.
In the following C# code example, device is assumed to be the rendering Device.
[C#]
int numberVerts = 8; short[] indices = { 0,1,2, // Front Face 1,3,2, // Front Face 4,5,6, // Back Face 6,5,7, // Back Face 0,5,4, // Top Face 0,2,5, // Top Face 1,6,7, // Bottom Face 1,7,3, // Bottom Face 0,6,1, // Left Face 4,6,0, // Left Face 2,3,7, // Right Face 5,2,7 // Right Face }; Mesh mesh = new Mesh(numberVerts * 3, numberVerts, MeshFlags.Managed, CustomVertex.PositionColored.Format, device); using(VertexBuffer vb = mesh.VertexBuffer) { GraphicsStream data = vb.Lock(0, 0, LockFlags.None); data.Write(new CustomVertex.PositionColored(-1.0f, 1.0f, 1.0f, 0x00ff00ff)); data.Write(new CustomVertex.PositionColored(-1.0f, -1.0f, 1.0f, 0x00ff00ff)); data.Write(new CustomVertex.PositionColored(1.0f, 1.0f, 1.0f, 0x00ff00ff)); data.Write(new CustomVertex.PositionColored(1.0f, -1.0f, 1.0f, 0x00ff00ff)); data.Write(new CustomVertex.PositionColored(-1.0f, 1.0f, -1.0f, 0x00ff00ff)); data.Write(new CustomVertex.PositionColored(1.0f, 1.0f, -1.0f, 0x00ff00ff)); data.Write(new CustomVertex.PositionColored(-1.0f, -1.0f, -1.0f, 0x00ff00ff)); data.Write(new CustomVertex.PositionColored(1.0f, -1.0f, -1.0f, 0x00ff00ff)); vb.Unlock(); } using (IndexBuffer ib = mesh.IndexBuffer) { ib.SetData(indices, 0, LockFlags.None); }
Send comments about this topic to Microsoft. © Microsoft Corporation. All rights reserved.
Feedback? Please provide us with your comments on this topic.
For more help, visit the DirectX Developer Center