--- Stefan Dösinger <[EMAIL PROTECTED]> wrote:

> Hello,
> I have come across a D3D7 call where I need some help with: 
> IDirect3DDevice::DrawIndexedPrimitiveVB. The prototype is
> DrawIndexedPrimitiveVB(LPDIRECT3DDEVICE7 iface,
>                                                    D3DPRIMITIVETYPE 
> d3dptPrimitiveType,
>                                                    LPDIRECT3DVERTEXBUFFER7 
> lpD3DVertexBuf,
>                                                    DWORD dwStartVertex,
>                                                    DWORD dwNumVertices,
>                                                    LPWORD lpwIndices,
>                                                    DWORD dwIndexCount,
>                                                    DWORD dwFlags)


> 
> I can't find any usable information about it on MSDN, and there's no 
> equivalent in other D3D versions and WineD3D.
> 
> Is there an easy translation to IWineD3DDevice::DrawIndexedPrimitive 
> orIWineD3DDevice::DrawIndexedPrimitiveUP, or do I have to add this call to 
> WineD3D(based on the old implementation in D3D7 perhaps?).


I think the best thing to do is to create another function in wined3d/device.c
DrawIndexedPrimitiveVB that is based on DrawIndexedPrimitiveUP but either takes 
a
IWineD3DVertexBuffer or has the caller use SetVertexBuffer and then call 
DrawIndexedPrimitiveVB .

e.g.

IWineD3DDeviceImpl_DrawIndexedPrimitiveVB(IWineD3DDevice *iface, 
D3DPRIMITIVETYPE PrimitiveType,
                                          UINT MinVertexIndex, UINT 
NumVertices, CONST void*
pIndexData) {
/* The rest of the code making up IWineD3DDeviceImpl_DrawIndexedPrimitiveVB */
}


DirectX7_DrawIndexedPrimitiveVB(LPDIRECT3DDEVICE7 iface,
                                                     D3DPRIMITIVETYPE 
d3dptPrimitiveType,
                                                     LPDIRECT3DVERTEXBUFFER7 
lpD3DVertexBuf,
                                                     DWORD dwStartVertex,
                                                     DWORD dwNumVertices,
                                                     LPWORD lpwIndices,
                                                     DWORD dwIndexCount,
                                                     DWORD dwFlags) {
 
    IWineD3DDeviceImpl_SetStreamSource(device, 0, 
lpD3DVertexBuf->wineD3DVertexBuffer,
                               dwStartVertex * lpD3DVertexBuf->stride, 
lpD3DVertexBuf->stride);
   IWineD3DDeviceImpl_DrawIndexedPrimitiveVB(device, PrimitiveType, 
dwIndexCount, lpwIndices);
}                                          

Or.

IWineD3DDeviceImpl_DrawIndexedPrimitiveVB(IWineD3DDevice *iface, 
D3DPRIMITIVETYPE PrimitiveType,
                                          UINT MinVertexIndex, UINT 
NumVertices, 
                                          CONST void* pIndexData, 
                                          IWineD3DVertexBuffer* pVertexBuffer, 
                                          UINT dwStartVertex, UINT Stride) {

    IWineD3DDeviceImpl_SetStreamSource(device, 0, pVertexBuffer,  dwStartVertex 
* Stride, Stride);
   /* The rest of the code making up IWineD3DDeviceImpl_DrawIndexedPrimitiveVB 
*/
}

IDirect3DVertexBuffer7 need to wrap wined3dVertexBuffer.

Oliver.


        
        
                
___________________________________________________________ 
Yahoo! Messenger - NEW crystal clear PC to PC calling worldwide with voicemail 
http://uk.messenger.yahoo.com


Reply via email to