The IDirect3DDevice3::DrawIndexedPrimitive method renders the specified geometric primitive based on indexing into an array of vertices.
HRESULT DrawIndexedPrimitive(
D3DPRIMITIVETYPE d3dptPrimitiveType,
DWORD dwVertexTypeDesc,
LPVOID lpvVertices,
DWORD dwVertexCount,
LPWORD lpwIndices,
DWORD dwIndexCount,
DWORD dwFlags
);
Note that the D3DPT_POINTLIST member of D3DPRIMITIVETYPE is not indexed.
Notice that this parameter is used differently from the dwVertexCount parameter in the IDirect3DDevice3::DrawPrimitive method. In that method, the dwVertexCount parameter gives the number of vertices to draw, but here it gives the total number of vertices in the array pointed to by the lpvVertices parameter. When you call IDirect3DDevice3::DrawIndexedPrimitive, you specify the number of vertices to draw in the dwIndexCount parameter.
If the method succeeds, the return value is D3D_OK.
If the method fails, the return value may be one of the following values:
D3DERR_INVALIDRAMPTEXTURE |
D3DERR_INVALIDPRIMITIVETYPE |
D3DERR_INVALIDVERTEXTYPE |
DDERR_INVALIDPARAMS |
DDERR_WASSTILLDRAWING |
Do not use this method to render very small subsets of vertices from extremely large vertex arrays. This method transforms every vertex in the provided buffer, regardless of the location or quantity of vertices being rendered. Thus, if you pass an array that contains thousands of vertices, but only intend to render hundreds, your application's performance will suffer dramatically. In cases where you need to render a small number of vertices from a large buffer, use the Direct3D vertex buffer rendering methods. For more information, see Vertex Buffers.
This method differs from its counterpart in the IDirect3DDevice2 interface in that it accepts a flexible vertex format descriptor rather than a member of the D3DVERTEXTYPE enumerated type as the second parameter. If you attempt to use one of the members of D3DVERTEXTYPE, the method fails, returning DDERR_INVALIDPARAMS. For more information, see Vertex Formats.
In current versions of DirectX, IDirect3DDevice3::DrawIndexedPrimitive can sometimes generate an update rectangle that is larger than it strictly needs to be. If a large number of vertices need to be processed, this can have a negative impact on the performance of your application. If you are using D3DTLVERTEX vertices and the system is processing more vertices than you need, you should use the D3DDP_DONOTCLIP and D3DDP_DONOTUPDATEEXTENTS flags to solve the problem.
This method was introduced with the IDirect3DDevice2 interface.
Windows NT/2000: Requires Windows 2000.
Windows 95/98: Requires Windows 95 or later. Available as a redistributable for Windows 95.
Header: Declared in d3d.h.
Import Library: Use ddraw.lib.
IDirect3DDevice3::DrawPrimitive, IDirect3DDevice3::DrawPrimitiveStrided, IDirect3DDevice3::DrawPrimitiveVB, IDirect3DDevice3::DrawIndexedPrimitiveStrided, IDirect3DDevice3::DrawIndexedPrimitiveVB