From 1cdc5e759c62e9d537824e32e46d6078aad8b157 Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Thu, 13 Dec 2007 02:02:15 +0000 Subject: [PATCH] patch from Kamil Hornicek tykef at atlas dot cz (irc nick : Pigglesworth) fix one fixme in createsurface.c support more that only dx7 surface in createsurface.c svn path=/trunk/; revision=31189 --- reactos/dll/directx/ddraw/Ddraw/ddraw.h | 10 ++++++- reactos/dll/directx/ddraw/Ddraw/ddraw_main.c | 9 ++++--- .../dll/directx/ddraw/Surface/createsurface.c | 27 ++++++++++++++++--- reactos/dll/directx/ddraw/rosdraw.h | 2 +- 4 files changed, 38 insertions(+), 10 deletions(-) diff --git a/reactos/dll/directx/ddraw/Ddraw/ddraw.h b/reactos/dll/directx/ddraw/Ddraw/ddraw.h index a29640397ea..5de7a2d5396 100644 --- a/reactos/dll/directx/ddraw/Ddraw/ddraw.h +++ b/reactos/dll/directx/ddraw/Ddraw/ddraw.h @@ -30,11 +30,18 @@ Main_DirectDraw_CreatePalette( LPDIRECTDRAWPALETTE* ppPalette, LPUNKNOWN pUnkOuter); +HRESULT WINAPI +Main_DirectDraw_CreateSurface( + LPDDRAWI_DIRECTDRAW_INT This, + LPDDSURFACEDESC pDDSD, + LPDDRAWI_DDRAWSURFACE_INT *ppSurf, + IUnknown *pUnkOuter); + HRESULT WINAPI Main_DirectDraw_CreateSurface4( LPDDRAWI_DIRECTDRAW_INT This, LPDDSURFACEDESC2 pDDSD, - LPDIRECTDRAWSURFACE7 *ppSurf, + LPDDRAWI_DDRAWSURFACE_INT *ppSurf, IUnknown *pUnkOuter); HRESULT WINAPI @@ -209,3 +216,4 @@ DWORD CALLBACK HelDdSurfUnlock(LPDDHAL_UNLOCKDATA lpUnLockData); DWORD CALLBACK HelDdSurfUpdateOverlay(LPDDHAL_UPDATEOVERLAYDATA lpUpDateOveryLayData); + diff --git a/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c b/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c index d35d8dd09c5..a2516830a9d 100644 --- a/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c +++ b/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c @@ -434,7 +434,7 @@ Main_DirectDraw_GetFourCCCodes(LPDDRAWI_DIRECTDRAW_INT This, LPDWORD lpNumCodes, /* For DirectDraw 1 - 3 */ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDDRAWI_DIRECTDRAW_INT This, LPDDSURFACEDESC pDDSD, - LPDIRECTDRAWSURFACE *ppSurf, IUnknown *pUnkOuter) + LPDDRAWI_DDRAWSURFACE_INT *ppSurf, IUnknown *pUnkOuter) { HRESULT ret = DDERR_GENERIC; DDSURFACEDESC2 dd_desc_v2; @@ -449,7 +449,7 @@ Main_DirectDraw_CreateSurface (LPDDRAWI_DIRECTDRAW_INT This, LPDDSURFACEDESC pDD CopyDDSurfDescToDDSurfDesc2(&dd_desc_v2, (LPDDSURFACEDESC)pDDSD); ret = Internal_CreateSurface(This, &dd_desc_v2, - (LPDIRECTDRAWSURFACE7 *)ppSurf, + ppSurf, pUnkOuter); } else @@ -470,14 +470,14 @@ Main_DirectDraw_CreateSurface (LPDDRAWI_DIRECTDRAW_INT This, LPDDSURFACEDESC pDD /* For DirectDraw 4 - 7 */ HRESULT WINAPI Main_DirectDraw_CreateSurface4(LPDDRAWI_DIRECTDRAW_INT This, LPDDSURFACEDESC2 pDDSD, - LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter) + LPDDRAWI_DDRAWSURFACE_INT *ppSurf, IUnknown *pUnkOuter) { HRESULT ret; DX_WINDBG_trace(); // EnterCriticalSection(&ddcs); _SEH_TRY { - ret = Internal_CreateSurface(This, pDDSD, ppSurf,pUnkOuter); + ret = Internal_CreateSurface(This, pDDSD, ppSurf, pUnkOuter); } _SEH_HANDLE { @@ -499,3 +499,4 @@ Main_DirectDraw_CreateSurface4(LPDDRAWI_DIRECTDRAW_INT This, LPDDSURFACEDESC2 pD + diff --git a/reactos/dll/directx/ddraw/Surface/createsurface.c b/reactos/dll/directx/ddraw/Surface/createsurface.c index 4bc1f11e549..950af4595b2 100644 --- a/reactos/dll/directx/ddraw/Surface/createsurface.c +++ b/reactos/dll/directx/ddraw/Surface/createsurface.c @@ -22,7 +22,7 @@ HRESULT Internal_CreateSurface( LPDDRAWI_DIRECTDRAW_INT pDDraw, LPDDSURFACEDESC2 pDDSD, - LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter) + LPDDRAWI_DDRAWSURFACE_INT *ppSurf, IUnknown *pUnkOuter) { DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface = { 0 }; DDHAL_CREATESURFACEDATA mDdCreateSurface = { 0 }; @@ -175,8 +175,26 @@ Internal_CreateSurface( LPDDRAWI_DIRECTDRAW_INT pDDraw, LPDDSURFACEDESC2 pDDSD, ThisSurfaceGbl->dwLinearSize = pDDSD->lPitch; } - /* FIXME set right version */ - ThisSurfInt->lpVtbl = &DirectDrawSurface7_Vtable; + if(pDDraw->lpVtbl == &DirectDraw7_Vtable) + { + ThisSurfInt->lpVtbl = &DirectDrawSurface7_Vtable; + } + else if(pDDraw->lpVtbl == &DirectDraw4_Vtable) + { + ThisSurfInt->lpVtbl = &DirectDrawSurface4_Vtable; + } + else if(pDDraw->lpVtbl == &DirectDraw2_Vtable) + { + ThisSurfInt->lpVtbl = &DirectDrawSurface2_Vtable; + } + else if(pDDraw->lpVtbl == &DirectDraw_Vtable) + { + ThisSurfInt->lpVtbl = &DirectDrawSurface_Vtable; + } + else + { + return DDERR_NOTINITIALIZED; + } ThisSurfLcl->lpSurfMore = ThisSurfaceMore; ThisSurfaceMore->dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE); @@ -232,7 +250,7 @@ Internal_CreateSurface( LPDDRAWI_DIRECTDRAW_INT pDDraw, LPDDSURFACEDESC2 pDDSD, return mDdCreateSurface.ddRVal; } - *ppSurf = (LPDIRECTDRAWSURFACE7) &slist_int[0]->lpVtbl; + *ppSurf = (LPDDRAWI_DDRAWSURFACE_INT) &slist_int[0]->lpVtbl; return DD_OK; } @@ -248,3 +266,4 @@ void CopyDDSurfDescToDDSurfDesc2(LPDDSURFACEDESC2 dst_pDesc, LPDDSURFACEDESC src + diff --git a/reactos/dll/directx/ddraw/rosdraw.h b/reactos/dll/directx/ddraw/rosdraw.h index 458eb4f2eff..79be64026ba 100644 --- a/reactos/dll/directx/ddraw/rosdraw.h +++ b/reactos/dll/directx/ddraw/rosdraw.h @@ -83,7 +83,7 @@ HRESULT Internal_CreateSurface( LPDDRAWI_DIRECTDRAW_INT pDDraw, LPDDSURFACEDESC2 pDDSD, - LPDIRECTDRAWSURFACE7 *ppSurf, + LPDDRAWI_DDRAWSURFACE_INT *ppSurf, IUnknown *pUnkOuter); /* convert DDSURFACEDESC to DDSURFACEDESC2 */