From 091f9c28e4410039c36b0a7e40ed86dc18aaad70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Tue, 2 Jan 2007 00:21:26 +0100 Subject: [PATCH] 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 7e897f1b37b..63e1cae110c 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 dce5e086968..74655d27fae 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;