Module: wine Branch: master Commit: 091f9c28e4410039c36b0a7e40ed86dc18aaad70 URL: http://source.winehq.org/git/wine.git/?a=commit;h=091f9c28e4410039c36b0a7e40...
Author: Stefan Dösinger stefandoesinger@gmx.at Date: Tue Jan 2 00:21:26 2007 +0100
wined3d: Put the decoded strided data structure into the device.
---
dlls/wined3d/drawprim.c | 35 ++++++++++++----------------------- dlls/wined3d/wined3d_private.h | 3 +++ 2 files changed, 15 insertions(+), 23 deletions(-)
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c index 7e897f1..63e1cae 100644 --- a/dlls/wined3d/drawprim.c +++ b/dlls/wined3d/drawprim.c @@ -1947,7 +1947,6 @@ void drawPrimitive(IWineD3DDevice *iface IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface; BOOL useVertexShaderFunction = FALSE; BOOL usePixelShaderFunction = FALSE; - WineDirect3DVertexStridedData *dataLocations; IWineD3DSwapChainImpl *swapchain; int i; BOOL fixup = FALSE; @@ -2002,8 +2001,8 @@ void drawPrimitive(IWineD3DDevice *iface /* Note: this is a ddraw fixed-function code path */
TRACE("================ Strided Input ===================\n"); - dataLocations = DrawPrimStrideData; - drawPrimitiveTraceDataLocations(dataLocations); + memcpy(&This->strided_streams, DrawPrimStrideData, sizeof(This->strided_streams)); + drawPrimitiveTraceDataLocations(&This->strided_streams); fixup = FALSE; }
@@ -2015,17 +2014,13 @@ void drawPrimitive(IWineD3DDevice *iface * don't set any declaration at all */
TRACE("================ Vertex Declaration ===================\n"); - dataLocations = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*dataLocations)); - if(!dataLocations) { - ERR("Out of memory!\n"); - return; - } + memset(&This->strided_streams, 0, sizeof(This->strided_streams));
if (This->stateBlock->vertexDecl != NULL || - ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->vertexDeclaration != NULL) + ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->vertexDeclaration != NULL)
- primitiveDeclarationConvertToStridedData(iface, useVertexShaderFunction, - dataLocations, StartVertexIndex, &fixup); + primitiveDeclarationConvertToStridedData(iface, useVertexShaderFunction, + &This->strided_streams, StartVertexIndex, &fixup);
} else {
@@ -2034,20 +2029,16 @@ void drawPrimitive(IWineD3DDevice *iface * It will not work properly for shaders. */
TRACE("================ FVF ===================\n"); - dataLocations = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*dataLocations)); - if(!dataLocations) { - ERR("Out of memory!\n"); - return; - } - primitiveConvertToStridedData(iface, dataLocations, StartVertexIndex, &fixup); - drawPrimitiveTraceDataLocations(dataLocations); + memset(&This->strided_streams, 0, sizeof(This->strided_streams)); + primitiveConvertToStridedData(iface, &This->strided_streams, StartVertexIndex, &fixup); + drawPrimitiveTraceDataLocations(&This->strided_streams); }
/* Setup transform matrices and sort out */ - primitiveInitState(iface, dataLocations, useVertexShaderFunction, &lighting_changed, &lighting_original); + primitiveInitState(iface, &This->strided_streams, useVertexShaderFunction, &lighting_changed, &lighting_original);
/* Now initialize the materials state */ - init_materials(iface, (dataLocations->u.s.diffuse.lpData != NULL || dataLocations->u.s.diffuse.VBO != 0)); + init_materials(iface, (This->strided_streams.u.s.diffuse.lpData != NULL || This->strided_streams.u.s.diffuse.VBO != 0));
{ GLenum glPrimType; @@ -2058,12 +2049,10 @@ void drawPrimitive(IWineD3DDevice *iface numberOfVertices = calculatedNumberOfindices;
drawPrimitiveDrawStrided(iface, useVertexShaderFunction, usePixelShaderFunction, - dataLocations, numberOfVertices, calculatedNumberOfindices, glPrimType, + &This->strided_streams, numberOfVertices, calculatedNumberOfindices, glPrimType, idxData, idxSize, minIndex, StartIdx, fixup); }
- if(!DrawPrimStrideData) HeapFree(GetProcessHeap(), 0, dataLocations); - /* If vertex shaders or no normals, restore previous lighting state */ if (lighting_changed) { if (lighting_original) glEnable(GL_LIGHTING); diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index dce5e08..74655d2 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -659,6 +659,9 @@ typedef struct IWineD3DDeviceImpl DWORD texUnitMap[MAX_SAMPLERS]; BOOL oneToOneTexUnitMap;
+ /* Stream source management */ + WineDirect3DVertexStridedData strided_streams; + } IWineD3DDeviceImpl;
extern const IWineD3DDeviceVtbl IWineD3DDevice_Vtbl;