diff --git a/reactos/dll/directx/ddraw/soft/surface_callbacks_hel.c b/reactos/dll/directx/ddraw/callbacks_hel.c similarity index 98% rename from reactos/dll/directx/ddraw/soft/surface_callbacks_hel.c rename to reactos/dll/directx/ddraw/callbacks_hel.c index 13a1f8ec818..1ef5543c07c 100644 --- a/reactos/dll/directx/ddraw/soft/surface_callbacks_hel.c +++ b/reactos/dll/directx/ddraw/callbacks_hel.c @@ -8,7 +8,7 @@ * */ -#include "../rosdraw.h" +#include "rosdraw.h" extern DDPIXELFORMAT pixelformats[]; diff --git a/reactos/dll/directx/ddraw/cleanup.c b/reactos/dll/directx/ddraw/cleanup.c index 918a289b0b3..f2d7fdf1cc7 100644 --- a/reactos/dll/directx/ddraw/cleanup.c +++ b/reactos/dll/directx/ddraw/cleanup.c @@ -15,37 +15,11 @@ VOID Cleanup(LPDIRECTDRAW7 iface) { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; - - if (This->mDDrawGlobal.hDD != 0) - { - DdDeleteDirectDrawObject (&This->mDDrawGlobal); - } - - if (This->mpTextures != NULL) - { - DxHeapMemFree(This->mpTextures); - } - - if (This->mpFourCC != NULL) - { - DxHeapMemFree(This->mpFourCC); - } - - if (This->mpvmList != NULL) - { - DxHeapMemFree(This->mpvmList); - } - - if (This->mpModeInfos != NULL) - { - DxHeapMemFree(This->mpModeInfos); - } - - if (This->hdc != NULL) - { - DeleteDC(This->hdc); - } + /* FIXME + free all memory and delete all dx stuff + */ } + + diff --git a/reactos/dll/directx/ddraw/ddraw.rbuild b/reactos/dll/directx/ddraw/ddraw.rbuild index 84191863bd5..0b6d606fb76 100644 --- a/reactos/dll/directx/ddraw/ddraw.rbuild +++ b/reactos/dll/directx/ddraw/ddraw.rbuild @@ -1,12 +1,12 @@ - + . 0x0600 0x0501 - - ntdll + + ntdll kernel32 gdi32 d3d8thk @@ -17,30 +17,22 @@ ddraw.rc main.c - regsvr.c startup.c cleanup.c - clipper.c - color.c - gamma.c - palette.c - videoport.c - kernel.c + iface_clipper.c + iface_color.c + iface_gamma.c + iface_palette.c + iface_videoport.c + iface_kernel.c - - surface_hal.c - + callbacks_hel.c ddraw_main.c surface_main.c - - - - surface_hel.c - surface_callbacks_hel.c - + ddraw_thunk.c diff --git a/reactos/dll/directx/ddraw/hal/surface_hal.c b/reactos/dll/directx/ddraw/hal/surface_hal.c deleted file mode 100644 index fbdde3863b4..00000000000 --- a/reactos/dll/directx/ddraw/hal/surface_hal.c +++ /dev/null @@ -1,206 +0,0 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS - * FILE: lib/ddraw/hal/surface.c - * PURPOSE: DirectDraw HAL Implementation - * PROGRAMMER: Magnus Olsen, Maarten Bosma - * - */ - -#include "../rosdraw.h" - - - - -HRESULT Hal_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rDest, - LPDIRECTDRAWSURFACE7 src, LPRECT rSrc, DWORD dwFlags, LPDDBLTFX lpbltfx) -{ - DDHAL_BLTDATA mDdBlt; - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; - - IDirectDrawSurfaceImpl* That = NULL; - if (src!=NULL) - { - That = (IDirectDrawSurfaceImpl*)src; - } - - if (This==NULL) - { - return DD_FALSE; - } - - if (!(This->Owner->mDDrawGlobal.lpDDCBtmp->HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT)) - { - return DDERR_NODRIVERSUPPORT; - } - - mDdBlt.lpDDDestSurface = This->Surf->mpPrimaryLocals[0]; - - if (!DdResetVisrgn(This->Surf->mpPrimaryLocals[0], NULL)) - { - return DDERR_NOGDI; - } - - memset(&mDdBlt, 0, sizeof(DDHAL_BLTDATA)); - memset(&mDdBlt.bltFX, 0, sizeof(DDBLTFX)); - - if (lpbltfx!=NULL) - { - memcpy(&mDdBlt.bltFX, lpbltfx, sizeof(DDBLTFX)); - } - - if (rDest!=NULL) - { - memcpy(& mDdBlt.rDest, rDest, sizeof(RECTL)); - } - - if (rSrc!=NULL) - { - memcpy(& mDdBlt.rDest, rSrc, sizeof(RECTL)); - } - - if (src != NULL) - { - mDdBlt.lpDDSrcSurface = That->Surf->mpSurfLocals[0]; - } - - mDdBlt.lpDD = &This->Owner->mDDrawGlobal; - mDdBlt.Blt = This->Owner->mCallbacks.HALDDSurface.Blt; - mDdBlt.lpDDDestSurface = This->Surf->mpInUseSurfaceLocals[0]; - - mDdBlt.dwFlags = dwFlags; - - - // FIXME dectect if it clipped or not - mDdBlt.IsClipped = FALSE; - - if (mDdBlt.Blt(&mDdBlt) != DDHAL_DRIVER_HANDLED) - { - return DDHAL_DRIVER_HANDLED; - } - - if (mDdBlt.ddRVal!=DD_OK) - { - return mDdBlt.ddRVal; - } - - return DD_OK; -} - -HRESULT Hal_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURFACEDESC2 - pDDSD, DWORD flags, HANDLE event) -{ - - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; - - DDHAL_LOCKDATA Lock; - - if (prect!=NULL) - { - Lock.bHasRect = TRUE; - memcpy(&Lock.rArea,prect,sizeof(RECTL)); - } - else - { - Lock.bHasRect = FALSE; - } - - Lock.ddRVal = DDERR_NOTPALETTIZED; - Lock.Lock = This->Owner->mCallbacks.HALDDSurface.Lock; - Lock.dwFlags = flags; - Lock.lpDDSurface = This->Surf->mpInUseSurfaceLocals[0]; - Lock.lpDD = &This->Owner->mDDrawGlobal; - Lock.lpSurfData = NULL; - - if (!DdResetVisrgn(&This->Surf->mPrimaryLocal, NULL)) - { - OutputDebugStringA("Here DdResetVisrgn lock"); - return DDERR_UNSUPPORTED; - } - - if (Lock.Lock(&Lock)!= DDHAL_DRIVER_HANDLED) - { - OutputDebugStringA("Here DDHAL_DRIVER_HANDLED lock"); - return DDERR_UNSUPPORTED; - } - - if (Lock.ddRVal!= DD_OK) - { - OutputDebugStringA("Here ddRVal lock"); - return Lock.ddRVal; - } - - // FIXME ??? is this right ?? - if (pDDSD != NULL) - { - if (pDDSD->dwSize == sizeof(DDSURFACEDESC2)) - { - RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC2)); - // FIXME the interanl mddsdPrimary shall be DDSURFACEDESC2 - memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC)); - pDDSD->dwSize = sizeof(DDSURFACEDESC2); - } - if (pDDSD->dwSize == sizeof(DDSURFACEDESC)) - { - RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC)); - memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC)); - pDDSD->dwSize = sizeof(DDSURFACEDESC); - } - - pDDSD->lpSurface = (LPVOID) Lock.lpSurfData; - } - - return DD_OK; -} -HRESULT Hal_DDrawSurface_Unlock(LPDIRECTDRAWSURFACE7 iface, LPRECT pRect) -{ - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; - - DDHAL_UNLOCKDATA unLock; - unLock.ddRVal = DDERR_NOTPALETTIZED; - unLock.lpDD = &This->Owner->mDDrawGlobal; - unLock.lpDDSurface = This->Surf->mpInUseSurfaceLocals[0]; - unLock.Unlock = This->Owner->mCallbacks.HALDDSurface.Unlock; - - - - if (!DdResetVisrgn( unLock.lpDDSurface, NULL)) - { - return DDERR_UNSUPPORTED; - } - - if (unLock.Unlock(&unLock)!= DDHAL_DRIVER_HANDLED) - { - return DDERR_UNSUPPORTED; - } - - if (unLock.ddRVal!= DD_OK) - { - return unLock.ddRVal; - } - - return DD_OK; -} - -HRESULT Hal_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAWSURFACE7 override, DWORD dwFlags) -{ - DX_STUB; -} - -HRESULT Hal_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags, LPDDCOLORKEY pCKey) -{ - DX_STUB; -} - -HRESULT Hal_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags) -{ - DX_STUB; -} - -HRESULT Hal_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags) -{ - DX_STUB; -} - - diff --git a/reactos/dll/directx/ddraw/clipper.c b/reactos/dll/directx/ddraw/iface_clipper.c similarity index 85% rename from reactos/dll/directx/ddraw/clipper.c rename to reactos/dll/directx/ddraw/iface_clipper.c index bee251caa35..1333d84069a 100644 --- a/reactos/dll/directx/ddraw/clipper.c +++ b/reactos/dll/directx/ddraw/iface_clipper.c @@ -1,132 +1,132 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS - * FILE: lib/ddraw/main/clipper.c - * PURPOSE: IDirectDrawClipper Implementation - * PROGRAMMER: Maarten Bosma - * - */ - -#include "rosdraw.h" - - -ULONG WINAPI -DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface) -{ - - IDirectDrawClipperImpl* This = (IDirectDrawClipperImpl*)iface; - ULONG ref=0; - - DX_WINDBG_trace(); - - if (iface!=NULL) - { - ref = InterlockedDecrement( (PLONG) &This->ref); - - if (ref == 0) - { - /* Add here if we need releae some memory pointer before - * exists - */ - - if (This!=NULL) - { - HeapFree(GetProcessHeap(), 0, This); - } - } - } - return ref; -} - -ULONG WINAPI -DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface) -{ - IDirectDrawClipperImpl * This = (IDirectDrawClipperImpl*)iface; - ULONG ref=0; - - DX_WINDBG_trace(); - - if (iface!=NULL) - { - ref = InterlockedIncrement( (PLONG) &This->ref); - } - return ref; -} - -HRESULT WINAPI -DirectDrawClipper_Initialize( LPDIRECTDRAWCLIPPER iface, - LPDIRECTDRAW lpDD, - DWORD dwFlags) -{ - /* FIXME not implment */ - DX_WINDBG_trace(); - DX_STUB_DD_OK; -} - -HRESULT WINAPI -DirectDrawClipper_SetHwnd( LPDIRECTDRAWCLIPPER iface, - DWORD dwFlags, - HWND hWnd) -{ - /* FIXME not implment */ - DX_WINDBG_trace(); - DX_STUB_DD_OK; -} - -HRESULT WINAPI -DirectDrawClipper_GetClipList( LPDIRECTDRAWCLIPPER iface, - LPRECT lpRect, - LPRGNDATA lpClipList, - LPDWORD lpdwSize) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawClipper_SetClipList( LPDIRECTDRAWCLIPPER iface, - LPRGNDATA lprgn, - DWORD dwFlag) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawClipper_QueryInterface( LPDIRECTDRAWCLIPPER iface, - REFIID riid, - LPVOID* ppvObj) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawClipper_GetHWnd( LPDIRECTDRAWCLIPPER iface, - HWND* hWndPtr) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawClipper_IsClipListChanged( LPDIRECTDRAWCLIPPER iface, - BOOL* lpbChanged) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -IDirectDrawClipperVtbl DirectDrawClipper_Vtable = -{ - DirectDrawClipper_QueryInterface, - DirectDrawClipper_AddRef, - DirectDrawClipper_Release, - DirectDrawClipper_GetClipList, - DirectDrawClipper_GetHWnd, - DirectDrawClipper_Initialize, - DirectDrawClipper_IsClipListChanged, - DirectDrawClipper_SetClipList, - DirectDrawClipper_SetHwnd -}; +/* $Id: clipper.c 24690 2006-11-05 21:19:53Z greatlrd $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS + * FILE: lib/ddraw/main/clipper.c + * PURPOSE: IDirectDrawClipper Implementation + * PROGRAMMER: Maarten Bosma + * + */ + +#include "rosdraw.h" + + +ULONG WINAPI +DirectDrawClipper_Release(LPDIRECTDRAWCLIPPER iface) +{ + + LPDDRAWI_DDRAWCLIPPER_INT This = (LPDDRAWI_DDRAWCLIPPER_INT)iface; + ULONG ref=0; + + DX_WINDBG_trace(); + + if (iface!=NULL) + { + ref = InterlockedDecrement( (PLONG) &This->dwIntRefCnt); + + if (ref == 0) + { + /* Add here if we need releae some memory pointer before + * exists + */ + + if (This!=NULL) + { + HeapFree(GetProcessHeap(), 0, This); + } + } + } + return ref; +} + +ULONG WINAPI +DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface) +{ + LPDDRAWI_DDRAWCLIPPER_INT This = (LPDDRAWI_DDRAWCLIPPER_INT)iface; + ULONG ref=0; + + DX_WINDBG_trace(); + + if (iface!=NULL) + { + ref = InterlockedIncrement( (PLONG) &This->dwIntRefCnt); + } + return ref; +} + +HRESULT WINAPI +DirectDrawClipper_Initialize( LPDIRECTDRAWCLIPPER iface, + LPDIRECTDRAW lpDD, + DWORD dwFlags) +{ + /* FIXME not implment */ + DX_WINDBG_trace(); + DX_STUB_DD_OK; +} + +HRESULT WINAPI +DirectDrawClipper_SetHwnd( LPDIRECTDRAWCLIPPER iface, + DWORD dwFlags, + HWND hWnd) +{ + /* FIXME not implment */ + DX_WINDBG_trace(); + DX_STUB_DD_OK; +} + +HRESULT WINAPI +DirectDrawClipper_GetClipList( LPDIRECTDRAWCLIPPER iface, + LPRECT lpRect, + LPRGNDATA lpClipList, + LPDWORD lpdwSize) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawClipper_SetClipList( LPDIRECTDRAWCLIPPER iface, + LPRGNDATA lprgn, + DWORD dwFlag) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawClipper_QueryInterface( LPDIRECTDRAWCLIPPER iface, + REFIID riid, + LPVOID* ppvObj) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawClipper_GetHWnd( LPDIRECTDRAWCLIPPER iface, + HWND* hWndPtr) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawClipper_IsClipListChanged( LPDIRECTDRAWCLIPPER iface, + BOOL* lpbChanged) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +IDirectDrawClipperVtbl DirectDrawClipper_Vtable = +{ + DirectDrawClipper_QueryInterface, + DirectDrawClipper_AddRef, + DirectDrawClipper_Release, + DirectDrawClipper_GetClipList, + DirectDrawClipper_GetHWnd, + DirectDrawClipper_Initialize, + DirectDrawClipper_IsClipListChanged, + DirectDrawClipper_SetClipList, + DirectDrawClipper_SetHwnd +}; diff --git a/reactos/dll/directx/ddraw/color.c b/reactos/dll/directx/ddraw/iface_color.c similarity index 81% rename from reactos/dll/directx/ddraw/color.c rename to reactos/dll/directx/ddraw/iface_color.c index 184fe1bf348..0c7a8de7d58 100644 --- a/reactos/dll/directx/ddraw/color.c +++ b/reactos/dll/directx/ddraw/iface_color.c @@ -1,87 +1,87 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS - * FILE: lib/ddraw/main/color.c - * PURPOSE: IDirectDrawColorControl Implementation - * PROGRAMMER: Maarten Bosma - * - */ - -#include "rosdraw.h" - -ULONG WINAPI -DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface) -{ - IDirectDrawColorImpl * This = (IDirectDrawColorImpl*)iface; - ULONG ref=0; - - DX_WINDBG_trace(); - - if (iface!=NULL) - { - ref = InterlockedIncrement( (PLONG) &This->ref); - } - return ref; -} - -ULONG WINAPI -DirectDrawColorControl_Release( LPDIRECTDRAWCOLORCONTROL iface) -{ - IDirectDrawColorImpl* This = (IDirectDrawColorImpl*)iface; - ULONG ref=0; - - DX_WINDBG_trace(); - - if (iface!=NULL) - { - ref = InterlockedDecrement( (PLONG) &This->ref); - - if (ref == 0) - { - /* Add here if we need releae some memory pointer before - * exists - */ - - if (This!=NULL) - { - HeapFree(GetProcessHeap(), 0, This); - } - } - } - return ref; -} - -HRESULT WINAPI -DirectDrawColorControl_QueryInterface( LPDIRECTDRAWCOLORCONTROL iface, - REFIID riid, - LPVOID* ppvObj) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawColorControl_GetColorControls( LPDIRECTDRAWCOLORCONTROL iface, - LPDDCOLORCONTROL lpColorControl) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawColorControl_SetColorControls( LPDIRECTDRAWCOLORCONTROL iface, - LPDDCOLORCONTROL lpColorControl) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -IDirectDrawColorControlVtbl DirectDrawColorControl_Vtable = -{ - DirectDrawColorControl_QueryInterface, - DirectDrawColorControl_AddRef, - DirectDrawColorControl_Release, - DirectDrawColorControl_GetColorControls, - DirectDrawColorControl_SetColorControls -}; +/* $Id: color.c 24690 2006-11-05 21:19:53Z greatlrd $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS + * FILE: lib/ddraw/main/color.c + * PURPOSE: IDirectDrawColorControl Implementation + * PROGRAMMER: Maarten Bosma + * + */ + +#include "rosdraw.h" + +ULONG WINAPI +DirectDrawColorControl_AddRef( LPDIRECTDRAWCOLORCONTROL iface) +{ + LPDDRAWI_DDCOLORCONTROL_INT This = (LPDDRAWI_DDCOLORCONTROL_INT)iface; + ULONG ref=0; + + DX_WINDBG_trace(); + + if (iface!=NULL) + { + ref = InterlockedIncrement( (PLONG) &This->dwIntRefCnt); + } + return ref; +} + +ULONG WINAPI +DirectDrawColorControl_Release( LPDIRECTDRAWCOLORCONTROL iface) +{ + LPDDRAWI_DDCOLORCONTROL_INT This = (LPDDRAWI_DDCOLORCONTROL_INT)iface; + ULONG ref=0; + + DX_WINDBG_trace(); + + if (iface!=NULL) + { + ref = InterlockedDecrement( (PLONG) &This->dwIntRefCnt); + + if (ref == 0) + { + /* Add here if we need releae some memory pointer before + * exists + */ + + if (This!=NULL) + { + HeapFree(GetProcessHeap(), 0, This); + } + } + } + return ref; +} + +HRESULT WINAPI +DirectDrawColorControl_QueryInterface( LPDIRECTDRAWCOLORCONTROL iface, + REFIID riid, + LPVOID* ppvObj) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawColorControl_GetColorControls( LPDIRECTDRAWCOLORCONTROL iface, + LPDDCOLORCONTROL lpColorControl) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawColorControl_SetColorControls( LPDIRECTDRAWCOLORCONTROL iface, + LPDDCOLORCONTROL lpColorControl) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +IDirectDrawColorControlVtbl DirectDrawColorControl_Vtable = +{ + DirectDrawColorControl_QueryInterface, + DirectDrawColorControl_AddRef, + DirectDrawColorControl_Release, + DirectDrawColorControl_GetColorControls, + DirectDrawColorControl_SetColorControls +}; diff --git a/reactos/dll/directx/ddraw/gamma.c b/reactos/dll/directx/ddraw/iface_gamma.c similarity index 80% rename from reactos/dll/directx/ddraw/gamma.c rename to reactos/dll/directx/ddraw/iface_gamma.c index 8394f98852f..eb597d0bb94 100644 --- a/reactos/dll/directx/ddraw/gamma.c +++ b/reactos/dll/directx/ddraw/iface_gamma.c @@ -1,89 +1,92 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS - * FILE: lib/ddraw/main/gamma.c - * PURPOSE: IDirectDrawGamma Implementation - * PROGRAMMER: Maarten Bosma - * - */ - -#include "rosdraw.h" - -ULONG WINAPI -DirectDrawGammaControl_AddRef( LPDIRECTDRAWGAMMACONTROL iface) -{ - IDirectDrawGammaImpl * This = (IDirectDrawGammaImpl*)iface; - - ULONG ref=0; - - DX_WINDBG_trace(); - - if (iface!=NULL) - { - ref = InterlockedIncrement( (PLONG) &This->ref); - } - return ref; -} - -ULONG WINAPI -DirectDrawGammaControl_Release( LPDIRECTDRAWGAMMACONTROL iface) -{ - IDirectDrawGammaImpl* This = (IDirectDrawGammaImpl*)iface; - ULONG ref=0; - DX_WINDBG_trace(); - - if (iface!=NULL) - { - ref = InterlockedDecrement( (PLONG) &This->ref); - - if (ref == 0) - { - /* Add here if we need releae some memory pointer before - * exists - */ - - if (This!=NULL) - { - HeapFree(GetProcessHeap(), 0, This); - } - } - } - return ref; -} - -HRESULT WINAPI -DirectDrawGammaControl_QueryInterface( LPDIRECTDRAWGAMMACONTROL iface, - REFIID riid, - LPVOID *ppObj) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawGammaControl_GetGammaRamp( LPDIRECTDRAWGAMMACONTROL iface, - DWORD dwFlags, - LPDDGAMMARAMP lpGammaRamp) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawGammaControl_SetGammaRamp( LPDIRECTDRAWGAMMACONTROL iface, - DWORD dwFlags, - LPDDGAMMARAMP lpGammaRamp) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -IDirectDrawGammaControlVtbl DirectDrawGammaControl_Vtable = -{ - DirectDrawGammaControl_QueryInterface, - DirectDrawGammaControl_AddRef, - DirectDrawGammaControl_Release, - DirectDrawGammaControl_GetGammaRamp, - DirectDrawGammaControl_SetGammaRamp -}; +/* $Id: gamma.c 24690 2006-11-05 21:19:53Z greatlrd $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS + * FILE: lib/ddraw/main/gamma.c + * PURPOSE: IDirectDrawGamma Implementation + * PROGRAMMER: Maarten Bosma + * + */ + +#include "rosdraw.h" + +ULONG WINAPI +DirectDrawGammaControl_AddRef( LPDIRECTDRAWGAMMACONTROL iface) +{ + LPDDRAWI_DDGAMMACONTROL_INT This = (LPDDRAWI_DDGAMMACONTROL_INT)iface; + + ULONG ref=0; + DX_WINDBG_trace(); + + if (iface!=NULL) + { + This->dwIntRefCnt++; + ref = This->dwIntRefCnt; + } + return ref; +} + +ULONG WINAPI +DirectDrawGammaControl_Release( LPDIRECTDRAWGAMMACONTROL iface) +{ + LPDDRAWI_DDGAMMACONTROL_INT This = (LPDDRAWI_DDGAMMACONTROL_INT)iface; + ULONG ref=0; + + DX_WINDBG_trace(); + + if (iface!=NULL) + { + This->dwIntRefCnt--; + + if (This->dwIntRefCnt == 0) + { + /* Add here if we need releae some memory pointer before + * exists + */ + + if (This!=NULL) + { + HeapFree(GetProcessHeap(), 0, This); + } + } + + ref = This->dwIntRefCnt; + } + return ref; +} + +HRESULT WINAPI +DirectDrawGammaControl_QueryInterface( LPDIRECTDRAWGAMMACONTROL iface, + REFIID riid, + LPVOID *ppObj) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawGammaControl_GetGammaRamp( LPDIRECTDRAWGAMMACONTROL iface, + DWORD dwFlags, + LPDDGAMMARAMP lpGammaRamp) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawGammaControl_SetGammaRamp( LPDIRECTDRAWGAMMACONTROL iface, + DWORD dwFlags, + LPDDGAMMARAMP lpGammaRamp) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +IDirectDrawGammaControlVtbl DirectDrawGammaControl_Vtable = +{ + DirectDrawGammaControl_QueryInterface, + DirectDrawGammaControl_AddRef, + DirectDrawGammaControl_Release, + DirectDrawGammaControl_GetGammaRamp, + DirectDrawGammaControl_SetGammaRamp +}; diff --git a/reactos/dll/directx/ddraw/kernel.c b/reactos/dll/directx/ddraw/iface_kernel.c similarity index 78% rename from reactos/dll/directx/ddraw/kernel.c rename to reactos/dll/directx/ddraw/iface_kernel.c index c738596e549..cc0c37d3db4 100644 --- a/reactos/dll/directx/ddraw/kernel.c +++ b/reactos/dll/directx/ddraw/iface_kernel.c @@ -1,168 +1,173 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS - * FILE: lib/ddraw/main/kernel.c - * PURPOSE: IDirectDrawKernel and IDirectDrawSurfaceKernel Implementation - * PROGRAMMER: Maarten Bosma - * - */ - -#include "rosdraw.h" - - -/***** IDirectDrawKernel ****/ - -ULONG WINAPI -DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface) -{ - - IDirectDrawKernelImpl * This = (IDirectDrawKernelImpl*)iface; - - ULONG ref=0; - - DX_WINDBG_trace(); - - if (iface!=NULL) - { - ref = InterlockedIncrement( (PLONG) &This->ref); - } - return ref; -} - -ULONG WINAPI -DirectDrawKernel_Release ( LPDIRECTDRAWKERNEL iface) -{ - IDirectDrawKernelImpl* This = (IDirectDrawKernelImpl*)iface; - ULONG ref=0; - - DX_WINDBG_trace(); - - if (iface!=NULL) - { - ref = InterlockedDecrement( (PLONG) &This->ref); - - if (ref == 0) - { - /* Add here if we need releae some memory pointer before - * exists - */ - - if (This!=NULL) - { - HeapFree(GetProcessHeap(), 0, This); - } - } - } - return ref; -} - -HRESULT WINAPI -DirectDrawKernel_QueryInterface ( LPDIRECTDRAWKERNEL iface, - REFIID riid, - LPVOID* ppvObj) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawKernel_GetKernelHandle ( LPDIRECTDRAWKERNEL iface, - ULONG* handle) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawKernel_ReleaseKernelHandle ( LPDIRECTDRAWKERNEL iface) -{ - DX_WINDBG_trace(); - DX_STUB; -} - - -ULONG WINAPI -DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface) -{ - IDirectDrawSurfaceKernelImpl * This = (IDirectDrawSurfaceKernelImpl*)iface; - - ULONG ref=0; - DX_WINDBG_trace(); - - if (iface!=NULL) - { - ref = InterlockedIncrement( (PLONG) &This->ref); - } - return ref; -} - -ULONG WINAPI -DDSurfaceKernel_Release ( LPDIRECTDRAWSURFACEKERNEL iface) -{ - IDirectDrawSurfaceKernelImpl* This = (IDirectDrawSurfaceKernelImpl*)iface; - ULONG ref=0; - - DX_WINDBG_trace(); - - if (iface!=NULL) - { - ref = InterlockedDecrement( (PLONG) &This->ref); - - if (ref == 0) - { - /* Add here if we need releae some memory pointer before - * exists - */ - - if (This!=NULL) - { - HeapFree(GetProcessHeap(), 0, This); - } - } - } - return ref; -} - -HRESULT WINAPI -DDSurfaceKernel_QueryInterface ( LPDIRECTDRAWSURFACEKERNEL iface, - REFIID riid, - LPVOID* ppvObj) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DDSurfaceKernel_GetKernelHandle ( LPDIRECTDRAWSURFACEKERNEL iface, - ULONG* handle) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DDSurfaceKernel_ReleaseKernelHandle ( LPDIRECTDRAWSURFACEKERNEL iface) -{ - DX_WINDBG_trace(); - DX_STUB; -} - - -IDirectDrawKernelVtbl DirectDrawKernel_Vtable = -{ - DirectDrawKernel_QueryInterface, - DirectDrawKernel_AddRef, - DirectDrawKernel_Release, - DirectDrawKernel_GetKernelHandle, - DirectDrawKernel_ReleaseKernelHandle -}; - -IDirectDrawSurfaceKernelVtbl DirectDrawSurfaceKernel_Vtable = -{ - DDSurfaceKernel_QueryInterface, - DDSurfaceKernel_AddRef, - DDSurfaceKernel_Release, - DDSurfaceKernel_GetKernelHandle, - DDSurfaceKernel_ReleaseKernelHandle -}; +/* $Id: kernel.c 24690 2006-11-05 21:19:53Z greatlrd $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS + * FILE: lib/ddraw/main/kernel.c + * PURPOSE: IDirectDrawKernel and IDirectDrawSurfaceKernel Implementation + * PROGRAMMER: Maarten Bosma + * + */ + +#include "rosdraw.h" + + +/***** IDirectDrawKernel ****/ + +ULONG WINAPI +DirectDrawKernel_AddRef ( LPDIRECTDRAWKERNEL iface) +{ + + LPDDRAWI_KERNEL_INT This = (LPDDRAWI_KERNEL_INT)iface; + + ULONG ref=0; + DX_WINDBG_trace(); + + if (iface!=NULL) + { + This->dwIntRefCnt++; + ref = This->dwIntRefCnt; + } + return ref; +} + +ULONG WINAPI +DirectDrawKernel_Release ( LPDIRECTDRAWKERNEL iface) +{ + LPDDRAWI_KERNEL_INT This = (LPDDRAWI_KERNEL_INT)iface; + ULONG ref=0; + + DX_WINDBG_trace(); + + if (iface!=NULL) + { + This->dwIntRefCnt--; + + if (This->dwIntRefCnt == 0) + { + /* Add here if we need releae some memory pointer before + * exists + */ + + if (This!=NULL) + { + HeapFree(GetProcessHeap(), 0, This); + } + } + + ref = This->dwIntRefCnt; + } + return ref; +} + +HRESULT WINAPI +DirectDrawKernel_QueryInterface ( LPDIRECTDRAWKERNEL iface, + REFIID riid, + LPVOID* ppvObj) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawKernel_GetKernelHandle ( LPDIRECTDRAWKERNEL iface, + ULONG* handle) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawKernel_ReleaseKernelHandle ( LPDIRECTDRAWKERNEL iface) +{ + DX_WINDBG_trace(); + DX_STUB; +} + + +ULONG WINAPI +DDSurfaceKernel_AddRef ( LPDIRECTDRAWSURFACEKERNEL iface) +{ + LPDDRAWI_DDKERNELSURFACE_INT This = (LPDDRAWI_DDKERNELSURFACE_INT)iface; + + ULONG ref=0; + DX_WINDBG_trace(); + + if (iface!=NULL) + { + This->dwIntRefCnt++; + ref = This->dwIntRefCnt; + } + return ref; +} + +ULONG WINAPI +DDSurfaceKernel_Release ( LPDIRECTDRAWSURFACEKERNEL iface) +{ + LPDDRAWI_DDKERNELSURFACE_INT This = (LPDDRAWI_DDKERNELSURFACE_INT)iface; + ULONG ref=0; + + DX_WINDBG_trace(); + + if (iface!=NULL) + { + This->dwIntRefCnt--; + + if (This->dwIntRefCnt == 0) + { + /* Add here if we need releae some memory pointer before + * exists + */ + + if (This!=NULL) + { + HeapFree(GetProcessHeap(), 0, This); + } + } + + ref = This->dwIntRefCnt; + } + return ref; +} + +HRESULT WINAPI +DDSurfaceKernel_QueryInterface ( LPDIRECTDRAWSURFACEKERNEL iface, + REFIID riid, + LPVOID* ppvObj) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DDSurfaceKernel_GetKernelHandle ( LPDIRECTDRAWSURFACEKERNEL iface, + ULONG* handle) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DDSurfaceKernel_ReleaseKernelHandle ( LPDIRECTDRAWSURFACEKERNEL iface) +{ + DX_WINDBG_trace(); + DX_STUB; +} + + +IDirectDrawKernelVtbl DirectDrawKernel_Vtable = +{ + DirectDrawKernel_QueryInterface, + DirectDrawKernel_AddRef, + DirectDrawKernel_Release, + DirectDrawKernel_GetKernelHandle, + DirectDrawKernel_ReleaseKernelHandle +}; + +IDirectDrawSurfaceKernelVtbl DirectDrawSurfaceKernel_Vtable = +{ + DDSurfaceKernel_QueryInterface, + DDSurfaceKernel_AddRef, + DDSurfaceKernel_Release, + DDSurfaceKernel_GetKernelHandle, + DDSurfaceKernel_ReleaseKernelHandle +}; diff --git a/reactos/dll/directx/ddraw/palette.c b/reactos/dll/directx/ddraw/iface_palette.c similarity index 83% rename from reactos/dll/directx/ddraw/palette.c rename to reactos/dll/directx/ddraw/iface_palette.c index 5a406192cfc..a5494566a94 100644 --- a/reactos/dll/directx/ddraw/palette.c +++ b/reactos/dll/directx/ddraw/iface_palette.c @@ -1,111 +1,111 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS - * FILE: lib/ddraw/main/palette.c - * PURPOSE: IDirectDrawPalette Implementation - * PROGRAMMER: Maarten Bosma - * - */ - -#include "rosdraw.h" - -ULONG WINAPI -DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface) -{ - IDirectDrawPaletteImpl* This = (IDirectDrawPaletteImpl*)iface; - ULONG ref=0; - - DX_WINDBG_trace(); - - if (iface!=NULL) - { - ref = InterlockedDecrement( (PLONG) &This->DDPalette.dwRefCnt); - - if (ref == 0) - { - /* Add here if we need releae some memory pointer before - * exists - */ - - if (This!=NULL) - { - DxHeapMemFree(This); - } - } - } - return ref; -} - -ULONG WINAPI -DirectDrawPalette_AddRef( LPDIRECTDRAWPALETTE iface) -{ - IDirectDrawPaletteImpl * This = (IDirectDrawPaletteImpl*)iface; - ULONG ref=0; - - DX_WINDBG_trace(); - - if (iface!=NULL) - { - ref = InterlockedIncrement( (PLONG) &This->DDPalette.dwRefCnt); - } - return ref; -} - -HRESULT WINAPI -DirectDrawPalette_Initialize( LPDIRECTDRAWPALETTE iface, - LPDIRECTDRAW ddraw, - DWORD dwFlags, - LPPALETTEENTRY palent) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawPalette_GetEntries( LPDIRECTDRAWPALETTE iface, - DWORD dwFlags, - DWORD dwStart, DWORD dwCount, - LPPALETTEENTRY palent) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawPalette_SetEntries( LPDIRECTDRAWPALETTE iface, - DWORD dwFlags, - DWORD dwStart, - DWORD dwCount, - LPPALETTEENTRY palent) -{ - DX_WINDBG_trace(); - DX_STUB; -} -HRESULT WINAPI -DirectDrawPalette_GetCaps( LPDIRECTDRAWPALETTE iface, - LPDWORD lpdwCaps) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -DirectDrawPalette_QueryInterface( LPDIRECTDRAWPALETTE iface, - REFIID refiid, - LPVOID *obj) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -IDirectDrawPaletteVtbl DirectDrawPalette_Vtable = -{ - DirectDrawPalette_QueryInterface, - DirectDrawPalette_AddRef, - DirectDrawPalette_Release, - DirectDrawPalette_GetCaps, - DirectDrawPalette_GetEntries, - DirectDrawPalette_Initialize, - DirectDrawPalette_SetEntries -}; +/* $Id: palette.c 24690 2006-11-05 21:19:53Z greatlrd $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS + * FILE: lib/ddraw/main/palette.c + * PURPOSE: IDirectDrawPalette Implementation + * PROGRAMMER: Maarten Bosma + * + */ + +#include "rosdraw.h" + +ULONG WINAPI +DirectDrawPalette_Release( LPDIRECTDRAWPALETTE iface) +{ + LPDDRAWI_DDRAWPALETTE_INT This = (LPDDRAWI_DDRAWPALETTE_INT)iface; + ULONG ref=0; + + DX_WINDBG_trace(); + + if (iface!=NULL) + { + ref = InterlockedDecrement( (PLONG) &This->dwIntRefCnt); + + if (ref == 0) + { + /* Add here if we need releae some memory pointer before + * exists + */ + + if (This!=NULL) + { + DxHeapMemFree(This); + } + } + } + return ref; +} + +ULONG WINAPI +DirectDrawPalette_AddRef( LPDIRECTDRAWPALETTE iface) +{ + LPDDRAWI_DDRAWPALETTE_INT This = (LPDDRAWI_DDRAWPALETTE_INT)iface; + ULONG ref=0; + + DX_WINDBG_trace(); + + if (iface!=NULL) + { + ref = InterlockedIncrement( (PLONG) &This->dwIntRefCnt); + } + return ref; +} + +HRESULT WINAPI +DirectDrawPalette_Initialize( LPDIRECTDRAWPALETTE iface, + LPDIRECTDRAW ddraw, + DWORD dwFlags, + LPPALETTEENTRY palent) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawPalette_GetEntries( LPDIRECTDRAWPALETTE iface, + DWORD dwFlags, + DWORD dwStart, DWORD dwCount, + LPPALETTEENTRY palent) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawPalette_SetEntries( LPDIRECTDRAWPALETTE iface, + DWORD dwFlags, + DWORD dwStart, + DWORD dwCount, + LPPALETTEENTRY palent) +{ + DX_WINDBG_trace(); + DX_STUB; +} +HRESULT WINAPI +DirectDrawPalette_GetCaps( LPDIRECTDRAWPALETTE iface, + LPDWORD lpdwCaps) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +DirectDrawPalette_QueryInterface( LPDIRECTDRAWPALETTE iface, + REFIID refiid, + LPVOID *obj) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +IDirectDrawPaletteVtbl DirectDrawPalette_Vtable = +{ + DirectDrawPalette_QueryInterface, + DirectDrawPalette_AddRef, + DirectDrawPalette_Release, + DirectDrawPalette_GetCaps, + DirectDrawPalette_GetEntries, + DirectDrawPalette_Initialize, + DirectDrawPalette_SetEntries +}; diff --git a/reactos/dll/directx/ddraw/videoport.c b/reactos/dll/directx/ddraw/iface_videoport.c similarity index 87% rename from reactos/dll/directx/ddraw/videoport.c rename to reactos/dll/directx/ddraw/iface_videoport.c index 8571ad6cf21..3ead1687c39 100644 --- a/reactos/dll/directx/ddraw/videoport.c +++ b/reactos/dll/directx/ddraw/iface_videoport.c @@ -1,261 +1,289 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS - * FILE: lib/ddraw/main/videoport.c - * PURPOSE: IDirectDrawVideoPort, DDVideoPortContainer and IDirectDrawVideoPortNotify Implementation - * PROGRAMMER: Maarten Bosma - * - */ - -#include "rosdraw.h" - - -/************* IDirectDrawVideoPort *************/ - -HRESULT WINAPI -Main_DirectDrawVideoPort_QueryInterface (LPDIRECTDRAWVIDEOPORT iface, REFIID riid, LPVOID* ppvObj) -{ - DX_WINDBG_trace(); - - DX_STUB; -} - -ULONG WINAPI -Main_DirectDrawVideoPort_AddRef (LPDIRECTDRAWVIDEOPORT iface) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -ULONG WINAPI -Main_DirectDrawVideoPort_Release (LPDIRECTDRAWVIDEOPORT iface) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -Main_DirectDrawVideoPort_Flip (LPDIRECTDRAWVIDEOPORT iface, LPDIRECTDRAWSURFACE lpDDSurface, DWORD dwFlags) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -Main_DirectDrawVideoPort_GetBandwidthInfo (LPDIRECTDRAWVIDEOPORT iface, LPDDPIXELFORMAT lpddpfFormat, DWORD dwWidth, - DWORD dwHeight, DWORD dwFlags, LPDDVIDEOPORTBANDWIDTH lpBandwidth) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -Main_DirectDrawVideoPort_GetColorControls (LPDIRECTDRAWVIDEOPORT iface, LPDDCOLORCONTROL lpColorControl) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DirectDrawVideoPort_GetInputFormats (LPDIRECTDRAWVIDEOPORT iface, LPDWORD lpNumFormats, - LPDDPIXELFORMAT lpFormats, DWORD dwFlags) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DirectDrawVideoPort_GetOutputFormats (LPDIRECTDRAWVIDEOPORT iface, LPDDPIXELFORMAT lpInputFormat, - LPDWORD lpNumFormats, LPDDPIXELFORMAT lpFormats, DWORD dwFlags) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DirectDrawVideoPort_GetFieldPolarity (LPDIRECTDRAWVIDEOPORT iface, LPBOOL lpbFieldPolarity) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DirectDrawVideoPort_GetVideoLine (LPDIRECTDRAWVIDEOPORT This, LPDWORD lpdwLine) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DirectDrawVideoPort_GetVideoSignalStatus (LPDIRECTDRAWVIDEOPORT iface, LPDWORD lpdwStatus) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DirectDrawVideoPort_SetColorControls (LPDIRECTDRAWVIDEOPORT iface, LPDDCOLORCONTROL lpColorControl) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DirectDrawVideoPort_SetTargetSurface (LPDIRECTDRAWVIDEOPORT iface, LPDIRECTDRAWSURFACE lpDDSurface, - DWORD dwFlags) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DirectDrawVideoPort_StartVideo (LPDIRECTDRAWVIDEOPORT iface, LPDDVIDEOPORTINFO dwFlags) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DirectDrawVideoPort_StopVideo (LPDIRECTDRAWVIDEOPORT iface) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DirectDrawVideoPort_UpdateVideo (LPDIRECTDRAWVIDEOPORT iface, LPDDVIDEOPORTINFO dwFlags) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DirectDrawVideoPort_WaitForSync (LPDIRECTDRAWVIDEOPORT iface, DWORD dwFlags, DWORD dwLine, - DWORD dwTimeout) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -/************* IDDVideoPortContainer *************/ - -HRESULT WINAPI Main_DDVideoPortContainer_QueryInterface (LPDDVIDEOPORTCONTAINER iface, REFIID riid, LPVOID* ppvObj) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -ULONG WINAPI Main_DDVideoPortContainer_AddRef (LPDDVIDEOPORTCONTAINER iface) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -ULONG WINAPI Main_DDVideoPortContainer_Release (LPDDVIDEOPORTCONTAINER iface) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DDVideoPortContainer_CreateVideoPort (LPDDVIDEOPORTCONTAINER iface, DWORD dwFlags, LPDDVIDEOPORTDESC pPortDesc, - LPDIRECTDRAWVIDEOPORT* DDVideoPort, IUnknown* pUnkOuter) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -Main_DDVideoPortContainer_EnumVideoPorts (LPDDVIDEOPORTCONTAINER iface, - DWORD dwFlags, - LPDDVIDEOPORTCAPS pCaps, - LPVOID pContext, - LPDDENUMVIDEOCALLBACK pEnumVideoCallback) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -Main_DDVideoPortContainer_GetVideoPortConnectInfo (LPDDVIDEOPORTCONTAINER iface, - DWORD PortId, DWORD* pNumEntries, - LPDDVIDEOPORTCONNECT pConnectInfo) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI -Main_DDVideoPortContainer_QueryVideoPortStatus (LPDDVIDEOPORTCONTAINER iface, - DWORD PortId, - LPDDVIDEOPORTSTATUS pStatus) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -/************* IDirectDrawVideoPortNotify *************/ - -HRESULT WINAPI -Main_DDVideoPortNotify_QueryInterface (LPDIRECTDRAWVIDEOPORTNOTIFY iface, REFIID - riid, LPVOID* ppvObj) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -ULONG WINAPI -Main_DDVideoPortNotify_AddRef (LPDIRECTDRAWVIDEOPORTNOTIFY iface) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -ULONG WINAPI -Main_DDVideoPortNotify_Release (LPDIRECTDRAWVIDEOPORTNOTIFY iface) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DDVideoPortNotify_AcquireNotification (LPDIRECTDRAWVIDEOPORTNOTIFY iface, HANDLE* h, LPDDVIDEOPORTNOTIFY pVideoPortNotify) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -HRESULT WINAPI Main_DDVideoPortNotify_ReleaseNotification (LPDIRECTDRAWVIDEOPORTNOTIFY iface, HANDLE h) -{ - DX_WINDBG_trace(); - DX_STUB; -} - -IDirectDrawVideoPortVtbl DirectDrawVideoPort_Vtable = -{ - Main_DirectDrawVideoPort_QueryInterface, - Main_DirectDrawVideoPort_AddRef, - Main_DirectDrawVideoPort_Release, - Main_DirectDrawVideoPort_Flip, - Main_DirectDrawVideoPort_GetBandwidthInfo, - Main_DirectDrawVideoPort_GetColorControls, - Main_DirectDrawVideoPort_GetInputFormats, - Main_DirectDrawVideoPort_GetOutputFormats, - Main_DirectDrawVideoPort_GetFieldPolarity, - Main_DirectDrawVideoPort_GetVideoLine, - Main_DirectDrawVideoPort_GetVideoSignalStatus, - Main_DirectDrawVideoPort_SetColorControls, - Main_DirectDrawVideoPort_SetTargetSurface, - Main_DirectDrawVideoPort_StartVideo, - Main_DirectDrawVideoPort_StopVideo, - Main_DirectDrawVideoPort_UpdateVideo, - Main_DirectDrawVideoPort_WaitForSync -}; - -IDDVideoPortContainerVtbl DDVideoPortContainer_Vtable = -{ - Main_DDVideoPortContainer_QueryInterface, - Main_DDVideoPortContainer_AddRef, - Main_DDVideoPortContainer_Release, - Main_DDVideoPortContainer_CreateVideoPort, - Main_DDVideoPortContainer_EnumVideoPorts, - Main_DDVideoPortContainer_GetVideoPortConnectInfo, - Main_DDVideoPortContainer_QueryVideoPortStatus -}; - -IDirectDrawVideoPortNotifyVtbl DDVideoPortNotify_Vtable = -{ - Main_DDVideoPortNotify_QueryInterface, - Main_DDVideoPortNotify_AddRef, - Main_DDVideoPortNotify_Release, - Main_DDVideoPortNotify_AcquireNotification, - Main_DDVideoPortNotify_ReleaseNotification -}; +/* $Id: videoport.c 22739 2006-07-01 12:08:35Z greatlrd $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS + * FILE: lib/ddraw/main/videoport.c + * PURPOSE: IDirectDrawVideoPort, DDVideoPortContainer and IDirectDrawVideoPortNotify Implementation + * PROGRAMMER: Maarten Bosma + * + */ + +#include "rosdraw.h" + + +/************* IDirectDrawVideoPort *************/ + +HRESULT WINAPI +Main_DirectDrawVideoPort_QueryInterface (LPDIRECTDRAWVIDEOPORT iface, REFIID riid, LPVOID* ppvObj) +{ + DX_WINDBG_trace(); + + DX_STUB; +} + +ULONG WINAPI +Main_DirectDrawVideoPort_AddRef (LPDIRECTDRAWVIDEOPORT iface) +{ + LPDDRAWI_DDVIDEOPORT_INT This = (LPDDRAWI_DDVIDEOPORT_INT)iface; + ULONG ref=0; + + DX_WINDBG_trace(); + + if (iface!=NULL) + { + ref = InterlockedIncrement( (PLONG) &This->dwIntRefCnt); + } + return ref; +} + +ULONG WINAPI +Main_DirectDrawVideoPort_Release (LPDIRECTDRAWVIDEOPORT iface) +{ + LPDDRAWI_DDVIDEOPORT_INT This = (LPDDRAWI_DDVIDEOPORT_INT)iface; + ULONG ref=0; + + DX_WINDBG_trace(); + + if (iface!=NULL) + { + ref = InterlockedDecrement( (PLONG) &This->dwIntRefCnt); + + if (ref == 0) + { + /* Add here if we need releae some memory pointer before + * exists + */ + + if (This!=NULL) + { + DxHeapMemFree(This); + } + } + } + return ref; +} + +HRESULT WINAPI +Main_DirectDrawVideoPort_Flip (LPDIRECTDRAWVIDEOPORT iface, LPDIRECTDRAWSURFACE lpDDSurface, DWORD dwFlags) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +Main_DirectDrawVideoPort_GetBandwidthInfo (LPDIRECTDRAWVIDEOPORT iface, LPDDPIXELFORMAT lpddpfFormat, DWORD dwWidth, + DWORD dwHeight, DWORD dwFlags, LPDDVIDEOPORTBANDWIDTH lpBandwidth) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +Main_DirectDrawVideoPort_GetColorControls (LPDIRECTDRAWVIDEOPORT iface, LPDDCOLORCONTROL lpColorControl) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DirectDrawVideoPort_GetInputFormats (LPDIRECTDRAWVIDEOPORT iface, LPDWORD lpNumFormats, + LPDDPIXELFORMAT lpFormats, DWORD dwFlags) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DirectDrawVideoPort_GetOutputFormats (LPDIRECTDRAWVIDEOPORT iface, LPDDPIXELFORMAT lpInputFormat, + LPDWORD lpNumFormats, LPDDPIXELFORMAT lpFormats, DWORD dwFlags) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DirectDrawVideoPort_GetFieldPolarity (LPDIRECTDRAWVIDEOPORT iface, LPBOOL lpbFieldPolarity) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DirectDrawVideoPort_GetVideoLine (LPDIRECTDRAWVIDEOPORT This, LPDWORD lpdwLine) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DirectDrawVideoPort_GetVideoSignalStatus (LPDIRECTDRAWVIDEOPORT iface, LPDWORD lpdwStatus) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DirectDrawVideoPort_SetColorControls (LPDIRECTDRAWVIDEOPORT iface, LPDDCOLORCONTROL lpColorControl) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DirectDrawVideoPort_SetTargetSurface (LPDIRECTDRAWVIDEOPORT iface, LPDIRECTDRAWSURFACE lpDDSurface, + DWORD dwFlags) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DirectDrawVideoPort_StartVideo (LPDIRECTDRAWVIDEOPORT iface, LPDDVIDEOPORTINFO dwFlags) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DirectDrawVideoPort_StopVideo (LPDIRECTDRAWVIDEOPORT iface) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DirectDrawVideoPort_UpdateVideo (LPDIRECTDRAWVIDEOPORT iface, LPDDVIDEOPORTINFO dwFlags) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DirectDrawVideoPort_WaitForSync (LPDIRECTDRAWVIDEOPORT iface, DWORD dwFlags, DWORD dwLine, + DWORD dwTimeout) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +/************* IDDVideoPortContainer *************/ + +HRESULT WINAPI Main_DDVideoPortContainer_QueryInterface (LPDDVIDEOPORTCONTAINER iface, REFIID riid, LPVOID* ppvObj) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +ULONG WINAPI Main_DDVideoPortContainer_AddRef (LPDDVIDEOPORTCONTAINER iface) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +ULONG WINAPI Main_DDVideoPortContainer_Release (LPDDVIDEOPORTCONTAINER iface) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DDVideoPortContainer_CreateVideoPort (LPDDVIDEOPORTCONTAINER iface, DWORD dwFlags, LPDDVIDEOPORTDESC pPortDesc, + LPDIRECTDRAWVIDEOPORT* DDVideoPort, IUnknown* pUnkOuter) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +Main_DDVideoPortContainer_EnumVideoPorts (LPDDVIDEOPORTCONTAINER iface, + DWORD dwFlags, + LPDDVIDEOPORTCAPS pCaps, + LPVOID pContext, + LPDDENUMVIDEOCALLBACK pEnumVideoCallback) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +Main_DDVideoPortContainer_GetVideoPortConnectInfo (LPDDVIDEOPORTCONTAINER iface, + DWORD PortId, DWORD* pNumEntries, + LPDDVIDEOPORTCONNECT pConnectInfo) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI +Main_DDVideoPortContainer_QueryVideoPortStatus (LPDDVIDEOPORTCONTAINER iface, + DWORD PortId, + LPDDVIDEOPORTSTATUS pStatus) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +/************* IDirectDrawVideoPortNotify *************/ + +HRESULT WINAPI +Main_DDVideoPortNotify_QueryInterface (LPDIRECTDRAWVIDEOPORTNOTIFY iface, REFIID + riid, LPVOID* ppvObj) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +ULONG WINAPI +Main_DDVideoPortNotify_AddRef (LPDIRECTDRAWVIDEOPORTNOTIFY iface) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +ULONG WINAPI +Main_DDVideoPortNotify_Release (LPDIRECTDRAWVIDEOPORTNOTIFY iface) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DDVideoPortNotify_AcquireNotification (LPDIRECTDRAWVIDEOPORTNOTIFY iface, HANDLE* h, LPDDVIDEOPORTNOTIFY pVideoPortNotify) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +HRESULT WINAPI Main_DDVideoPortNotify_ReleaseNotification (LPDIRECTDRAWVIDEOPORTNOTIFY iface, HANDLE h) +{ + DX_WINDBG_trace(); + DX_STUB; +} + +IDirectDrawVideoPortVtbl DirectDrawVideoPort_Vtable = +{ + Main_DirectDrawVideoPort_QueryInterface, + Main_DirectDrawVideoPort_AddRef, + Main_DirectDrawVideoPort_Release, + Main_DirectDrawVideoPort_Flip, + Main_DirectDrawVideoPort_GetBandwidthInfo, + Main_DirectDrawVideoPort_GetColorControls, + Main_DirectDrawVideoPort_GetInputFormats, + Main_DirectDrawVideoPort_GetOutputFormats, + Main_DirectDrawVideoPort_GetFieldPolarity, + Main_DirectDrawVideoPort_GetVideoLine, + Main_DirectDrawVideoPort_GetVideoSignalStatus, + Main_DirectDrawVideoPort_SetColorControls, + Main_DirectDrawVideoPort_SetTargetSurface, + Main_DirectDrawVideoPort_StartVideo, + Main_DirectDrawVideoPort_StopVideo, + Main_DirectDrawVideoPort_UpdateVideo, + Main_DirectDrawVideoPort_WaitForSync +}; + +IDDVideoPortContainerVtbl DDVideoPortContainer_Vtable = +{ + Main_DDVideoPortContainer_QueryInterface, + Main_DDVideoPortContainer_AddRef, + Main_DDVideoPortContainer_Release, + Main_DDVideoPortContainer_CreateVideoPort, + Main_DDVideoPortContainer_EnumVideoPorts, + Main_DDVideoPortContainer_GetVideoPortConnectInfo, + Main_DDVideoPortContainer_QueryVideoPortStatus +}; + +IDirectDrawVideoPortNotifyVtbl DDVideoPortNotify_Vtable = +{ + Main_DDVideoPortNotify_QueryInterface, + Main_DDVideoPortNotify_AddRef, + Main_DDVideoPortNotify_Release, + Main_DDVideoPortNotify_AcquireNotification, + Main_DDVideoPortNotify_ReleaseNotification +}; diff --git a/reactos/dll/directx/ddraw/main.c b/reactos/dll/directx/ddraw/main.c index 7d49c8d293a..62f80ead22e 100644 --- a/reactos/dll/directx/ddraw/main.c +++ b/reactos/dll/directx/ddraw/main.c @@ -9,9 +9,10 @@ * */ -#include + #include "rosdraw.h" -#include "d3dhal.h" + +#undef DirectDrawCreate CRITICAL_SECTION ddcs; @@ -165,8 +166,7 @@ DirectDrawEnumerateExW(LPDDENUMCALLBACKEXW lpCallback, to get the xxxx end positions. */ -HRESULT -WINAPI +HRESULT WINAPI D3DParseUnknownCommand( LPVOID lpCmd, LPVOID *lpRetCmd) { diff --git a/reactos/dll/directx/ddraw/main/ddraw_main.c b/reactos/dll/directx/ddraw/main/ddraw_main.c index daf04379bc6..1c31babf81b 100644 --- a/reactos/dll/directx/ddraw/main/ddraw_main.c +++ b/reactos/dll/directx/ddraw/main/ddraw_main.c @@ -15,38 +15,49 @@ #include "../rosdraw.h" + + + HRESULT WINAPI Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface, REFIID id, LPVOID *obj) { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; DX_WINDBG_trace(); if (IsEqualGUID(&IID_IDirectDraw7, id)) { + /* DirectDraw7 Vtable */ + This->lpVtbl = &DirectDraw7_Vtable; *obj = &This->lpVtbl; } else if (IsEqualGUID(&IID_IDirectDraw, id)) { - *obj = &This->lpVtbl_v1; + /* DirectDraw1 Vtable */ + This->lpVtbl = &DirectDraw_Vtable; + *obj = &This->lpVtbl; } else if (IsEqualGUID(&IID_IDirectDraw2, id)) - { - *obj = &This->lpVtbl_v2; + { + /* DirectDraw2 Vtable */ + This->lpVtbl = &DirectDraw2_Vtable; + *obj = &This->lpVtbl; } else if (IsEqualGUID(&IID_IDirectDraw4, id)) { - *obj = &This->lpVtbl_v4; + /* DirectDraw4 Vtable */ + This->lpVtbl = &DirectDraw4_Vtable; + *obj = &This->lpVtbl; } else { *obj = NULL; return E_NOINTERFACE; } - + Main_DirectDraw_AddRef(iface); return S_OK; } @@ -58,21 +69,21 @@ ULONG WINAPI Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface) { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; DX_WINDBG_trace(); if (iface!=NULL) { - This->mDDrawLocal.dwLocalRefCnt++; - This->Ref++; - - if (This->mDDrawLocal.lpGbl != NULL) + This->dwIntRefCnt++; + This->lpLcl->dwLocalRefCnt++; + + if (This->lpLcl->lpGbl != NULL) { - This->mDDrawLocal.lpGbl->dwRefCnt++; + This->lpLcl->lpGbl->dwRefCnt++; } } - return This->Ref; + return This->dwIntRefCnt; } /* @@ -83,27 +94,27 @@ ULONG WINAPI Main_DirectDraw_Release (LPDIRECTDRAW7 iface) { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; DX_WINDBG_trace(); if (iface!=NULL) { - This->mDDrawLocal.dwLocalRefCnt--; - This->Ref--; + This->lpLcl->dwLocalRefCnt--; + This->dwIntRefCnt--; - if (This->mDDrawLocal.lpGbl != NULL) + if (This->lpLcl->lpGbl != NULL) { - This->mDDrawLocal.lpGbl->dwRefCnt--; + This->lpLcl->lpGbl->dwRefCnt--; } - if ( This->Ref == 0) + if ( This->dwIntRefCnt == 0) { // set resoltion back to the one in registry - if(This->cooperative_level & DDSCL_EXCLUSIVE) + /*if(This->cooperative_level & DDSCL_EXCLUSIVE) { ChangeDisplaySettings(NULL, 0); - } + }*/ Cleanup(iface); if (This!=NULL) @@ -112,7 +123,7 @@ Main_DirectDraw_Release (LPDIRECTDRAW7 iface) } } } - return This->Ref; + return This->dwIntRefCnt; } /* @@ -139,140 +150,43 @@ Main_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface, LPDIRECTDRAWCLIPPER *ppClipper, IUnknown *pUnkOuter) { - IDirectDrawClipperImpl* That; + //LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; + LPDDRAWI_DDRAWCLIPPER_INT That; DX_WINDBG_trace(); if (pUnkOuter!=NULL) + { return CLASS_E_NOAGGREGATION; + } - - That = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawClipperImpl)); + + That = (LPDDRAWI_DDRAWCLIPPER_INT) DxHeapMemAlloc(sizeof(DDRAWI_DDRAWCLIPPER_INT)); if (That == NULL) - return E_OUTOFMEMORY; + { + return DDERR_OUTOFMEMORY; //E_OUTOFMEMORY; + } That->lpVtbl = &DirectDrawClipper_Vtable; - That->ref = 1; + *ppClipper = (LPDIRECTDRAWCLIPPER)That; - return That->lpVtbl->Initialize (*ppClipper, (LPDIRECTDRAW)iface, dwFlags); + DirectDrawClipper_AddRef((LPDIRECTDRAWCLIPPER)That); + + return DirectDrawClipper_Initialize((LPDIRECTDRAWCLIPPER)That, (LPDIRECTDRAW)iface, dwFlags); } -/* - * IMPLEMENT - * Status ok - */ + HRESULT WINAPI Main_DirectDraw_CreatePalette(LPDIRECTDRAW7 iface, DWORD dwFlags, LPPALETTEENTRY palent, LPDIRECTDRAWPALETTE* ppPalette, LPUNKNOWN pUnkOuter) { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; - IDirectDrawPaletteImpl* That; DX_WINDBG_trace(); - if (pUnkOuter!=NULL) - { - return CLASS_E_NOAGGREGATION; - } - - if(!This->cooperative_level) - { - return DDERR_NOCOOPERATIVELEVELSET; - } - - if (This->mDdCreatePalette.CreatePalette == NULL) - { - return DDERR_NODRIVERSUPPORT; - } - - That = (IDirectDrawPaletteImpl*)DxHeapMemAlloc(sizeof(IDirectDrawPaletteImpl)); - if (That == NULL) - { - return E_OUTOFMEMORY; - } - - That->lpVtbl = &DirectDrawPalette_Vtable; - *ppPalette = (LPDIRECTDRAWPALETTE)That; - - That->DDPalette.dwRefCnt = 1; - That->DDPalette.lpDD_lcl = &This->mDDrawLocal; - That->DDPalette.dwProcessId = GetCurrentProcessId(); - That->DDPalette.lpColorTable = palent; - - if (dwFlags & DDPCAPS_1BIT) - { - That->DDPalette.dwFlags |= DDRAWIPAL_2 ; - } - if (dwFlags & DDPCAPS_2BIT) - { - That->DDPalette.dwFlags |= DDRAWIPAL_4 ; - } - if (dwFlags & DDPCAPS_4BIT) - { - That->DDPalette.dwFlags |= DDRAWIPAL_16 ; - } - if (dwFlags & DDPCAPS_8BIT) - { - That->DDPalette.dwFlags |= DDRAWIPAL_256 ; - } - - if (dwFlags & DDPCAPS_ALPHA) - { - That->DDPalette.dwFlags |= DDRAWIPAL_ALPHA; - } - if (dwFlags & DDPCAPS_ALLOW256) - { - That->DDPalette.dwFlags |= DDRAWIPAL_ALLOW256 ; - } - /* FIXME see - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceddk5/html/wce50lrfddrawiddrawpalettegbl.asp - - if (dwFlags & DDPCAPS_8BITENTRIES) - { - That->DDPalette.dwFlags |= 0; - } - - if (dwFlags & DDPCAPS_INITIALIZE) - { - That->DDPalette.dwFlags |= 0; - } - if (dwFlags & DDPCAPS_PRIMARYSURFACE) - { - That->DDPalette.dwFlags |= 0; - } - if (dwFlags & DDPCAPS_PRIMARYSURFACELEFT) - { - That->DDPalette.dwFlags |= 0; - } - if (dwFlags & DDPCAPS_VSYNC) - { - That->DDPalette.dwFlags |= 0; - } - */ - - - /* We need fill in this right - That->DDPalette.hHELGDIPalette/dwReserved1 - That->DDPalette.dwContentsStamp - That->DDPalette.dwSaveStamp - */ - - This->mDdCreatePalette.lpDDPalette = &That->DDPalette; - This->mDdCreatePalette.lpColorTable = palent; - - if (This->mDdCreatePalette.CreatePalette(&This->mDdCreatePalette) == DDHAL_DRIVER_HANDLED); - { - if (This->mDdSetMode.ddRVal == DD_OK) - { - Main_DirectDraw_AddRef(iface); - return That->lpVtbl->Initialize (*ppPalette, (LPDIRECTDRAW)iface, dwFlags, palent); - } - } - - return DDERR_NODRIVERSUPPORT; + DX_STUB; } -HRESULT internal_CreateNewSurface(IDirectDrawImpl* This, IDirectDrawSurfaceImpl* That); + /* * stub * Status not done @@ -281,12 +195,10 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter) { - - DxSurf *surf; - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; - IDirectDrawSurfaceImpl* That; - DEVMODE DevMode; - LONG extra_surfaces = 0; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; + LPDDRAWI_DDRAWSURFACE_INT That; + + DX_WINDBG_trace(); @@ -295,50 +207,34 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE return CLASS_E_NOAGGREGATION; } - if(sizeof(DDSURFACEDESC2)!=pDDSD->dwSize && sizeof(DDSURFACEDESC)!=pDDSD->dwSize) + if (sizeof(DDSURFACEDESC2)!=pDDSD->dwSize && sizeof(DDSURFACEDESC)!=pDDSD->dwSize) { return DDERR_UNSUPPORTED; } - That = (IDirectDrawSurfaceImpl*)DxHeapMemAlloc(sizeof(IDirectDrawSurfaceImpl)); + That = (LPDDRAWI_DDRAWSURFACE_INT)DxHeapMemAlloc(sizeof(DDRAWI_DDRAWSURFACE_INT)); if (That == NULL) { return E_OUTOFMEMORY; } - surf = (DxSurf*)DxHeapMemAlloc(sizeof(DxSurf)); - - if (surf == NULL) - { - DxHeapMemFree(That); - return E_OUTOFMEMORY; - } - + That->lpVtbl = &DirectDrawSurface7_Vtable; - That->lpVtbl_v3 = &DDRAW_IDDS3_Thunk_VTable; *ppSurf = (LPDIRECTDRAWSURFACE7)That; + + That->lpLcl->lpGbl = &ddSurfGbl; + That->lpLcl->lpGbl->lpDD = &ddgbl; - // FIXME free This->mDDrawGlobal.dsList on release - if (This->mDDrawGlobal.dsList == NULL) - { - This->mDDrawGlobal.dsList = (LPDDRAWI_DDRAWSURFACE_INT)DxHeapMemAlloc(sizeof(DDRAWI_DDRAWSURFACE_INT)); - if (This->mDDrawGlobal.dsList == NULL) - { - DxHeapMemFree(surf); - DxHeapMemFree(That); - return E_OUTOFMEMORY; - } - - That->Owner = (IDirectDrawImpl *)This; - That->Owner->mDDrawGlobal.dsList->dwIntRefCnt =1; - - /* we alwasy set to use the DirectDrawSurface7_Vtable as internel */ - That->Owner->mDDrawGlobal.dsList->lpVtbl = (PVOID) &DirectDrawSurface7_Vtable; + Main_DDrawSurface_AddRef((LPDIRECTDRAWSURFACE7)That); + + if (This->lpLcl->lpGbl->dsList == NULL) + { + This->lpLcl->lpGbl->dsList = That; + } - That->Surf = surf; - + /* Code from wine cvs 24/7-2006 */ if (!(pDDSD->dwFlags & DDSD_CAPS)) @@ -364,382 +260,42 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE pDDSD->dwFlags &= ~DDSD_LPSURFACE; } - - /* continue with my own code */ - memcpy(&That->Surf->mddsdPrimary,pDDSD,pDDSD->dwSize); - That->Surf->mddsdPrimary.dwSize = sizeof(DDSURFACEDESC2); + /* own code now */ - memset(&DevMode,0,sizeof(DEVMODE)); - DevMode.dmSize = (WORD)sizeof(DEVMODE); - DevMode.dmDriverExtra = 0; - - EnumDisplaySettingsEx(NULL, ENUM_CURRENT_SETTINGS, &DevMode, 0); - if(!(pDDSD->dwFlags & DDSD_PIXELFORMAT)) - { - That->Surf->mddsdPrimary.dwFlags |= DDSD_PIXELFORMAT; - That->Surf->mddsdPrimary.ddpfPixelFormat.dwSize=sizeof(DDPIXELFORMAT); - - if(pDDSD->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) - { - /* FIXME */ - DX_STUB_str("DDSCAPS_ZBUFFER not implement"); - switch(pDDSD->dwMipMapCount) - { - case 15: - break; - case 16: - break; - case 24: - break; - case 32: - break; - default: - DX_STUB_str("nknown Z buffer bit depth"); - } - } - else - { - switch(DevMode.dmBitsPerPel) - { - case 8: - That->Surf->mddsdPrimary.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); - That->Surf->mddsdPrimary.ddpfPixelFormat.dwFlags = DDPF_RGB; - That->Surf->mddsdPrimary.ddpfPixelFormat.dwFourCC = 0; - That->Surf->mddsdPrimary.ddpfPixelFormat.dwRGBBitCount=8; - /* FIXME right value */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwGBitMask = 0; /* Green bitmask */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwBBitMask = 0; /* Blue bitmask */ - break; - - case 15: - That->Surf->mddsdPrimary.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); - That->Surf->mddsdPrimary.ddpfPixelFormat.dwFlags = DDPF_RGB; - That->Surf->mddsdPrimary.ddpfPixelFormat.dwFourCC = 0; - That->Surf->mddsdPrimary.ddpfPixelFormat.dwRGBBitCount=15; - /* FIXME right value */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwRBitMask = 0x7C00; /* red bitmask */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwGBitMask = 0x3E0; /* Green bitmask */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */ - break; - - case 16: - That->Surf->mddsdPrimary.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); - That->Surf->mddsdPrimary.ddpfPixelFormat.dwFlags = DDPF_RGB; - That->Surf->mddsdPrimary.ddpfPixelFormat.dwFourCC = 0; - That->Surf->mddsdPrimary.ddpfPixelFormat.dwRGBBitCount=16; - /* FIXME right value */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwRBitMask = 0xF800; /* red bitmask */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwGBitMask = 0x7E0; /* Green bitmask */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */ - break; - - case 24: - That->Surf->mddsdPrimary.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); - That->Surf->mddsdPrimary.ddpfPixelFormat.dwFlags = DDPF_RGB; - That->Surf->mddsdPrimary.ddpfPixelFormat.dwFourCC = 0; - That->Surf->mddsdPrimary.ddpfPixelFormat.dwRGBBitCount=24; - /* FIXME right value */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */ - break; - - case 32: - That->Surf->mddsdPrimary.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); - That->Surf->mddsdPrimary.ddpfPixelFormat.dwFlags = DDPF_RGB; - That->Surf->mddsdPrimary.ddpfPixelFormat.dwFourCC = 0; - That->Surf->mddsdPrimary.ddpfPixelFormat.dwRGBBitCount=8; - /* FIXME right value */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */ - That->Surf->mddsdPrimary.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */ - break; - - default: - break; - } - } /* end else */ - } /* end if(!(pDDSD->dwFlags & DDSD_PIXELFORMAT)) */ - - /* Code from wine cvs 24/7-2006 */ - if(!(pDDSD->dwFlags & DDSD_WIDTH) || !(pDDSD->dwFlags & DDSD_HEIGHT) ) - { - HWND window = (HWND) This->mDDrawGlobal.lpExclusiveOwner->hWnd; - - /* Fallback: From WineD3D / original mode */ - That->Surf->mddsdPrimary.dwFlags |= DDSD_WIDTH | DDSD_HEIGHT; - - That->Surf->mddsdPrimary.dwWidth =DevMode.dmPelsWidth; - That->Surf->mddsdPrimary.dwHeight = DevMode.dmPelsHeight; - - if( (window != 0) ) - { - RECT rect; - if(GetWindowRect(window, &rect) ) - { - /* This is a hack until I find a better solution */ - if( (rect.right - rect.left) <= 1 || - (rect.bottom - rect.top) <= 1 ) - { - /* - FIXME("Wanted to get surface dimensions from window %p, but it has only \ - a size of %ldx%ld. Using full screen dimensions\n", - window, rect.right - rect.left, rect.bottom - rect.top); - */ - } - else - { - /* Not sure if this is correct */ - That->Surf->mddsdPrimary.dwWidth = rect.right - rect.left; - That->Surf->mddsdPrimary.dwHeight = rect.bottom - rect.top; - /* TRACE("Using window %p's dimensions: %ldx%ld\n", window, desc2.dwWidth, desc2.dwHeight); */ - } - } - } - } - - /* Mipmap count fixes */ - if(That->Surf->mddsdPrimary.ddsCaps.dwCaps & DDSCAPS_MIPMAP) - { - if(That->Surf->mddsdPrimary.ddsCaps.dwCaps & DDSCAPS_COMPLEX) - { - if(!That->Surf->mddsdPrimary.dwFlags & DDSD_MIPMAPCOUNT) - { - /* Undocumented feature: Create sublevels until - * either the width or the height is 1 - */ - DWORD min = That->Surf->mddsdPrimary.dwWidth < That->Surf->mddsdPrimary.dwHeight ? - That->Surf->mddsdPrimary.dwWidth : That->Surf->mddsdPrimary.dwHeight; - - That->Surf->mddsdPrimary.dwMipMapCount = 0; - while( min ) - { - That->Surf->mddsdPrimary.dwMipMapCount += 1; - min >>= 1; - } - } - } - else - { - That->Surf->mddsdPrimary.dwMipMapCount = 1; - } - extra_surfaces = That->Surf->mddsdPrimary.dwMipMapCount - 1; - That->Surf->mddsdPrimary.dwFlags |= DDSD_MIPMAPCOUNT; - } - - if( (That->Surf->mddsdPrimary.dwFlags & DDSD_CAPS) && - (That->Surf->mddsdPrimary.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) ) - { - That->Surf->mddsdPrimary.ddsCaps.dwCaps |= DDSCAPS_FRONTBUFFER; - } - - - - - - - - - - + /* FIXME + remove all old code for create a surface + for we need rewrite it + */ if (pDDSD->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) - { - - return internal_CreateNewSurface( This, That); - + { + DX_STUB_str( "Can not create primary surface"); + } + else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY) + { + DX_STUB_str( "Can not create overlay surface"); + } + else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_BACKBUFFER) + { + DX_STUB_str( "Can not create backbuffer surface"); + } + else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_TEXTURE) + { + DX_STUB_str( "Can not create texture surface"); + } + else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) + { + DX_STUB_str( "Can not create zbuffer surface"); + } + else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN) + { + DX_STUB_str( "Can not create offscreenplain surface"); } - else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY) - { - DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface; - DDHAL_CREATESURFACEDATA mDdCreateSurface; - - return internal_CreateNewSurface( This, That); - - memset(&That->Surf->mddsdOverlay, 0, sizeof(DDSURFACEDESC)); - memcpy(&That->Surf->mddsdOverlay, pDDSD, sizeof(DDSURFACEDESC)); - That->Surf->mddsdOverlay.dwSize = sizeof(DDSURFACEDESC); - That->Surf->mddsdOverlay.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_BACKBUFFERCOUNT | DDSD_WIDTH | DDSD_HEIGHT; - That->Surf->mddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX | DDSCAPS_FLIP; - - That->Surf->mddsdOverlay.dwWidth = pDDSD->dwWidth; //pels; - That->Surf->mddsdOverlay.dwHeight = pDDSD->dwHeight; // lines; - That->Surf->mddsdOverlay.dwBackBufferCount = 1; //cBuffers; - - That->Surf->mddsdOverlay.ddpfPixelFormat.dwSize = pDDSD->ddpfPixelFormat.dwSize; - That->Surf->mddsdOverlay.ddpfPixelFormat.dwFlags = pDDSD->ddpfPixelFormat.dwFlags; - That->Surf->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = pDDSD->ddpfPixelFormat.dwRGBBitCount; - - - mDdCanCreateSurface.lpDD = &This->mDDrawGlobal; - mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface; - mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat; - mDdCanCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay; // pDDSD; - - if (This->mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED) - { - return DDERR_NOTINITIALIZED; - } - - if (mDdCanCreateSurface.ddRVal != DD_OK) - { - return DDERR_NOTINITIALIZED; - } - - - memset(&That->Surf->mOverlayGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL)); - That->Surf->mOverlayGlobal.dwGlobalFlags = 0; - That->Surf->mOverlayGlobal.lpDD = &This->mDDrawGlobal; - That->Surf->mOverlayGlobal.lpDDHandle = &This->mDDrawGlobal; - That->Surf->mOverlayGlobal.wWidth = (WORD)That->Surf->mddsdOverlay.dwWidth; - That->Surf->mOverlayGlobal.wHeight = (WORD)That->Surf->mddsdOverlay.dwHeight; - That->Surf->mOverlayGlobal.lPitch = -1; - That->Surf->mOverlayGlobal.ddpfSurface = That->Surf->mddsdOverlay.ddpfPixelFormat; - - memset(&That->Surf->mOverlayMore[0], 0, sizeof(DDRAWI_DDRAWSURFACE_MORE)); - That->Surf->mOverlayMore[0].dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE); - - memset(&That->Surf->mOverlayLocal[0], 0, sizeof(DDRAWI_DDRAWSURFACE_LCL)); - That->Surf->mOverlayLocal[0].lpGbl = &That->Surf->mOverlayGlobal; - That->Surf->mOverlayLocal[0].lpSurfMore = &That->Surf->mOverlayMore[0]; - That->Surf-> mOverlayLocal[0].dwProcessId = GetCurrentProcessId(); - That->Surf->mOverlayLocal[0].dwFlags = DDRAWISURF_IMPLICITROOT|DDRAWISURF_FRONTBUFFER; - - That->Surf->mOverlayLocal[0].dwFlags |= - DDRAWISURF_ATTACHED|DDRAWISURF_ATTACHED_FROM| - DDRAWISURF_HASPIXELFORMAT| - DDRAWISURF_HASOVERLAYDATA; - - That->Surf->mOverlayLocal[0].ddsCaps.dwCaps = That->Surf->mddsdOverlay.ddsCaps.dwCaps; - That->Surf->mpOverlayLocals[0] = &That->Surf->mOverlayLocal[0]; - - - - mDdCreateSurface.lpDD = &This->mDDrawGlobal; - mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface; - mDdCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay;//pDDSD; - mDdCreateSurface.lplpSList = That->Surf->mpOverlayLocals; //cSurfaces; - mDdCreateSurface.dwSCnt = 1 ; //ppSurfaces; - - if (This->mHALInfo.lpDDCallbacks->CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED) - { - return DDERR_NOTINITIALIZED; - } - - - if (mDdCreateSurface.ddRVal != DD_OK) - { - return mDdCreateSurface.ddRVal; - } - -/* - DDHAL_UPDATEOVERLAYDATA mDdUpdateOverlay; - mDdUpdateOverlay.lpDD = &This->mDDrawGlobal; - mDdUpdateOverlay.UpdateOverlay = This->mCallbacks.HALDDSurface.UpdateOverlay; - mDdUpdateOverlay.lpDDDestSurface = This->mpPrimaryLocals[0]; - mDdUpdateOverlay.lpDDSrcSurface = That->Surf->mpOverlayLocals[0];//pDDSurface; - mDdUpdateOverlay.dwFlags = DDOVER_SHOW; - - - mDdUpdateOverlay.rDest.top = 0; - mDdUpdateOverlay.rDest.left = 0; - mDdUpdateOverlay.rDest.right = 50; - mDdUpdateOverlay.rDest.bottom = 50; - - mDdUpdateOverlay.rSrc.top = 0; - mDdUpdateOverlay.rSrc.left = 0; - mDdUpdateOverlay.rSrc.right = 50; - mDdUpdateOverlay.rSrc.bottom = 50; - - if ( mDdUpdateOverlay.UpdateOverlay(&mDdUpdateOverlay) == DDHAL_DRIVER_NOTHANDLED) - { - return DDERR_NOTINITIALIZED; - } - - if (mDdUpdateOverlay.ddRVal != DD_OK) - { - return mDdUpdateOverlay.ddRVal; - } -*/ - - That->Surf->mpInUseSurfaceLocals[0] = That->Surf->mpOverlayLocals[0]; - return DD_OK; - } - else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_BACKBUFFER) - { - DX_STUB_str( "Can not create backbuffer surface"); - } - else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_TEXTURE) - { - DX_STUB_str( "Can not create texture surface"); - } - else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_ZBUFFER) - { - DX_STUB_str( "Can not create zbuffer surface"); - } - else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN) - { - DX_STUB_str( "Can not create offscreenplain surface"); - } return DDERR_INVALIDSURFACETYPE; } -HRESULT -internal_CreateNewSurface(IDirectDrawImpl* This, IDirectDrawSurfaceImpl* That) -{ - This->mDdCanCreateSurface.bIsDifferentPixelFormat = FALSE; - This->mDdCanCreateSurface.lpDDSurfaceDesc = (DDSURFACEDESC*)&That->Surf->mddsdPrimary; - - if (This->mDdCanCreateSurface.CanCreateSurface(&This->mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED) - { - return DDERR_NOTINITIALIZED; - } - - if (This->mDdCanCreateSurface.ddRVal != DD_OK) - { - return DDERR_NOTINITIALIZED; - } - - memset(&That->Owner->mPrimaryGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL)); - That->Owner->mPrimaryGlobal.dwGlobalFlags = DDRAWISURFGBL_ISGDISURFACE; - That->Owner->mPrimaryGlobal.lpDD = &This->mDDrawGlobal; - That->Owner->mPrimaryGlobal.lpDDHandle = &This->mDDrawGlobal; - That->Owner->mPrimaryGlobal.wWidth = (WORD)This->mpModeInfos[0].dwWidth; - That->Owner->mPrimaryGlobal.wHeight = (WORD)This->mpModeInfos[0].dwHeight; - That->Owner->mPrimaryGlobal.lPitch = This->mpModeInfos[0].lPitch; - - memset(&That->Surf->mPrimaryMore, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE)); - That->Surf->mPrimaryMore.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE); - - memset(&That->Surf->mPrimaryLocal, 0, sizeof(DDRAWI_DDRAWSURFACE_LCL)); - That->Surf->mPrimaryLocal.lpGbl = &That->Owner->mPrimaryGlobal; - That->Surf->mPrimaryLocal.lpSurfMore = &That->Surf->mPrimaryMore; - That->Surf->mPrimaryLocal.dwProcessId = GetCurrentProcessId(); - - That->Surf->mPrimaryLocal.ddsCaps.dwCaps = That->Surf->mddsdPrimary.ddsCaps.dwCaps; - That->Surf->mpPrimaryLocals[0] = &That->Surf->mPrimaryLocal; - - This->mDdCreateSurface.lpDDSurfaceDesc = (DDSURFACEDESC*)&That->Surf->mddsdPrimary; - This->mDdCreateSurface.lplpSList = That->Surf->mpPrimaryLocals; - This->mDdCreateSurface.dwSCnt = This->mDDrawGlobal.dsList->dwIntRefCnt ; - - - if (This->mDdCreateSurface.CreateSurface(&This->mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED) - { - return DDERR_NOTINITIALIZED; - } - - if (This->mDdCreateSurface.ddRVal != DD_OK) - { - return This->mDdCreateSurface.ddRVal; - } - - That->Surf->mpInUseSurfaceLocals[0] = &That->Surf->mPrimaryLocal; - return DD_OK; -} /* * stub @@ -776,7 +332,7 @@ HRESULT WINAPI Main_DirectDraw_EnumDisplayModes(LPDIRECTDRAW7 iface, DWORD dwFla // if (dwFlags & DDEDM_REFRESHRATES) // { // desc_callback.dwFlags |= DDSD_REFRESHRATE; - // desc_callback.dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency; + // desc_callback.dwRefreshRate = This->lpLcl->lpGbl->dwMonitorFrequency; // } // @@ -926,19 +482,24 @@ Main_DirectDraw_EnumSurfaces(LPDIRECTDRAW7 iface, DWORD dwFlags, HRESULT WINAPI Main_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface) { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; + DDHAL_FLIPTOGDISURFACEDATA mDdFlipToGDISurface; - if (This->mDdFlipToGDISurface.FlipToGDISurface == NULL) + DX_WINDBG_trace(); + + mDdFlipToGDISurface.ddRVal = DDERR_NOTINITIALIZED; + mDdFlipToGDISurface.dwReserved = 0; + mDdFlipToGDISurface.dwToGDI = TRUE; + mDdFlipToGDISurface.FlipToGDISurface = This->lpLcl->lpDDCB->cbDDCallbacks.FlipToGDISurface; + + if (mDdFlipToGDISurface.FlipToGDISurface == NULL) { return DDERR_NODRIVERSUPPORT; } - This->mDdFlipToGDISurface.ddRVal = DDERR_NOTPALETTIZED; - This->mDdFlipToGDISurface.dwToGDI = TRUE; - - if (This->mDdFlipToGDISurface.FlipToGDISurface(&This->mDdFlipToGDISurface)==DDHAL_DRIVER_HANDLED); + if (mDdFlipToGDISurface.FlipToGDISurface(&mDdFlipToGDISurface)==DDHAL_DRIVER_HANDLED); { - return This->mDdFlipToGDISurface.ddRVal; + return mDdFlipToGDISurface.ddRVal; } return DDERR_NODRIVERSUPPORT; @@ -956,7 +517,7 @@ Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps, DDSCAPS2 ddscaps = {0}; DWORD status = DD_FALSE; - IDirectDrawImpl *This = (IDirectDrawImpl *)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; DX_WINDBG_trace(); @@ -964,10 +525,10 @@ Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps, { Main_DirectDraw_GetAvailableVidMem(iface, &ddscaps, - &This->mDDrawGlobal.ddCaps.dwVidMemTotal, - &This->mDDrawGlobal.ddCaps.dwVidMemFree); + &This->lpLcl->lpGbl->ddCaps.dwVidMemTotal, + &This->lpLcl->lpGbl->ddCaps.dwVidMemFree); - RtlCopyMemory(pDriverCaps,&This->mDDrawGlobal.ddCaps,sizeof(DDCORECAPS)); + RtlCopyMemory(pDriverCaps,&This->lpLcl->lpGbl->ddCaps,sizeof(DDCORECAPS)); pDriverCaps->dwSize=sizeof(DDCAPS); status = DD_OK; @@ -977,10 +538,10 @@ Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps, { Main_DirectDraw_GetAvailableVidMem(iface, &ddscaps, - &This->mDDrawGlobal.ddHELCaps.dwVidMemTotal, - &This->mDDrawGlobal.ddHELCaps.dwVidMemFree); + &This->lpLcl->lpGbl->ddHELCaps.dwVidMemTotal, + &This->lpLcl->lpGbl->ddHELCaps.dwVidMemFree); - RtlCopyMemory(pDriverCaps,&This->mDDrawGlobal.ddHELCaps,sizeof(DDCORECAPS)); + RtlCopyMemory(pDriverCaps,&This->lpLcl->lpGbl->ddHELCaps,sizeof(DDCORECAPS)); status = DD_OK; } @@ -994,7 +555,7 @@ Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps, */ HRESULT WINAPI Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD) { - IDirectDrawImpl *This = (IDirectDrawImpl *)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; DX_WINDBG_trace(); @@ -1004,17 +565,17 @@ HRESULT WINAPI Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDE } pDDSD->dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_PITCH | DDSD_PIXELFORMAT | DDSD_REFRESHRATE | DDSD_WIDTH; - pDDSD->dwHeight = This->mDDrawGlobal.vmiData.dwDisplayHeight; - pDDSD->dwWidth = This->mDDrawGlobal.vmiData.dwDisplayWidth; - pDDSD->lPitch = This->mDDrawGlobal.vmiData.lDisplayPitch; - pDDSD->dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency; - pDDSD->dwAlphaBitDepth = This->mDDrawGlobal.vmiData.ddpfDisplay.dwAlphaBitDepth; + pDDSD->dwHeight = This->lpLcl->lpGbl->vmiData.dwDisplayHeight; + pDDSD->dwWidth = This->lpLcl->lpGbl->vmiData.dwDisplayWidth; + pDDSD->lPitch = This->lpLcl->lpGbl->vmiData.lDisplayPitch; + pDDSD->dwRefreshRate = This->lpLcl->lpGbl->dwMonitorFrequency; + pDDSD->dwAlphaBitDepth = This->lpLcl->lpGbl->vmiData.ddpfDisplay.dwAlphaBitDepth; - RtlCopyMemory(&pDDSD->ddpfPixelFormat,&This->mDDrawGlobal.vmiData.ddpfDisplay,sizeof(DDPIXELFORMAT)); - RtlCopyMemory(&pDDSD->ddsCaps,&This->mDDrawGlobal.ddCaps,sizeof(DDCORECAPS)); + RtlCopyMemory(&pDDSD->ddpfPixelFormat,&This->lpLcl->lpGbl->vmiData.ddpfDisplay,sizeof(DDPIXELFORMAT)); + RtlCopyMemory(&pDDSD->ddsCaps,&This->lpLcl->lpGbl->ddCaps,sizeof(DDCORECAPS)); - RtlCopyMemory(&pDDSD->ddckCKDestOverlay,&This->mDDrawGlobal.ddckCKDestOverlay,sizeof(DDCOLORKEY)); - RtlCopyMemory(&pDDSD->ddckCKSrcOverlay,&This->mDDrawGlobal.ddckCKSrcOverlay,sizeof(DDCOLORKEY)); + RtlCopyMemory(&pDDSD->ddckCKDestOverlay,&This->lpLcl->lpGbl->ddckCKDestOverlay,sizeof(DDCOLORKEY)); + RtlCopyMemory(&pDDSD->ddckCKSrcOverlay,&This->lpLcl->lpGbl->ddckCKSrcOverlay,sizeof(DDCOLORKEY)); /* have not check where I should get hold of this info yet DWORD dwBackBufferCount; @@ -1058,7 +619,7 @@ Main_DirectDraw_GetGDISurface(LPDIRECTDRAW7 iface, HRESULT WINAPI Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq) { - IDirectDrawImpl *This = (IDirectDrawImpl *)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; DX_WINDBG_trace(); @@ -1067,7 +628,7 @@ Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq) return DD_FALSE; } - *freq = This->mDDrawGlobal.dwMonitorFrequency; + *freq = This->lpLcl->lpGbl->dwMonitorFrequency; return DD_OK; } @@ -1078,24 +639,30 @@ Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq) HRESULT WINAPI Main_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine) { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; + DDHAL_GETSCANLINEDATA mDdGetScanLine; DX_WINDBG_trace(); *lpdwScanLine = 0; - if (This->mDdGetScanLine.GetScanLine == NULL) + mDdGetScanLine.ddRVal = DDERR_NOTINITIALIZED; + mDdGetScanLine.dwScanLine = 0; + mDdGetScanLine.GetScanLine = This->lpLcl->lpDDCB->cbDDCallbacks.GetScanLine; + mDdGetScanLine.lpDD = This->lpLcl->lpGbl; + + if (mDdGetScanLine.GetScanLine == NULL) { return DDERR_NODRIVERSUPPORT; } - This->mDdGetScanLine.ddRVal = DDERR_NOTPALETTIZED; - This->mDdGetScanLine.dwScanLine = 0; + mDdGetScanLine.ddRVal = DDERR_NOTPALETTIZED; + mDdGetScanLine.dwScanLine = 0; - if (This->mDdGetScanLine.GetScanLine(&This->mDdGetScanLine)==DDHAL_DRIVER_HANDLED); + if (mDdGetScanLine.GetScanLine(&mDdGetScanLine)==DDHAL_DRIVER_HANDLED); { - *lpdwScanLine = This->mDdGetScanLine.dwScanLine; - return This->mDdGetScanLine.ddRVal; + *lpdwScanLine = mDdGetScanLine.dwScanLine; + return mDdGetScanLine.ddRVal; } return DDERR_NODRIVERSUPPORT; @@ -1106,7 +673,7 @@ Main_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine) * Status todo */ HRESULT WINAPI -Main_DirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW7 iface, LPBOOL status) +Main_DirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW7 iface, LPBOOL lpbIsInVB) { DX_WINDBG_trace(); DX_STUB; @@ -1120,7 +687,7 @@ HRESULT WINAPI Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID) { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + //LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; DX_WINDBG_trace(); @@ -1128,17 +695,8 @@ Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID) { return DDERR_NOTINITIALIZED; } - - if (This->InitializeDraw == TRUE) - { - return DDERR_ALREADYINITIALIZED; - } - else - { - This->InitializeDraw = TRUE; - } - - return DD_OK; + + return DDERR_ALREADYINITIALIZED; } /* @@ -1168,17 +726,17 @@ Main_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 iface, HWND hwnd, DWORD coopl - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; DDHAL_SETEXCLUSIVEMODEDATA SetExclusiveMode; DX_WINDBG_trace(); + // check the parameters - if ((This->cooperative_level == cooplevel) && ((HWND)This->mDDrawGlobal.lpExclusiveOwner->hWnd == hwnd)) + if ((HWND)This->lpLcl->lpGbl->lpExclusiveOwner->hWnd == hwnd) return DD_OK; - if (This->cooperative_level) - return DDERR_EXCLUSIVEMODEALREADYSET; + if ((cooplevel&DDSCL_EXCLUSIVE) && !(cooplevel&DDSCL_FULLSCREEN)) return DDERR_INVALIDPARAMS; @@ -1187,35 +745,28 @@ Main_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 iface, HWND hwnd, DWORD coopl return DDERR_INVALIDPARAMS; // set the data - This->mDDrawGlobal.lpExclusiveOwner->hWnd = (ULONG_PTR) hwnd; - This->mDDrawGlobal.lpExclusiveOwner->hDC = (ULONG_PTR)GetDC(hwnd); + This->lpLcl->lpGbl->lpExclusiveOwner->hWnd = (ULONG_PTR) hwnd; + This->lpLcl->lpGbl->lpExclusiveOwner->hDC = (ULONG_PTR)GetDC(hwnd); /* FIXME : fill the mDDrawGlobal.lpExclusiveOwner->dwLocalFlags right */ //mDDrawGlobal.lpExclusiveOwner->dwLocalFlags - This->cooperative_level = cooplevel; - if ((This->mDDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_SETEXCLUSIVEMODE)) - { - DX_STUB_str("HAL \n"); - SetExclusiveMode.SetExclusiveMode = This->mDDrawGlobal.lpDDCBtmp->HALDD.SetExclusiveMode; - } - else - { - DX_STUB_str("HEL \n"); - SetExclusiveMode.SetExclusiveMode = This->mDDrawGlobal.lpDDCBtmp->HELDD.SetExclusiveMode; - } - - SetExclusiveMode.lpDD = &This->mDDrawGlobal; SetExclusiveMode.ddRVal = DDERR_NOTPALETTIZED; - SetExclusiveMode.dwEnterExcl = This->cooperative_level; - - if (SetExclusiveMode.SetExclusiveMode(&SetExclusiveMode) != DDHAL_DRIVER_HANDLED) - { - return DDERR_NODRIVERSUPPORT; - } + if ((This->lpLcl->lpGbl->lpDDCBtmp->cbDDCallbacks.dwFlags & DDHAL_CB32_SETEXCLUSIVEMODE)) + { + + SetExclusiveMode.SetExclusiveMode = This->lpLcl->lpGbl->lpDDCBtmp->cbDDCallbacks.SetExclusiveMode; + SetExclusiveMode.lpDD = This->lpLcl->lpGbl; + SetExclusiveMode.dwEnterExcl = cooplevel; + if (SetExclusiveMode.SetExclusiveMode(&SetExclusiveMode) != DDHAL_DRIVER_HANDLED) + { + return DDERR_NODRIVERSUPPORT; + } + } + return SetExclusiveMode.ddRVal; } @@ -1229,36 +780,45 @@ Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeig { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; BOOL dummy = TRUE; DEVMODE DevMode; int iMode=0; int Width=0; int Height=0; int BPP=0; + DDHAL_SETMODEDATA mDdSetMode; DX_WINDBG_trace(); /* FIXME check the refresrate if it same if it not same do the mode switch */ - if ((This->mDDrawGlobal.vmiData.dwDisplayHeight == dwHeight) && - (This->mDDrawGlobal.vmiData.dwDisplayWidth == dwWidth) && - (This->mDDrawGlobal.vmiData.ddpfDisplay.dwRGBBitCount == dwBPP)) + + if ((This->lpLcl->lpGbl->vmiData.dwDisplayHeight == dwHeight) && + (This->lpLcl->lpGbl->vmiData.dwDisplayWidth == dwWidth) && + (This->lpLcl->lpGbl->vmiData.ddpfDisplay.dwRGBBitCount == dwBPP)) { return DD_OK; } - if (This->mDdSetMode.SetMode == NULL) + mDdSetMode.ddRVal = DDERR_NOTINITIALIZED; + mDdSetMode.dwModeIndex = 0; + mDdSetMode.inexcl = 0; + mDdSetMode.lpDD = This->lpLcl->lpGbl; + mDdSetMode.useRefreshRate = FALSE; + mDdSetMode.SetMode = This->lpLcl->lpDDCB->cbDDCallbacks.SetMode; + + if (mDdSetMode.SetMode == NULL) { return DDERR_NODRIVERSUPPORT; } /* Check use the Hal or Hel for SetMode */ // this only for exclusive mode - if(!(This->cooperative_level & DDSCL_EXCLUSIVE)) + /*if(!(This->cooperative_level & DDSCL_EXCLUSIVE)) { return DDERR_NOEXCLUSIVEMODE; - } + }*/ DevMode.dmSize = (WORD)sizeof(DEVMODE); DevMode.dmDriverExtra = 0; @@ -1281,16 +841,16 @@ Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeig return DDERR_UNSUPPORTEDMODE; } - This->mDdSetMode.ddRVal = DDERR_NOTPALETTIZED; - This->mDdSetMode.dwModeIndex = iMode; - This->mDdSetMode.SetMode(&This->mDdSetMode); - DdReenableDirectDrawObject(&This->mDDrawGlobal, &dummy); + mDdSetMode.dwModeIndex = iMode; + mDdSetMode.SetMode(&mDdSetMode); + + DdReenableDirectDrawObject(This->lpLcl->lpGbl, &dummy); /* FIXME fill the This->DirectDrawGlobal.vmiData right */ - //This->mDDrawGlobal.lpExclusiveOwner->hDC = (ULONG_PTR)GetDC( (HWND)This->mDDrawGlobal.lpExclusiveOwner->hWnd); - return This->mDdSetMode.ddRVal; + //This->lpLcl->lpGbl->lpExclusiveOwner->hDC = (ULONG_PTR)GetDC( (HWND)This->lpLcl->lpGbl->lpExclusiveOwner->hWnd); + return mDdSetMode.ddRVal; } /* @@ -1302,21 +862,31 @@ Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags, HANDLE h) { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; + DDHAL_WAITFORVERTICALBLANKDATA mDdWaitForVerticalBlank; + DX_WINDBG_trace(); - if (This->mDdWaitForVerticalBlank.WaitForVerticalBlank == NULL) + if (!(This->lpLcl->lpDDCB->cbDDCallbacks.dwFlags & DDHAL_CB32_WAITFORVERTICALBLANK)) { return DDERR_NODRIVERSUPPORT; } - This->mDdWaitForVerticalBlank.dwFlags = dwFlags; - This->mDdWaitForVerticalBlank.hEvent = (DWORD)h; - This->mDdWaitForVerticalBlank.ddRVal = DDERR_NOTPALETTIZED; + if (mDdWaitForVerticalBlank.WaitForVerticalBlank == NULL) + { + return DDERR_NODRIVERSUPPORT; + } - if (This->mDdWaitForVerticalBlank.WaitForVerticalBlank(&This->mDdWaitForVerticalBlank)==DDHAL_DRIVER_HANDLED); + mDdWaitForVerticalBlank.bIsInVB = DDWAITVB_BLOCKBEGIN ; /* return begin ? */ + mDdWaitForVerticalBlank.ddRVal = DDERR_NOTINITIALIZED; + mDdWaitForVerticalBlank.dwFlags = dwFlags; + mDdWaitForVerticalBlank.hEvent = (DWORD)h; + mDdWaitForVerticalBlank.lpDD = This->lpLcl->lpGbl; + mDdWaitForVerticalBlank.WaitForVerticalBlank = This->lpLcl->lpDDCB->cbDDCallbacks.WaitForVerticalBlank; + + if (mDdWaitForVerticalBlank.WaitForVerticalBlank(&mDdWaitForVerticalBlank)==DDHAL_DRIVER_HANDLED); { - return This->mDdWaitForVerticalBlank.ddRVal; + return mDdWaitForVerticalBlank.ddRVal; } return DDERR_NODRIVERSUPPORT; @@ -1332,24 +902,25 @@ Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps, { DDHAL_GETAVAILDRIVERMEMORYDATA mem; - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; DX_WINDBG_trace(); + /* Only Hal version exists acodring msdn */ - if (!(This->mDDrawGlobal.lpDDCBtmp->HALDDMiscellaneous.dwFlags & DDHAL_MISCCB32_GETAVAILDRIVERMEMORY)) + if (!(This->lpLcl->lpDDCB->cbDDMiscellaneousCallbacks.dwFlags & DDHAL_MISCCB32_GETAVAILDRIVERMEMORY)) { return DDERR_NODRIVERSUPPORT; } - mem.lpDD = This->mDDrawLocal.lpGbl; + mem.lpDD = This->lpLcl->lpGbl; mem.ddRVal = DDERR_NOTPALETTIZED; mem.DDSCaps.dwCaps = ddscaps->dwCaps; mem.ddsCapsEx.dwCaps2 = ddscaps->dwCaps2; mem.ddsCapsEx.dwCaps3 = ddscaps->dwCaps3; mem.ddsCapsEx.dwCaps4 = ddscaps->dwCaps4; - if (This->mDDrawGlobal.lpDDCBtmp->HALDDMiscellaneous.GetAvailDriverMemory(&mem) == DDHAL_DRIVER_HANDLED); + if (This->lpLcl->lpDDCB->cbDDMiscellaneousCallbacks.GetAvailDriverMemory(&mem) == DDHAL_DRIVER_HANDLED); { if (total !=NULL) { diff --git a/reactos/dll/directx/ddraw/main/surface_main.c b/reactos/dll/directx/ddraw/main/surface_main.c index 5defc755fe3..874a7c54c92 100644 --- a/reactos/dll/directx/ddraw/main/surface_main.c +++ b/reactos/dll/directx/ddraw/main/surface_main.c @@ -28,133 +28,199 @@ HRESULT WINAPI Main_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7 iface, LPDIREC ULONG WINAPI Main_DDrawSurface_AddRef(LPDIRECTDRAWSURFACE7 iface) { - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; - DX_WINDBG_trace(); - - return InterlockedIncrement((PLONG)&This->Owner->mDDrawGlobal.dsList->dwIntRefCnt); + DX_WINDBG_trace(); + + if (iface!=NULL) + { + This->dwIntRefCnt++; + This->lpLcl->dwLocalRefCnt++; + + if (This->lpLcl->lpGbl != NULL) + { + This->lpLcl->lpGbl->dwRefCnt++; + } + } + return This->dwIntRefCnt; } ULONG WINAPI Main_DDrawSurface_Release(LPDIRECTDRAWSURFACE7 iface) { - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; - - ULONG ref = InterlockedDecrement((PLONG)&This->Owner->mDDrawGlobal.dsList->dwIntRefCnt); - - if (ref == 0) - HeapFree(GetProcessHeap(), 0, This); + LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; - return ref; + /* FIXME + This is not right exiame how it should be done + */ + DX_STUB_str("FIXME This is not right exiame how it should be done\n"); + return This->dwIntRefCnt; } -/**** Stubs ****/ - HRESULT WINAPI Main_DDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface, REFIID riid, LPVOID* ppObj) { DX_WINDBG_trace(); + DX_STUB_str("Unimplement\n"); + return E_NOINTERFACE; } HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst, LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx) { - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + LPDDRAWI_DDRAWSURFACE_INT ThisDest = (LPDDRAWI_DDRAWSURFACE_INT)iface; + LPDDRAWI_DDRAWSURFACE_INT ThisSrc = (LPDDRAWI_DDRAWSURFACE_INT)src; + + DDHAL_BLTDATA BltData; DX_WINDBG_trace(); - + + RtlZeroMemory(&BltData,sizeof(DDHAL_BLTDATA)); + BltData.ddRVal = DDERR_GENERIC; + + if (ThisDest->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.dwFlags & DDHAL_SURFCB32_BLT) + { + BltData.lpDD = ThisDest->lpLcl->lpGbl->lpDD; + BltData.Blt = ThisDest->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.Blt; + + BltData.lpDDDestSurface = ThisDest->lpLcl; + BltData.lpDDSrcSurface = ThisSrc->lpLcl; + BltData.dwFlags = dwFlags; - if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT) - { - return Hal_DDrawSurface_Blt( iface, rdst, src, rsrc, dwFlags, lpbltfx); - } + if (rdst != NULL) + { + memmove (&BltData.rSrc, rdst, sizeof (RECTL)); + } - return Hel_DDrawSurface_Blt( iface, rdst, src, rsrc, dwFlags, lpbltfx); + if (rsrc != NULL) + { + memmove (&BltData.rDest, rsrc, sizeof (RECTL)); + } + + if (lpbltfx != NULL) + { + memmove (&BltData.bltFX, lpbltfx, sizeof (DDBLTFX)); + } + + DX_STUB_str("FIXME : Fill the BltData member dwRectCnt, dwROPFlags, IsClipped, prDestRects, rOrigDest, rOrigSrc before calling Blt\n"); + + /* FIXME + + // BltData.dwRectCnt + // BltData.dwROPFlags + // BltData.IsClipped + // BltData.prDestRects + // BltData.rOrigDest + // BltData.rOrigSrc + */ + + if (!DdResetVisrgn( ThisDest->lpLcl, NULL)) + { + return DDERR_NOGDI; + } + + if (BltData.Blt(&BltData) == DDHAL_DRIVER_HANDLED) + { + return BltData.ddRVal; + } + } + + return DDERR_GENERIC; } HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect, - LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event) + LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE events) { - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; + DDHAL_LOCKDATA LockData; DX_WINDBG_trace(); - if (event != NULL) + if (events != NULL) { return DDERR_INVALIDPARAMS; } - if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK) + RtlZeroMemory(&LockData,sizeof(DDHAL_LOCKDATA)); + LockData.ddRVal = DDERR_GENERIC; + + + + if (This->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.dwFlags & DDHAL_SURFCB32_LOCK) { - return Hal_DDrawSurface_Lock( iface, prect, pDDSD, flags, event); + LockData.lpDD = This->lpLcl->lpGbl->lpDD; + LockData.Lock = This->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.Lock; + + + + //LockData.lpDDSurface; + //LockData.bHasRect; + //LockData.rArea; + //LockData.lpSurfData; + + LockData.dwFlags = flags; + + if (LockData.Lock(&LockData) == DDHAL_DRIVER_HANDLED) + { + return LockData.ddRVal; + } } - return Hel_DDrawSurface_Lock( iface, prect, pDDSD, flags, event); + + return DDERR_GENERIC; } HRESULT WINAPI Main_DDrawSurface_Unlock (LPDIRECTDRAWSURFACE7 iface, LPRECT pRect) { - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; + DDHAL_UNLOCKDATA unLock; DX_WINDBG_trace(); - - if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK) + + if (!This->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.dwFlags & DDHAL_SURFCB32_UNLOCK) { - return Hal_DDrawSurface_Unlock( iface, pRect); + return DDERR_UNSUPPORTED; } - return Hel_DDrawSurface_Unlock( iface, pRect); + unLock.ddRVal = DDERR_NOTPALETTIZED; + unLock.lpDD = This->lpLcl->lpGbl->lpDD; + unLock.lpDDSurface = This->lpLcl; + unLock.Unlock = This->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.Unlock; + + + + if (!DdResetVisrgn( unLock.lpDDSurface, NULL)) + { + return DDERR_UNSUPPORTED; + } + + if (unLock.Unlock(&unLock)!= DDHAL_DRIVER_HANDLED) + { + return DDERR_UNSUPPORTED; + } + + if (unLock.ddRVal!= DD_OK) + { + return unLock.ddRVal; + } + + return DD_OK; } HRESULT WINAPI Main_DDrawSurface_AddAttachedSurface(LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAWSURFACE7 pAttach) { - DWORD ret; - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; - IDirectDrawSurfaceImpl* That = (IDirectDrawSurfaceImpl*)pAttach; + + // LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; + // LPDDRAWI_DDRAWSURFACE_INT That = (LPDDRAWI_DDRAWSURFACE_INT)pAttach; DX_WINDBG_trace(); - if (pAttach==NULL) - { - return DDERR_CANNOTATTACHSURFACE; - } - - ret = DdAttachSurface( That->Surf->mpPrimaryLocals[0],This->Surf->mpPrimaryLocals[0]); - - if (ret == DD_OK) - { - /* - Here we put in wine code - - Wine Code from wine cvs 27/7-2006 - with small changes to fith into our ddraw desgin - - */ - if (This->Surf->mddsdPrimary.ddsCaps.dwCaps & That->Surf->mddsdPrimary.ddsCaps.dwCaps & DDSCAPS_MIPMAP) - { - That->Surf->mddsdPrimary.ddsCaps.dwCaps2 |= DDSCAPS2_MIPMAPSUBLEVEL; - } - - if( (That->Surf->next_attached != NULL) || (That->Surf->first_attached != (DWORD*)That) ) - { - DX_STUB_str("Wine Code fails"); - return DDERR_CANNOTATTACHSURFACE; - } - - That->Surf->next_attached = This->Surf->next_attached; - That->Surf->first_attached = This->Surf->first_attached; - This->Surf->next_attached = (DWORD*)That; - - Main_DDrawSurface_AddRef((LPDIRECTDRAWSURFACE7)pAttach); - return DD_OK; - } - - return ret; + DX_STUB; } /* MSDN: "not currently implemented." */ @@ -219,45 +285,9 @@ Main_DDrawSurface_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE7 iface, LPVOID context, LPDDENUMSURFACESCALLBACK7 cb) { - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; - IDirectDrawSurfaceImpl *surf; - DDSURFACEDESC2 desc; + DX_WINDBG_trace(); - DX_WINDBG_trace(); - - /* - Wine Code from wine cvs 27/7-2006 - with small changes to fith into our ddraw desgin - */ - - if(cb == NULL) - { - return DDERR_INVALIDPARAMS; - } - - for (surf = (IDirectDrawSurfaceImpl*)This->Surf->next_complex; surf != NULL; surf = (IDirectDrawSurfaceImpl*)surf->Surf->next_complex) - { - Main_DDrawSurface_AddRef((LPDIRECTDRAWSURFACE7)surf); - desc = surf->Surf->mddsdPrimary; - /* check: != DDENUMRET_OK or == DDENUMRET_CANCEL? */ - if (cb((LPDIRECTDRAWSURFACE7)surf, &desc, context) == DDENUMRET_CANCEL) - { - return DD_OK; - } - } - - for (surf = (IDirectDrawSurfaceImpl*)This->Surf->next_attached; surf != NULL; surf = (IDirectDrawSurfaceImpl*)surf->Surf->next_attached) - { - Main_DDrawSurface_AddRef((LPDIRECTDRAWSURFACE7)surf); - desc = surf->Surf->mddsdPrimary; - /* check: != DDENUMRET_OK or == DDENUMRET_CANCEL? */ - if (cb((LPDIRECTDRAWSURFACE7)surf, &desc, context) == DDENUMRET_CANCEL) - { - return DD_OK; - } - } - - return DD_OK; + DX_STUB; } HRESULT WINAPI @@ -272,18 +302,11 @@ Main_DDrawSurface_EnumOverlayZOrders(LPDIRECTDRAWSURFACE7 iface, HRESULT WINAPI Main_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface, - LPDIRECTDRAWSURFACE7 override, DWORD dwFlags) + LPDIRECTDRAWSURFACE7 lpDDSurfaceTargetOverride, DWORD dwFlags) { - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + DX_WINDBG_trace(); - DX_WINDBG_trace(); - - if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP) - { - return Hal_DDrawSurface_Flip(iface, override, dwFlags); - } - - return Hel_DDrawSurface_Flip(iface, override, dwFlags); + DX_STUB; } HRESULT WINAPI @@ -299,86 +322,33 @@ Main_DDrawSurface_GetAttachedSurface(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps, LPDIRECTDRAWSURFACE7* ppSurface) { - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; - IDirectDrawSurfaceImpl *surf; - DDSCAPS2 our_caps; + //LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; + //LPDDRAWI_DDRAWSURFACE_INT surf; DX_WINDBG_trace(); - /* - Wine Code from wine cvs 27/7-2006 - with small changes to fith into our ddraw desgin - */ - - our_caps = *pCaps; - - /* - FIXME adding version check - Earlier dx apps put garbage into these members, clear them - */ - our_caps.dwCaps2 = 0; - our_caps.dwCaps3 = 0; - our_caps.dwCaps4 = 0; - - //surf = (IDirectDrawSurfaceImpl*)This->Surf->next_complex; - if (This->Surf->next_complex != NULL) - { - surf = (IDirectDrawSurfaceImpl*)This->Surf->next_complex; - while( surf != NULL ) - { - if (((surf->Surf->mddsdPrimary.ddsCaps.dwCaps & our_caps.dwCaps) == our_caps.dwCaps) && - ((surf->Surf->mddsdPrimary.ddsCaps.dwCaps2 & our_caps.dwCaps2) == our_caps.dwCaps2)) - { - *ppSurface = (LPDIRECTDRAWSURFACE7)surf; - Main_DDrawSurface_AddRef(*ppSurface); - DX_STUB_str("surf->Surf->next_complex ok"); - return DD_OK; - } - surf = (IDirectDrawSurfaceImpl*)This->Surf->next_complex; - } - } - - if (This->Surf->next_attached != NULL) - { - surf = (IDirectDrawSurfaceImpl*)This->Surf->next_attached; - - while(surf != NULL) - { - if (((surf->Surf->mddsdPrimary.ddsCaps.dwCaps & our_caps.dwCaps) == our_caps.dwCaps) && - ((surf->Surf->mddsdPrimary.ddsCaps.dwCaps2 & our_caps.dwCaps2) == our_caps.dwCaps2)) - { - *ppSurface = (LPDIRECTDRAWSURFACE7)surf; - Main_DDrawSurface_AddRef(*ppSurface); - DX_STUB_str("surf->Surf->next_attached ok"); - return DD_OK; - } - surf = (IDirectDrawSurfaceImpl*)This->Surf->next_attached; - } - } - - DX_STUB_str("Fail"); - return DDERR_NOTFOUND; + DX_STUB; } HRESULT WINAPI Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags) { - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; DX_WINDBG_trace(); - if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP) + if (!This->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.dwFlags & DDHAL_SURFCB32_FLIP) { - return Hal_DDrawSurface_GetBltStatus( iface, dwFlags); + return DDERR_GENERIC; } - return Hel_DDrawSurface_GetBltStatus( iface, dwFlags); + DX_STUB; } HRESULT WINAPI Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps) { - IDirectDrawSurfaceImpl* This; + LPDDRAWI_DDRAWSURFACE_INT This; DX_WINDBG_trace(); @@ -392,10 +362,11 @@ Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps) return DDERR_INVALIDPARAMS; } - This = (IDirectDrawSurfaceImpl*)iface; + This = (LPDDRAWI_DDRAWSURFACE_INT)iface; RtlZeroMemory(pCaps,sizeof(DDSCAPS2)); - pCaps->dwCaps = This->Surf->mddsdPrimary.ddsCaps.dwCaps; + + pCaps->dwCaps = This->lpLcl->ddsCaps.dwCaps; return DD_OK; } @@ -403,8 +374,7 @@ Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface, LPDDSCAPS2 pCaps) HRESULT WINAPI Main_DDrawSurface_GetClipper(LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAWCLIPPER* ppClipper) -{ - DX_WINDBG_trace(); +{ DX_STUB; } @@ -413,7 +383,9 @@ HRESULT WINAPI Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags, LPDDCOLORKEY pCKey) { - DX_WINDBG_trace(); + //LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; + + DX_WINDBG_trace(); DX_STUB; } @@ -421,7 +393,7 @@ Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags, HRESULT WINAPI Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC) { - IDirectDrawSurfaceImpl* This; + LPDDRAWI_DDRAWSURFACE_INT This; DX_WINDBG_trace(); @@ -435,21 +407,21 @@ Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC) return DDERR_INVALIDPARAMS; } - This = (IDirectDrawSurfaceImpl*)iface; + This = (LPDDRAWI_DDRAWSURFACE_INT)iface; /* FIXME check if the surface exists or not for now we aussme the surface exits and create the hDC for it */ - if ((HDC)This->Surf->mPrimaryLocal.hDC == NULL) + if ((HDC)This->lpLcl->hDC == NULL) { - This->Surf->mPrimaryLocal.hDC = (ULONG_PTR)GetDC((HWND)This->Owner->mDDrawGlobal.lpExclusiveOwner->hWnd); - *phDC = (HDC)This->Surf->mPrimaryLocal.hDC; + This->lpLcl->hDC = (ULONG_PTR)GetDC((HWND)This->lpLcl->lpGbl->lpDD->lpExclusiveOwner->hWnd); + *phDC = (HDC)This->lpLcl->hDC; } else { - *phDC = (HDC)This->Surf->mpPrimaryLocals[0]->hDC; + *phDC = (HDC)This->lpLcl->hDC; } return DD_OK; @@ -528,7 +500,9 @@ Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface, LPDDSURFACEDESC2 pDDSD) { DWORD dwSize; - IDirectDrawSurfaceImpl *This = (IDirectDrawSurfaceImpl *)iface; + + + LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; DX_WINDBG_trace(); dwSize = pDDSD->dwSize; @@ -538,10 +512,87 @@ Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface, { return DDERR_GENERIC; } - - RtlZeroMemory(pDDSD,dwSize); - memcpy(pDDSD, &This->Surf->mddsdPrimary, sizeof(DDSURFACEDESC)); - pDDSD->dwSize = dwSize; + + ZeroMemory(pDDSD,dwSize); + + if (dwSize == sizeof(DDSURFACEDESC)) + { + LPDDSURFACEDESC lpDS = (LPDDSURFACEDESC) pDDSD; + memcpy(&lpDS->ddckCKDestBlt, &This->lpLcl->ddckCKDestBlt, sizeof(DDCOLORKEY)); + memcpy(&lpDS->ddckCKDestOverlay, &This->lpLcl->ddckCKDestOverlay, sizeof(DDCOLORKEY)); + memcpy(&lpDS->ddckCKSrcBlt, &This->lpLcl->ddckCKSrcBlt, sizeof(DDCOLORKEY)); + memcpy(&lpDS->ddckCKSrcOverlay, &This->lpLcl->ddckCKSrcOverlay, sizeof(DDCOLORKEY)); + memcpy(&lpDS->ddpfPixelFormat, &This->lpLcl->lpGbl->ddpfSurface, sizeof(DDPIXELFORMAT)); + memcpy(&lpDS->ddsCaps, &This->lpLcl->ddsCaps, sizeof(DDSCAPS)); + + lpDS->dwAlphaBitDepth = This->lpLcl->dwAlpha; + lpDS->dwBackBufferCount = This->lpLcl->dwBackBufferCount; + + /* FIXME setting the flags right */ + // lpDS->dwFlags = This->lpLcl->dwFlags; + + lpDS->dwHeight = This->lpLcl->lpGbl->wHeight; + lpDS->dwWidth = This->lpLcl->lpGbl->wWidth; + + /* This two are a union in lpDS and in This->lpLcl->lpGbl + so I comment out lPitch + lpDS->lPitch = This->lpLcl->lpGbl->lPitch; + */ + lpDS->dwLinearSize = This->lpLcl->lpGbl->dwLinearSize; + + + /* This tree are a union */ + //lpDS->dwMipMapCount + //lpDS->dwRefreshRate + //lpDS->dwZBufferBitDepth + + /* Unknown */ + // lpDS->dwReserved + // lpDS->lpSurface + } + else + { + memcpy(&pDDSD->ddckCKDestBlt, &This->lpLcl->ddckCKDestBlt, sizeof(DDCOLORKEY)); + + /* + pDDSD->dwEmptyFaceColor is a union to ddckCKDestOverlay + */ + memcpy(&pDDSD->ddckCKDestOverlay, &This->lpLcl->ddckCKDestOverlay, sizeof(DDCOLORKEY)); + memcpy(&pDDSD->ddckCKSrcBlt, &This->lpLcl->ddckCKSrcBlt, sizeof(DDCOLORKEY)); + memcpy(&pDDSD->ddckCKSrcOverlay, &This->lpLcl->ddckCKSrcOverlay, sizeof(DDCOLORKEY)); + + /* + pDDSD->dwFVF is a union to ddpfPixelFormat + */ + memcpy(&pDDSD->ddpfPixelFormat, &This->lpLcl->lpGbl->ddpfSurface, sizeof(DDPIXELFORMAT)); + memcpy(&pDDSD->ddsCaps, &This->lpLcl->ddsCaps, sizeof(DDSCAPS)); + + + pDDSD->dwAlphaBitDepth = This->lpLcl->dwAlpha; + pDDSD->dwBackBufferCount = This->lpLcl->dwBackBufferCount; + + /* FIXME setting the flags right */ + // lpDS->dwFlags = This->lpLcl->dwFlags; + + pDDSD->dwHeight = This->lpLcl->lpGbl->wHeight; + pDDSD->dwWidth = This->lpLcl->lpGbl->wWidth; + + /* This two are a union in lpDS and in This->lpLcl->lpGbl + so I comment out lPitch + lpDS->lPitch = This->lpLcl->lpGbl->lPitch; + */ + pDDSD->dwLinearSize = This->lpLcl->lpGbl->dwLinearSize; + + /* This tree are a union */ + // pDDSD->dwMipMapCount + // pDDSD->dwRefreshRate + // pDDSD->dwSrcVBHandle + + /* Unknown */ + // lpDS->dwReserved + // lpDS->lpSurface + // pDDSD->dwTextureStage + } return DD_OK; } @@ -584,7 +635,7 @@ Main_DDrawSurface_PageUnlock(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags) HRESULT WINAPI Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface, HDC hDC) { - IDirectDrawSurfaceImpl* This; + LPDDRAWI_DDRAWSURFACE_INT This; DX_WINDBG_trace(); if (iface == NULL) @@ -597,17 +648,16 @@ Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface, HDC hDC) return DDERR_INVALIDPARAMS; } - This = (IDirectDrawSurfaceImpl*)iface; + This = (LPDDRAWI_DDRAWSURFACE_INT)iface; /* FIXME check if surface exits or not */ - if ((HDC)This->Surf->mPrimaryLocal.hDC == NULL) + + if ((HDC)This->lpLcl->hDC == NULL) { return DDERR_GENERIC; } - - ReleaseDC((HWND)This->Owner->mDDrawGlobal.lpExclusiveOwner->hWnd,hDC); - + return DD_OK; } @@ -624,27 +674,72 @@ HRESULT WINAPI Main_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags, LPDDCOLORKEY pCKey) { - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; + + DDHAL_SETCOLORKEYDATA ColorKeyData; DX_WINDBG_trace(); - if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_SETCOLORKEY) - { - return Hal_DDrawSurface_SetColorKey (iface, dwFlags, pCKey); - } + ColorKeyData.ddRVal = DDERR_COLORKEYNOTSET; - return Hel_DDrawSurface_SetColorKey (iface, dwFlags, pCKey); + if (This->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.dwFlags & DDHAL_SURFCB32_SETCOLORKEY) + { + + ColorKeyData.lpDD = This->lpLcl->lpGbl->lpDD; + ColorKeyData.SetColorKey = This->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.SetColorKey; + + //ColorKeyData.lpDDSurface = &This->lpLcl->hDDSurface; + ColorKeyData.dwFlags = dwFlags; + /* FIXME + ColorKeyData.ckNew = ? + add / move dwFlags to This->lpLcl->dwFlags ?? + */ + + if (ColorKeyData.SetColorKey(&ColorKeyData) == DDHAL_DRIVER_HANDLED ) + { + return ColorKeyData.ddRVal; + } + } + return DDERR_COLORKEYNOTSET; } HRESULT WINAPI -Main_DDrawSurface_SetOverlayPosition (LPDIRECTDRAWSURFACE7 iface, - LONG X, LONG Y) +Main_DDrawSurface_SetOverlayPosition (LPDIRECTDRAWSURFACE7 iface, LONG X, LONG Y) { - DX_WINDBG_trace(); + LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; + + DDHAL_SETOVERLAYPOSITIONDATA OverLayPositionData; - DX_STUB; + DX_WINDBG_trace(); + + OverLayPositionData.ddRVal = DDERR_COLORKEYNOTSET; + + if (This->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.dwFlags & DDHAL_SURFCB32_SETOVERLAYPOSITION) + { + + OverLayPositionData.lpDD = This->lpLcl->lpGbl->lpDD; + OverLayPositionData.SetOverlayPosition = This->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.SetOverlayPosition; + + //OverLayPositionData.lpDDSrcSurface = This->lpLcl->lpSurfaceOverlaying->lpLcl->hDDSurface; + //OverLayPositionData.lpDDDestSurface = This->lpLcl->hDDSurface; + + OverLayPositionData.lXPos = X; + OverLayPositionData.lYPos = Y; + + + /* FIXME + Should X and Y be save ?? + */ + + if (OverLayPositionData.SetOverlayPosition(&OverLayPositionData) == DDHAL_DRIVER_HANDLED ) + { + return OverLayPositionData.ddRVal; + } + } + + return DDERR_GENERIC; } HRESULT WINAPI @@ -692,16 +787,16 @@ HRESULT WINAPI Main_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags) { - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; DX_WINDBG_trace(); - if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY) + if (!This->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY) { - return Hal_DDrawSurface_UpdateOverlayDisplay ( iface, dwFlags); + return DDERR_GENERIC; } - return Hel_DDrawSurface_UpdateOverlayDisplay ( iface, dwFlags); + DX_STUB; } HRESULT WINAPI Main_DDrawSurface_UpdateOverlayZOrder (LPDIRECTDRAWSURFACE7 iface, @@ -712,11 +807,29 @@ HRESULT WINAPI Main_DDrawSurface_UpdateOverlayZOrder (LPDIRECTDRAWSURFACE7 iface DX_STUB; } +HRESULT WINAPI +Main_DDrawSurface_SetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface, DDSURFACEDESC2 *DDSD, DWORD Flags) +{ + DX_WINDBG_trace(); + + DX_STUB; +} + +HRESULT WINAPI +Main_DDrawSurface_SetLOD(LPDIRECTDRAWSURFACE7 iface, DWORD MaxLOD) +{ + DX_WINDBG_trace(); + + DX_STUB; +} + IDirectDrawSurface7Vtbl DirectDrawSurface7_Vtable = { + /*** IUnknown ***/ Main_DDrawSurface_QueryInterface, Main_DDrawSurface_AddRef, Main_DDrawSurface_Release, + /*** IDirectDrawSurface ***/ Main_DDrawSurface_AddAttachedSurface, Main_DDrawSurface_AddOverlayDirtyRect, Main_DDrawSurface_Blt, @@ -749,5 +862,22 @@ IDirectDrawSurface7Vtbl DirectDrawSurface7_Vtable = Main_DDrawSurface_Unlock, Main_DDrawSurface_UpdateOverlay, Main_DDrawSurface_UpdateOverlayDisplay, - Main_DDrawSurface_UpdateOverlayZOrder + Main_DDrawSurface_UpdateOverlayZOrder, + /*** IDirectDrawSurface2 ***/ + Main_DDrawSurface_GetDDInterface, + Main_DDrawSurface_PageLock, + Main_DDrawSurface_PageUnlock, + /*** IDirectDrawSurface3 ***/ + Main_DDrawSurface_SetSurfaceDesc, + /*** IDirectDrawSurface4 ***/ + Main_DDrawSurface_SetPrivateData, + Main_DDrawSurface_GetPrivateData, + Main_DDrawSurface_FreePrivateData, + Main_DDrawSurface_GetUniquenessValue, + Main_DDrawSurface_ChangeUniquenessValue, + /*** IDirectDrawSurface7 ***/ + Main_DDrawSurface_SetPriority, + Main_DDrawSurface_GetPriority, + Main_DDrawSurface_SetLOD, + Main_DDrawSurface_GetLOD }; diff --git a/reactos/dll/directx/ddraw/regsvr.c b/reactos/dll/directx/ddraw/regsvr.c deleted file mode 100644 index 13b2316432d..00000000000 --- a/reactos/dll/directx/ddraw/regsvr.c +++ /dev/null @@ -1,497 +0,0 @@ -/* - * self-registerable dll functions for ddraw.dll - * - * Copyright (C) 2003 John K. Hohm - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * this file are from wine ddraw with some modification - */ - -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "winreg.h" -#include "wingdi.h" -#include "winuser.h" -#include "winerror.h" -#include "ddraw.h" - - -//#include "wine/debug.h" - -//WINE_DEFAULT_DEBUG_CHANNEL(ddraw); - -/* - * Near the bottom of this file are the exported DllRegisterServer and - * DllUnregisterServer, which make all this worthwhile. - */ - -/*********************************************************************** - * interface for self-registering - */ -struct regsvr_interface -{ - IID const *iid; /* NULL for end of list */ - LPCSTR name; /* can be NULL to omit */ - IID const *base_iid; /* can be NULL to omit */ - int num_methods; /* can be <0 to omit */ - CLSID const *ps_clsid; /* can be NULL to omit */ - CLSID const *ps_clsid32; /* can be NULL to omit */ -}; - -static HRESULT register_interfaces(struct regsvr_interface const *list); -static HRESULT unregister_interfaces(struct regsvr_interface const *list); - -struct regsvr_coclass -{ - CLSID const *clsid; /* NULL for end of list */ - LPCSTR name; /* can be NULL to omit */ - LPCSTR ips; /* can be NULL to omit */ - LPCSTR ips32; /* can be NULL to omit */ - LPCSTR ips32_tmodel; /* can be NULL to omit */ - LPCSTR clsid_str; /* can be NULL to omit */ - LPCSTR progid; /* can be NULL to omit */ -}; - -static HRESULT register_coclasses(struct regsvr_coclass const *list); -static HRESULT unregister_coclasses(struct regsvr_coclass const *list); - -/*********************************************************************** - * static string constants - */ -static WCHAR const interface_keyname[10] = { - 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', 'e', 0 }; -static WCHAR const base_ifa_keyname[14] = { - 'B', 'a', 's', 'e', 'I', 'n', 't', 'e', 'r', 'f', 'a', 'c', - 'e', 0 }; -static WCHAR const num_methods_keyname[11] = { - 'N', 'u', 'm', 'M', 'e', 't', 'h', 'o', 'd', 's', 0 }; -static WCHAR const ps_clsid_keyname[15] = { - 'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's', - 'i', 'd', 0 }; -static WCHAR const ps_clsid32_keyname[17] = { - 'P', 'r', 'o', 'x', 'y', 'S', 't', 'u', 'b', 'C', 'l', 's', - 'i', 'd', '3', '2', 0 }; -static WCHAR const clsid_keyname[6] = { - 'C', 'L', 'S', 'I', 'D', 0 }; -static WCHAR const ips_keyname[13] = { - 'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r', - 0 }; -static WCHAR const ips32_keyname[15] = { - 'I', 'n', 'P', 'r', 'o', 'c', 'S', 'e', 'r', 'v', 'e', 'r', - '3', '2', 0 }; -static WCHAR const progid_keyname[7] = { - 'P', 'r', 'o', 'g', 'I', 'D', 0 }; -static char const tmodel_valuename[] = "ThreadingModel"; - -/*********************************************************************** - * static helper functions - */ -static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid); -static LONG register_key_defvalueW(HKEY base, WCHAR const *name, - WCHAR const *value); -static LONG register_key_defvalueA(HKEY base, WCHAR const *name, - char const *value); -static LONG recursive_delete_key(HKEY key); -static LONG recursive_delete_keyA(HKEY base, char const *name); -static LONG recursive_delete_keyW(HKEY base, WCHAR const *name); - -/*********************************************************************** - * register_interfaces - */ -static HRESULT register_interfaces(struct regsvr_interface const *list) -{ - LONG res = ERROR_SUCCESS; - HKEY interface_key; - - res = RegCreateKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &interface_key, NULL); - if (res != ERROR_SUCCESS) goto error_return; - - for (; res == ERROR_SUCCESS && list->iid; ++list) { - WCHAR buf[39]; - HKEY iid_key; - - StringFromGUID2(list->iid, buf, 39); - res = RegCreateKeyExW(interface_key, buf, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &iid_key, NULL); - if (res != ERROR_SUCCESS) goto error_close_interface_key; - - if (list->name) { - res = RegSetValueExA(iid_key, NULL, 0, REG_SZ, - (CONST BYTE*)(list->name), - strlen(list->name) + 1); - if (res != ERROR_SUCCESS) goto error_close_iid_key; - } - - if (list->base_iid) { - register_key_guid(iid_key, base_ifa_keyname, list->base_iid); - if (res != ERROR_SUCCESS) goto error_close_iid_key; - } - - if (0 <= list->num_methods) { - static WCHAR const fmt[3] = { '%', 'd', 0 }; - HKEY key; - - res = RegCreateKeyExW(iid_key, num_methods_keyname, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &key, NULL); - if (res != ERROR_SUCCESS) goto error_close_iid_key; - - wsprintfW(buf, fmt, list->num_methods); - res = RegSetValueExW(key, NULL, 0, REG_SZ, - (CONST BYTE*)buf, - (lstrlenW(buf) + 1) * sizeof(WCHAR)); - RegCloseKey(key); - - if (res != ERROR_SUCCESS) goto error_close_iid_key; - } - - if (list->ps_clsid) { - register_key_guid(iid_key, ps_clsid_keyname, list->ps_clsid); - if (res != ERROR_SUCCESS) goto error_close_iid_key; - } - - if (list->ps_clsid32) { - register_key_guid(iid_key, ps_clsid32_keyname, list->ps_clsid32); - if (res != ERROR_SUCCESS) goto error_close_iid_key; - } - - error_close_iid_key: - RegCloseKey(iid_key); - } - -error_close_interface_key: - RegCloseKey(interface_key); -error_return: - return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; -} - -/*********************************************************************** - * unregister_interfaces - */ -static HRESULT unregister_interfaces(struct regsvr_interface const *list) -{ - LONG res = ERROR_SUCCESS; - HKEY interface_key; - - res = RegOpenKeyExW(HKEY_CLASSES_ROOT, interface_keyname, 0, - KEY_READ | KEY_WRITE, &interface_key); - if (res == ERROR_FILE_NOT_FOUND) return S_OK; - if (res != ERROR_SUCCESS) goto error_return; - - for (; res == ERROR_SUCCESS && list->iid; ++list) { - WCHAR buf[39]; - - StringFromGUID2(list->iid, buf, 39); - res = recursive_delete_keyW(interface_key, buf); - } - - RegCloseKey(interface_key); -error_return: - return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; -} - -/*********************************************************************** - * register_coclasses - */ -static HRESULT register_coclasses(struct regsvr_coclass const *list) -{ - LONG res = ERROR_SUCCESS; - HKEY coclass_key; - - res = RegCreateKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &coclass_key, NULL); - if (res != ERROR_SUCCESS) goto error_return; - - for (; res == ERROR_SUCCESS && list->clsid; ++list) { - WCHAR buf[39]; - HKEY clsid_key; - - StringFromGUID2(list->clsid, buf, 39); - res = RegCreateKeyExW(coclass_key, buf, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &clsid_key, NULL); - if (res != ERROR_SUCCESS) goto error_close_coclass_key; - - if (list->name) { - res = RegSetValueExA(clsid_key, NULL, 0, REG_SZ, - (CONST BYTE*)(list->name), - strlen(list->name) + 1); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - } - - if (list->ips) { - res = register_key_defvalueA(clsid_key, ips_keyname, list->ips); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - } - - if (list->ips32) { - HKEY ips32_key; - - res = RegCreateKeyExW(clsid_key, ips32_keyname, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, - &ips32_key, NULL); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - - res = RegSetValueExA(ips32_key, NULL, 0, REG_SZ, - (CONST BYTE*)list->ips32, - lstrlenA(list->ips32) + 1); - if (res == ERROR_SUCCESS && list->ips32_tmodel) - res = RegSetValueExA(ips32_key, tmodel_valuename, 0, REG_SZ, - (CONST BYTE*)list->ips32_tmodel, - strlen(list->ips32_tmodel) + 1); - RegCloseKey(ips32_key); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - } - - if (list->clsid_str) { - res = register_key_defvalueA(clsid_key, clsid_keyname, - list->clsid_str); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - } - - if (list->progid) { - HKEY progid_key; - - res = register_key_defvalueA(clsid_key, progid_keyname, - list->progid); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - - res = RegCreateKeyExA(HKEY_CLASSES_ROOT, list->progid, 0, - NULL, 0, KEY_READ | KEY_WRITE, NULL, - &progid_key, NULL); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - - res = register_key_defvalueW(progid_key, clsid_keyname, buf); - RegCloseKey(progid_key); - if (res != ERROR_SUCCESS) goto error_close_clsid_key; - } - - error_close_clsid_key: - RegCloseKey(clsid_key); - } - -error_close_coclass_key: - RegCloseKey(coclass_key); -error_return: - return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; -} - -/*********************************************************************** - * unregister_coclasses - */ -static HRESULT unregister_coclasses(struct regsvr_coclass const *list) -{ - LONG res = ERROR_SUCCESS; - HKEY coclass_key; - - res = RegOpenKeyExW(HKEY_CLASSES_ROOT, clsid_keyname, 0, - KEY_READ | KEY_WRITE, &coclass_key); - if (res == ERROR_FILE_NOT_FOUND) return S_OK; - if (res != ERROR_SUCCESS) goto error_return; - - for (; res == ERROR_SUCCESS && list->clsid; ++list) { - WCHAR buf[39]; - - StringFromGUID2(list->clsid, buf, 39); - res = recursive_delete_keyW(coclass_key, buf); - if (res != ERROR_SUCCESS) goto error_close_coclass_key; - - if (list->progid) { - res = recursive_delete_keyA(HKEY_CLASSES_ROOT, list->progid); - if (res != ERROR_SUCCESS) goto error_close_coclass_key; - } - } - -error_close_coclass_key: - RegCloseKey(coclass_key); -error_return: - return res != ERROR_SUCCESS ? HRESULT_FROM_WIN32(res) : S_OK; -} - -/*********************************************************************** - * regsvr_key_guid - */ -static LONG register_key_guid(HKEY base, WCHAR const *name, GUID const *guid) -{ - WCHAR buf[39]; - - StringFromGUID2(guid, buf, 39); - return register_key_defvalueW(base, name, buf); -} - -/*********************************************************************** - * regsvr_key_defvalueW - */ -static LONG register_key_defvalueW( - HKEY base, - WCHAR const *name, - WCHAR const *value) -{ - LONG res; - HKEY key; - - res = RegCreateKeyExW(base, name, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &key, NULL); - if (res != ERROR_SUCCESS) return res; - res = RegSetValueExW(key, NULL, 0, REG_SZ, (CONST BYTE*)value, - (lstrlenW(value) + 1) * sizeof(WCHAR)); - RegCloseKey(key); - return res; -} - -/*********************************************************************** - * regsvr_key_defvalueA - */ -static LONG register_key_defvalueA( - HKEY base, - WCHAR const *name, - char const *value) -{ - LONG res; - HKEY key; - - res = RegCreateKeyExW(base, name, 0, NULL, 0, - KEY_READ | KEY_WRITE, NULL, &key, NULL); - if (res != ERROR_SUCCESS) return res; - res = RegSetValueExA(key, NULL, 0, REG_SZ, (CONST BYTE*)value, - lstrlenA(value) + 1); - RegCloseKey(key); - return res; -} - -/*********************************************************************** - * recursive_delete_key - */ -static LONG recursive_delete_key(HKEY key) -{ - LONG res; - WCHAR subkey_name[MAX_PATH]; - DWORD cName; - HKEY subkey; - - for (;;) { - cName = sizeof(subkey_name) / sizeof(WCHAR); - res = RegEnumKeyExW(key, 0, subkey_name, &cName, - NULL, NULL, NULL, NULL); - if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) { - res = ERROR_SUCCESS; /* presumably we're done enumerating */ - break; - } - res = RegOpenKeyExW(key, subkey_name, 0, - KEY_READ | KEY_WRITE, &subkey); - if (res == ERROR_FILE_NOT_FOUND) continue; - if (res != ERROR_SUCCESS) break; - - res = recursive_delete_key(subkey); - RegCloseKey(subkey); - if (res != ERROR_SUCCESS) break; - } - - if (res == ERROR_SUCCESS) res = RegDeleteKeyW(key, 0); - return res; -} - -/*********************************************************************** - * recursive_delete_keyA - */ -static LONG recursive_delete_keyA(HKEY base, char const *name) -{ - LONG res; - HKEY key; - - res = RegOpenKeyExA(base, name, 0, KEY_READ | KEY_WRITE, &key); - if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS; - if (res != ERROR_SUCCESS) return res; - res = recursive_delete_key(key); - RegCloseKey(key); - return res; -} - -/*********************************************************************** - * recursive_delete_keyW - */ -static LONG recursive_delete_keyW(HKEY base, WCHAR const *name) -{ - LONG res; - HKEY key; - - res = RegOpenKeyExW(base, name, 0, KEY_READ | KEY_WRITE, &key); - if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS; - if (res != ERROR_SUCCESS) return res; - res = recursive_delete_key(key); - RegCloseKey(key); - return res; -} - -/*********************************************************************** - * coclass list - */ - -static struct regsvr_coclass const coclass_list[] = { - { &CLSID_DirectDraw, - "DirectDraw Object", - NULL, - "ddraw.dll", - "Both" - }, - { &CLSID_DirectDrawClipper, - "DirectDraw Clipper Object", - NULL, - "ddraw.dll", - "Both" - }, - { NULL } /* list terminator */ -}; - -/*********************************************************************** - * interface list - */ - -static struct regsvr_interface const interface_list[] = { - { NULL } /* list terminator */ -}; - -/*********************************************************************** - * DllRegisterServer (DDRAW.@) - */ -HRESULT WINAPI DDRAW_DllRegisterServer() -{ - HRESULT hr; - - //TRACE("\n"); - - hr = register_coclasses(coclass_list); - if (SUCCEEDED(hr)) - hr = register_interfaces(interface_list); - return hr; -} - -/*********************************************************************** - * DllUnregisterServer (DDRAW.@) - */ -HRESULT WINAPI DDRAW_DllUnregisterServer() -{ - HRESULT hr; - - //TRACE("\n"); - - hr = unregister_coclasses(coclass_list); - if (SUCCEEDED(hr)) - hr = unregister_interfaces(interface_list); - return hr; -} diff --git a/reactos/dll/directx/ddraw/rosdraw.h b/reactos/dll/directx/ddraw/rosdraw.h index 15964b763ce..f168355fa99 100644 --- a/reactos/dll/directx/ddraw/rosdraw.h +++ b/reactos/dll/directx/ddraw/rosdraw.h @@ -5,13 +5,23 @@ #include #include + + #include #include #include #include + + + + + /* DirectDraw startup code only internal use */ -HRESULT WINAPI StartDirectDraw(LPDIRECTDRAW* iface); +extern DDRAWI_DIRECTDRAW_GBL ddgbl; +extern DDRAWI_DDRAWSURFACE_GBL ddSurfGbl; + +HRESULT WINAPI StartDirectDraw(LPDIRECTDRAW* iface, LPGUID pGUID); HRESULT WINAPI StartDirectDrawHal(LPDIRECTDRAW* iface); HRESULT WINAPI StartDirectDrawHel(LPDIRECTDRAW* iface); HRESULT WINAPI Create_DirectDraw (LPGUID pGUID, LPDIRECTDRAW* pIface, REFIID id, BOOL ex); @@ -28,234 +38,478 @@ VOID Cleanup(LPDIRECTDRAW7 iface); VOID WINAPI AcquireDDThreadLock(); VOID WINAPI ReleaseDDThreadLock(); -HRESULT WINAPI Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface, REFIID id, LPVOID *obj); -ULONG WINAPI Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface); -ULONG WINAPI Main_DirectDraw_Release (LPDIRECTDRAW7 iface); -HRESULT WINAPI Main_DirectDraw_Compact (LPDIRECTDRAW7 iface); +HRESULT WINAPI Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 , REFIID , LPVOID *); +ULONG WINAPI Main_DirectDraw_AddRef(LPDIRECTDRAW7 ); +ULONG WINAPI Main_DirectDraw_Release(LPDIRECTDRAW7 ); +HRESULT WINAPI Main_DirectDraw_Compact(LPDIRECTDRAW7 ); +HRESULT WINAPI Main_DirectDraw_CreateClipper(LPDIRECTDRAW7, DWORD, LPDIRECTDRAWCLIPPER *, IUnknown *); +HRESULT WINAPI Main_DirectDraw_CreatePalette(LPDIRECTDRAW7, DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE*, LPUNKNOWN); +HRESULT WINAPI Main_DirectDraw_CreateSurface(LPDIRECTDRAW7, LPDDSURFACEDESC2, LPDIRECTDRAWSURFACE7 *, IUnknown *); +HRESULT WINAPI Main_DirectDraw_DuplicateSurface(LPDIRECTDRAW7, LPDIRECTDRAWSURFACE7, LPDIRECTDRAWSURFACE7*); +HRESULT WINAPI Main_DirectDraw_GetDeviceIdentifier(LPDIRECTDRAW7, LPDDDEVICEIDENTIFIER2, DWORD); -HRESULT WINAPI Main_DirectDraw_CreateClipper (LPDIRECTDRAW7 iface, - DWORD dwFlags, - LPDIRECTDRAWCLIPPER *ppClipper, - IUnknown *pUnkOuter); +HRESULT WINAPI Main_DirectDraw_EnumSurfaces(LPDIRECTDRAW7, DWORD, LPDDSURFACEDESC2, LPVOID, + LPDDENUMSURFACESCALLBACK7); -HRESULT WINAPI Main_DirectDraw_CreatePalette (LPDIRECTDRAW7 iface, - DWORD dwFlags, - LPPALETTEENTRY palent, - LPDIRECTDRAWPALETTE* ppPalette, - LPUNKNOWN pUnkOuter); +HRESULT WINAPI Main_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7); +HRESULT WINAPI Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7, LPDDSURFACEDESC2); +HRESULT WINAPI Main_DirectDraw_GetSurfaceFromDC(LPDIRECTDRAW7, HDC, LPDIRECTDRAWSURFACE7 *); +HRESULT WINAPI Main_DirectDraw_GetCaps(LPDIRECTDRAW7, LPDDCAPS pDriverCaps, LPDDCAPS); +HRESULT WINAPI Main_DirectDraw_GetFourCCCodes(LPDIRECTDRAW7, LPDWORD pNumCodes, LPDWORD); +HRESULT WINAPI Main_DirectDraw_GetGDISurface(LPDIRECTDRAW7, LPDIRECTDRAWSURFACE7 *); +HRESULT WINAPI Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7, DWORD dwFlags, HANDLE); +HRESULT WINAPI Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7, LPDWORD); +HRESULT WINAPI Main_DirectDraw_GetScanLine(LPDIRECTDRAW7, LPDWORD); +HRESULT WINAPI Main_DirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW7, LPBOOL); +HRESULT WINAPI Main_DirectDraw_RestoreDisplayMode(LPDIRECTDRAW7); +HRESULT WINAPI Main_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7, HWND, DWORD); +HRESULT WINAPI Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7, DWORD, DWORD, DWORD, DWORD, DWORD); +HRESULT WINAPI Main_DirectDraw_RestoreAllSurfaces(LPDIRECTDRAW7 iface); +HRESULT WINAPI Main_DirectDraw_TestCooperativeLevel(LPDIRECTDRAW7 iface); -typedef struct -{ - /* Setup the Vtbl COM table */ - IDirectDraw7Vtbl* lpVtbl; - IDirectDraw4Vtbl* lpVtbl_v4; - IDirectDraw2Vtbl* lpVtbl_v2; - IDirectDrawVtbl* lpVtbl_v1; - - ULONG Ref; - - /* The main struct that contain all info from the HAL and HEL */ - HDC hdc; - DDRAWI_DIRECTDRAW_GBL mDDrawGlobal; - DDRAWI_DIRECTDRAW_LCL mDDrawLocal; - DDHALINFO mHALInfo; - - DDHAL_CALLBACKS mCallbacks; - DDHAL_DDEXEBUFCALLBACKS mD3dBufferCallbacks; - D3DHAL_CALLBACKS mD3dCallbacks; - D3DHAL_GLOBALDRIVERDATA mD3dDriverData; - - UINT mcModeInfos; - DDHALMODEINFO *mpModeInfos; - - UINT mcvmList; - VIDMEM *mpvmList; - - UINT mcFourCC; - DWORD *mpFourCC; - - UINT mcTextures; - DDSURFACEDESC *mpTextures; - - +ULONG WINAPI Main_DDrawSurface_AddRef(LPDIRECTDRAWSURFACE7); +ULONG WINAPI Main_DDrawSurface_Release(LPDIRECTDRAWSURFACE7); +HRESULT WINAPI Main_DDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7, REFIID, LPVOID*); +HRESULT WINAPI Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7, HDC); +HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7, LPRECT, LPDIRECTDRAWSURFACE7, LPRECT, DWORD, LPDDBLTFX); +HRESULT WINAPI Main_DDrawSurface_BltBatch(LPDIRECTDRAWSURFACE7, LPDDBLTBATCH, DWORD, DWORD); +HRESULT WINAPI Main_DDrawSurface_BltFast(LPDIRECTDRAWSURFACE7, DWORD, DWORD, LPDIRECTDRAWSURFACE7, LPRECT, DWORD); +HRESULT WINAPI Main_DDrawSurface_DeleteAttachedSurface(LPDIRECTDRAWSURFACE7, DWORD, LPDIRECTDRAWSURFACE7); +HRESULT WINAPI Main_DDrawSurface_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE7, LPVOID, LPDDENUMSURFACESCALLBACK7); +HRESULT WINAPI Main_DDrawSurface_EnumOverlayZOrders(LPDIRECTDRAWSURFACE7, DWORD, LPVOID,LPDDENUMSURFACESCALLBACK7); +HRESULT WINAPI Main_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 , LPDIRECTDRAWSURFACE7, DWORD); +HRESULT WINAPI Main_DDrawSurface_FreePrivateData(LPDIRECTDRAWSURFACE7, REFGUID); +HRESULT WINAPI Main_DDrawSurface_GetAttachedSurface(LPDIRECTDRAWSURFACE7, LPDDSCAPS2, LPDIRECTDRAWSURFACE7*); +HRESULT WINAPI Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7, DWORD dwFlags); +HRESULT WINAPI Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7, LPDDSCAPS2 pCaps); +HRESULT WINAPI Main_DDrawSurface_GetClipper(LPDIRECTDRAWSURFACE7, LPDIRECTDRAWCLIPPER*); +HRESULT WINAPI Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7, DWORD, LPDDCOLORKEY); +HRESULT WINAPI Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7, HDC *); +HRESULT WINAPI Main_DDrawSurface_GetDDInterface(LPDIRECTDRAWSURFACE7, LPVOID*); +HRESULT WINAPI Main_DDrawSurface_GetFlipStatus(LPDIRECTDRAWSURFACE7, DWORD); +HRESULT WINAPI Main_DDrawSurface_GetLOD(LPDIRECTDRAWSURFACE7, LPDWORD); +HRESULT WINAPI Main_DDrawSurface_GetOverlayPosition(LPDIRECTDRAWSURFACE7, LPLONG, LPLONG); +HRESULT WINAPI Main_DDrawSurface_GetPalette(LPDIRECTDRAWSURFACE7, LPDIRECTDRAWPALETTE*); +HRESULT WINAPI Main_DDrawSurface_GetPixelFormat(LPDIRECTDRAWSURFACE7, LPDDPIXELFORMAT); +HRESULT WINAPI Main_DDrawSurface_GetPriority(LPDIRECTDRAWSURFACE7, LPDWORD); +HRESULT WINAPI Main_DDrawSurface_GetPrivateData(LPDIRECTDRAWSURFACE7, REFGUID, LPVOID, LPDWORD); +HRESULT WINAPI Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7, LPDDSURFACEDESC2); +HRESULT WINAPI Main_DDrawSurface_GetUniquenessValue(LPDIRECTDRAWSURFACE7, LPDWORD); +HRESULT WINAPI Main_DDrawSurface_IsLost(LPDIRECTDRAWSURFACE7); +HRESULT WINAPI Main_DDrawSurface_PageLock(LPDIRECTDRAWSURFACE7, DWORD); +HRESULT WINAPI Main_DDrawSurface_PageUnlock(LPDIRECTDRAWSURFACE7, DWORD); +HRESULT WINAPI Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7, HDC); +HRESULT WINAPI Main_DDrawSurface_SetClipper (LPDIRECTDRAWSURFACE7, LPDIRECTDRAWCLIPPER); +HRESULT WINAPI Main_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7, DWORD, LPDDCOLORKEY); +HRESULT WINAPI Main_DDrawSurface_SetOverlayPosition (LPDIRECTDRAWSURFACE7, LONG, LONG); +HRESULT WINAPI Main_DDrawSurface_SetPalette (LPDIRECTDRAWSURFACE7, LPDIRECTDRAWPALETTE); +HRESULT WINAPI Main_DDrawSurface_SetPriority (LPDIRECTDRAWSURFACE7, DWORD); +HRESULT WINAPI Main_DDrawSurface_SetPrivateData (LPDIRECTDRAWSURFACE7, REFGUID, LPVOID, DWORD, DWORD); +HRESULT WINAPI Main_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7, DWORD); +HRESULT WINAPI Main_DDrawSurface_UpdateOverlayZOrder (LPDIRECTDRAWSURFACE7, DWORD, LPDIRECTDRAWSURFACE7); +HRESULT WINAPI Main_DDrawSurface_SetSurfaceDesc(LPDIRECTDRAWSURFACE7, DDSURFACEDESC2 *, DWORD); +HRESULT WINAPI Main_DDrawSurface_SetLOD(LPDIRECTDRAWSURFACE7, DWORD); +HRESULT WINAPI Main_DDrawSurface_Unlock (LPDIRECTDRAWSURFACE7, LPRECT); +HRESULT WINAPI Main_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7, LPDIRECTDRAW, LPDDSURFACEDESC2); +HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7, LPRECT, LPDDSURFACEDESC2, DWORD, HANDLE); +HRESULT WINAPI Main_DDrawSurface_Restore(LPDIRECTDRAWSURFACE7); +HRESULT WINAPI Main_DDrawSurface_UpdateOverlay (LPDIRECTDRAWSURFACE7, LPRECT, LPDIRECTDRAWSURFACE7, LPRECT, + DWORD, LPDDOVERLAYFX); - /* ExclusiveOwner */ - - DWORD cooperative_level; - +ULONG WINAPI DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface); +HRESULT WINAPI DirectDrawClipper_Initialize( LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD, DWORD dwFlags); - BOOL InitializeDraw; - /* HEL stuff */ - DWORD HELMemoryAvilable; +/* DirectDraw Object struct - /* DD Callbacks info */ - DDHAL_DESTROYDRIVERDATA mDdDestroyDriver; - DDHAL_CREATESURFACEDATA mDdCreateSurface; - DDHAL_SETCOLORKEYDATA mDdSetColorKey; - DDHAL_SETMODEDATA mDdSetMode; - DDHAL_WAITFORVERTICALBLANKDATA mDdWaitForVerticalBlank; - DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface; - DDHAL_CREATEPALETTEDATA mDdCreatePalette; - DDHAL_GETSCANLINEDATA mDdGetScanLine; - DDHAL_SETEXCLUSIVEMODEDATA mDdSetExclusiveMode; - DDHAL_FLIPTOGDISURFACEDATA mDdFlipToGDISurface; - - DDRAWI_DDRAWSURFACE_GBL mPrimaryGlobal; - - /* adding a switch */ - DWORD devicetype; - -} IDirectDrawImpl; - -/******** Surface Object ********/ -typedef struct -{ - /* Primarey surface we must reach it from every where */ + DDRAWI_DIRECTDRAW_INT + it is the the return pointer from ddraw.dll to the program - DDRAWI_DDRAWSURFACE_MORE mPrimaryMore; - DDRAWI_DDRAWSURFACE_LCL mPrimaryLocal; - DDRAWI_DDRAWSURFACE_LCL *mpPrimaryLocals[1]; - DDRAWI_DDRAWCLIPPER_LCL mPrimaryClipperLocal; - DDRAWI_DDRAWCLIPPER_GBL mPrimaryClipperGlobal; + DDRAWI_DIRECTDRAW_LCL + It is the program own private data - DDSURFACEDESC2 mddsdPrimary; - - DDRAWI_DDRAWSURFACE_LCL *mpInUseSurfaceLocals[1]; - - /* - AttachList We need getting surface pointer - of already create surface that have some private - data msdn ATTACHLIST can not provide all info - we need with our desgin therfor we are using - wine desgin for it - type IDirectDrawSurfaceImpl; - */ - DWORD* next_attached; - DWORD* first_attached; - DWORD* next_complex; - DWORD* first_complex; - DWORD* next; - DWORD* prev; - - /* Need be delete later */ - DDRAWI_DDRAWSURFACE_GBL mSurfGlobal; - DDRAWI_DDRAWSURFACE_MORE mSurfMore; - DDRAWI_DDRAWSURFACE_LCL mSurfLocal; - DDRAWI_DDRAWSURFACE_LCL *mpSurfLocals[1]; - DDRAWI_DDRAWCLIPPER_LCL mSurfClipperLocal; - DDRAWI_DDRAWCLIPPER_GBL mSurfClipperGlobal; - - DDRAWI_DDRAWSURFACE_GBL mOverlayGlobal; - DDRAWI_DDRAWSURFACE_LCL mOverlayLocal[6]; - DDRAWI_DDRAWSURFACE_LCL *mpOverlayLocals[6]; - DDRAWI_DDRAWSURFACE_MORE mOverlayMore[6]; - - DDSURFACEDESC mddsdOverlay; - -} DxSurf; - -typedef struct -{ - IDirectDrawSurface7Vtbl* lpVtbl; - IDirectDrawSurface3Vtbl* lpVtbl_v3; + DDRAWI_DIRECTDRAW_GBL + This struct is gboal for whole ddraw.dll for all program + it is static in ddraw if it change it change for all + program - IDirectDrawImpl* Owner; + The struct - DDRAWI_DDRAWSURFACE_GBL Global; - DDRAWI_DDRAWSURFACE_MORE More; - DDRAWI_DDRAWSURFACE_LCL Local; - DDRAWI_DDRAWSURFACE_LCL *pLocal[2]; - DDSURFACEDESC ddsd; + from http://msdn2.microsoft.com/en-us/library/ms898267.aspx + it was not document for windows 2000/xp/2003 but ms did document it + for windows ce 5.0 the link are to windows ce 5.0 arch - DxSurf *Surf; +typedef struct _DDRAWI_DIRECTDRAW_INT { + LPVOID lpVtbl; + LPDDRAWI_DIRECTDRAW_LCL lpLcl; + LPDDRAWI_DIRECTDRAW_INT lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DIRECTDRAW_INT; -} IDirectDrawSurfaceImpl; + rest of the struct are from msdn for windows 2000/xp/2003 +typedef struct _DDRAWI_DIRECTDRAW_LCL { + DWORD lpDDMore; + LPDDRAWI_DIRECTDRAW_GBL lpGbl; // fill it from function Create_DirectDraw with static pointer ddgbl + DWORD dwUnused0; + DWORD dwLocalFlags; + DWORD dwLocalRefCnt; + DWORD dwProcessId; + IUnknown FAR *pUnkOuter; + DWORD dwObsolete1; + ULONG_PTR hWnd; + ULONG_PTR hDC; // create HDC and save it to this pointer + DWORD dwErrorMode; + LPDDRAWI_DDRAWSURFACE_INT lpPrimary; + LPDDRAWI_DDRAWSURFACE_INT lpCB; + DWORD dwPreferredMode; + HINSTANCE hD3DInstance; + IUnknown FAR *pD3DIUnknown; + LPDDHAL_CALLBACKS lpDDCB; // same memory pointer as DDRAWI_DIRECTDRAW_GBL->lpDDCBtmp, setup by function StartDirectDraw + ULONG_PTR hDDVxd; + DWORD dwAppHackFlags; + ULONG_PTR hFocusWnd; + DWORD dwHotTracking; + DWORD dwIMEState; + ULONG_PTR hWndPopup; + ULONG_PTR hDD; + ULONG_PTR hGammaCalibrator; + LPDDGAMMACALIBRATORPROC lpGammaCalibrator; +} DDRAWI_DIRECTDRAW_LCL; + + +typedef struct _DDRAWI_DIRECTDRAW_GBL { + DWORD dwRefCnt; + DWORD dwFlags; + FLATPTR fpPrimaryOrig; + DDCORECAPS ddCaps; + DWORD dwInternal1; + DWORD dwUnused1[9]; + LPDDHAL_CALLBACKS lpDDCBtmp; + LPDDRAWI_DDRAWSURFACE_INT dsList; + LPDDRAWI_DDRAWPALETTE_INT palList; + LPDDRAWI_DDRAWCLIPPER_INT clipperList; + LPDDRAWI_DIRECTDRAW_GBL lp16DD; // pointer to it self (DDRAWI_DIRECTDRAW_GBL) + DWORD dwMaxOverlays; + DWORD dwCurrOverlays; + DWORD dwMonitorFrequency; + DDCORECAPS ddHELCaps; + DWORD dwUnused2[50]; + DDCOLORKEY ddckCKDestOverlay; + DDCOLORKEY ddckCKSrcOverlay; + VIDMEMINFO vmiData; + LPVOID lpDriverHandle; + LPDDRAWI_DIRECTDRAW_LCL lpExclusiveOwner; + DWORD dwModeIndex; + DWORD dwModeIndexOrig; + DWORD dwNumFourCC; + DWORD FAR *lpdwFourCC; + DWORD dwNumModes; + LPDDHALMODEINFO lpModeInfo; + PROCESS_LIST plProcessList; + DWORD dwSurfaceLockCount; + DWORD dwAliasedLockCnt; + ULONG_PTR dwReserved3; + ULONG_PTR hDD; // GdiEntry1 are filling this pointer + char cObsolete[12]; + DWORD dwReserved1; + DWORD dwReserved2; + DBLNODE dbnOverlayRoot; + volatile LPWORD lpwPDeviceFlags; + DWORD dwPDevice; + DWORD dwWin16LockCnt; + DWORD dwUnused3; + DWORD hInstance; + DWORD dwEvent16; + DWORD dwSaveNumModes; + ULONG_PTR lpD3DGlobalDriverData; + ULONG_PTR lpD3DHALCallbacks; + DDCORECAPS ddBothCaps; + LPDDVIDEOPORTCAPS lpDDVideoPortCaps; + LPDDRAWI_DDVIDEOPORT_INT dvpList; + ULONG_PTR lpD3DHALCallbacks2; + RECT rectDevice; + DWORD cMonitors; + LPVOID gpbmiSrc; + LPVOID gpbmiDest; + LPHEAPALIASINFO phaiHeapAliases; + ULONG_PTR hKernelHandle; + ULONG_PTR pfnNotifyProc; + LPDDKERNELCAPS lpDDKernelCaps; + LPDDNONLOCALVIDMEMCAPS lpddNLVCaps; + LPDDNONLOCALVIDMEMCAPS lpddNLVHELCaps; + LPDDNONLOCALVIDMEMCAPS lpddNLVBothCaps; + ULONG_PTR lpD3DExtendedCaps; + DWORD dwDOSBoxEvent; + RECT rectDesktop; + char cDriverName[MAX_DRIVER_NAME]; + ULONG_PTR lpD3DHALCallbacks3; + DWORD dwNumZPixelFormats; + LPDDPIXELFORMAT lpZPixelFormats; + LPDDRAWI_DDMOTIONCOMP_INT mcList; + DWORD hDDVxd; + DDSCAPSEX ddsCapsMore; +} DDRAWI_DIRECTDRAW_GBL; + + +*/ + + +/* Clipper Object struct + DDRAWI_DDRAWCLIPPER_INT + it is the the return pointer from ddraw.dll to the program + + DDRAWI_DDRAWCLIPPER_LCL + It is the program own private data + + DDRAWI_DDRAWCLIPPER_GBL + This struct is gboal for whole ddraw.dll for all program + it is static in ddraw if it change it change for all + program + + The struct + +typedef struct _DDRAWI_DDRAWCLIPPER_INT { + LPVOID lpVtbl; + LPDDRAWI_DDRAWCLIPPER_LCL lpLcl; + LPDDRAWI_DDRAWCLIPPER_INT lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDRAWCLIPPER_INT; + +typedef struct _DDRAWI_DDRAWCLIPPER_LCL { + DWORD lpClipMore; + LPDDRAWI_DDRAWCLIPPER_GBL lpGbl; + LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; + DWORD dwLocalRefCnt; + IUnknown FAR *pUnkOuter; + LPDDRAWI_DIRECTDRAW_INT lpDD_int; + ULONG_PTR dwReserved1; + IUnknown *pAddrefedThisOwner; +} DDRAWI_DDRAWCLIPPER_LCL; + +typedef struct _DDRAWI_DDRAWCLIPPER_GBL { + DWORD dwRefCnt; + DWORD dwFlags; + LPDDRAWI_DIRECTDRAW_GBL lpDD; + DWORD dwProcessId; + ULONG_PTR dwReserved1; + ULONG_PTR hWnd; + LPRGNDATA lpStaticClipList; +} DDRAWI_DDRAWCLIPPER_GBL; +*/ +/* +typedef struct _DDRAWI_DDRAWPALETTE_INT { + LPVOID lpVtbl; + LPDDRAWI_DDRAWPALETTE_LCL lpLcl; + LPDDRAWI_DDRAWPALETTE_INT lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDRAWPALETTE_INT; + +typedef struct _DDRAWI_DDRAWPALETTE_LCL { + DWORD lpPalMore; + LPDDRAWI_DDRAWPALETTE_GBL lpGbl; + ULONG_PTR dwUnused0; + DWORD dwLocalRefCnt; + IUnknown FAR *pUnkOuter; + LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; + ULONG_PTR dwReserved1; + ULONG_PTR dwDDRAWReserved1; + ULONG_PTR dwDDRAWReserved2; + ULONG_PTR dwDDRAWReserved3; +} DDRAWI_DDRAWPALETTE_LCL; + +typedef struct _DDRAWI_DDRAWPALETTE_GBL { + DWORD dwRefCnt; + DWORD dwFlags; + LPDDRAWI_DIRECTDRAW_LCL lpDD_lcl; + DWORD dwProcessId; + LPPALETTEENTRY lpColorTable; + union { + ULONG_PTR dwReserved1; + HPALETTE hHELGDIPalette; + }; + DWORD dwDriverReserved; + DWORD dwContentsStamp; + DWORD dwSaveStamp; + DWORD dwHandle; +} DDRAWI_DDRAWPALETTE_GBL; +*/ + +/* +typedef struct _DDRAWI_DDVIDEOPORT_INT { + LPVOID lpVtbl; + LPDDRAWI_DDVIDEOPORT_LCL lpLcl; + LPDDRAWI_DDVIDEOPORT_INT lpLink; + DWORD dwIntRefCnt; + DWORD dwFlags; +} DDRAWI_DDVIDEOPORT_INT; + +typedef struct _DDRAWI_DDVIDEOPORT_LCL { + LPDDRAWI_DIRECTDRAW_LCL lpDD; + DDVIDEOPORTDESC ddvpDesc; + DDVIDEOPORTINFO ddvpInfo; + LPDDRAWI_DDRAWSURFACE_INT lpSurface; + LPDDRAWI_DDRAWSURFACE_INT lpVBISurface; + LPDDRAWI_DDRAWSURFACE_INT *lpFlipInts; + DWORD dwNumAutoflip; + DWORD dwProcessID; + DWORD dwStateFlags; + DWORD dwFlags; + DWORD dwRefCnt; + FLATPTR fpLastFlip; + ULONG_PTR dwReserved1; + ULONG_PTR dwReserved2; + HANDLE hDDVideoPort; + DWORD dwNumVBIAutoflip; + LPDDVIDEOPORTDESC lpVBIDesc; + LPDDVIDEOPORTDESC lpVideoDesc; + LPDDVIDEOPORTINFO lpVBIInfo; + LPDDVIDEOPORTINFO lpVideoInfo; + DWORD dwVBIProcessID; +} DDRAWI_DDVIDEOPORT_LCL; -/******** Clipper Object ********/ +Surface +typedef struct _DDRAWI_DDRAWSURFACE_GBL { + DWORD dwRefCnt; + DWORD dwGlobalFlags; + union { + LPACCESSRECTLIST lpRectList; + DWORD dwBlockSizeY; + }; + union { + LPVMEMHEAP lpVidMemHeap; + DWORD dwBlockSizeX; + }; + union { + LPDDRAWI_DIRECTDRAW_GBL lpDD; + LPVOID lpDDHandle; + }; + FLATPTR fpVidMem; + union { + LONG lPitch; + DWORD dwLinearSize; + }; + WORD wHeight; + WORD wWidth; + DWORD dwUsageCount; + ULONG_PTR dwReserved1; + DDPIXELFORMAT ddpfSurface; +} DDRAWI_DDRAWSURFACE_GBL; -typedef struct +*/ + + +/* This comment info maybe is wrong + bare in mind I am using logic thinking + for follow info does not exists in MSDN + so I am drawing clude how previews stuffs + works that are document in MSDN/DDK + +follow struct should exists ??? +DDRAWI_DDVIDEOPORT_GBL +DDRAWI_DDGAMMACONTROL_INT +DDRAWI_DDGAMMACONTROL_LCL +DDRAWI_DDGAMMACONTROL_GBL +DDRAWI_DDCOLORCONTROL_INT +DDRAWI_DDCOLORCONTROL_LCL +DDRAWI_DDCOLORCONTROL_GBL +DDRAWI_KERNEL_INT +DDRAWI_KERNEL_LCL +DDRAWI_KERNEL_GBL +DDRAWI_DDKERNELSURFACE_INT +DDRAWI_DDKERNELSURFACE_LCL +DDRAWI_DDKERNELSURFACE_GBL + +follow struct can be easy create +DDRAWI_DDGAMMACONTROL_INT +DDRAWI_DDCOLORCONTROL_INT +DDRAWI_KERNEL_INT + +the DDRAWI_DDGAMMACONTROL_INT should looking like this +typedef struct _DDRAWI_DDGAMMACONTROL_INT { - IDirectDrawClipperVtbl* lpVtbl; - LONG ref; + LPVOID lpVtbl; + LPDDRAWI_DDGAMMACONTROL_LCL lpLcl; + LPDDRAWI_DDGAMMACONTROL_INT lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDGAMMACONTROL_INT, *LPDDRAWI_DDGAMMACONTROL_INT - IDirectDrawImpl* owner; - -} IDirectDrawClipperImpl; - -/******** Palette Object ********/ - -typedef struct +how did I got this struct I looked at all other INT struct how they where +build. But it is not 100% sure this one is right untill I/we known how +the DDRAWI_DDGAMMACONTROL_LCL works and DDRAWI_DDCOLORCONTROL_GBL +our internal struct will look like this +typedef struct _DDRAWI_DDGAMMACONTROL_INT { - IDirectDrawPaletteVtbl* lpVtbl; - - IDirectDrawImpl* owner; - DDRAWI_DDRAWPALETTE_GBL DDPalette; -} IDirectDrawPaletteImpl; + LPVOID lpVtbl; + LPVOID lpLcl; + LPVOID lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDGAMMACONTROL_INT, *LPDDRAWI_DDGAMMACONTROL_INT -/******** Gamma Object ********/ +same goes for DDRAWI_DDCOLORCONTROL_INT -typedef struct +typedef struct DDRAWI_DDCOLORCONTROL_INT { - IDirectDrawGammaControlVtbl* lpVtbl; - LONG ref; - IDirectDrawImpl* Owner; - IDirectDrawSurfaceImpl* Surf; + LPVOID lpVtbl; + LPVOID lpLcl; + LPVOID lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDCOLORCONTROL_INT, *LPDDRAWI_DDCOLORCONTROL_INT +*/ - -} IDirectDrawGammaImpl; - -/******** Color Object ********/ - -typedef struct +typedef struct DDRAWI_DDCOLORCONTROL_INT { - IDirectDrawColorControlVtbl* lpVtbl; - LONG ref; - IDirectDrawImpl* Owner; - IDirectDrawSurfaceImpl* Surf; + LPVOID lpVtbl; + LPVOID lpLcl; + LPVOID lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDCOLORCONTROL_INT, *LPDDRAWI_DDCOLORCONTROL_INT; -} IDirectDrawColorImpl; - -/******** Kernel Object ********/ - -typedef struct +typedef struct _DDRAWI_DDGAMMACONTROL_INT { - IDirectDrawKernelVtbl* lpVtbl; - LONG ref; - IDirectDrawImpl* Owner; - IDirectDrawSurfaceImpl* Surf; + LPVOID lpVtbl; + LPVOID lpLcl; + LPVOID lpLink; + DWORD dwIntRefCnt; +} DDRAWI_DDGAMMACONTROL_INT, *LPDDRAWI_DDGAMMACONTROL_INT; -} IDirectDrawKernelImpl; - -/******** SurfaceKernel Object ********/ - -typedef struct +typedef struct _DDRAWI_DDKERNEL_INT { - IDirectDrawSurfaceKernelVtbl* lpVtbl; - LONG ref; - IDirectDrawImpl* Owner; - IDirectDrawSurfaceImpl* Surf; - IDirectDrawKernelImpl * Kernl; + LPVOID lpVtbl; + LPVOID lpLcl; + LPVOID lpLink; + DWORD dwIntRefCnt; +} DDRAWI_KERNEL_INT, *LPDDRAWI_KERNEL_INT; + +typedef struct _DDRAWI_DDKERNELSURFACE_INT +{ + LPVOID lpVtbl; + LPVOID lpLcl; + LPVOID lpLink; + DWORD dwIntRefCnt; +} _DDRAWI_DDKERNELSURFACE_INT, *LPDDRAWI_DDKERNELSURFACE_INT; + +/* now to real info that are for private use and are our own */ -} IDirectDrawSurfaceKernelImpl; /*********** VTables ************/ + +extern IDirectDrawVtbl DirectDraw_Vtable; +extern IDirectDraw2Vtbl DirectDraw2_Vtable; +extern IDirectDraw4Vtbl DirectDraw4_Vtable; extern IDirectDraw7Vtbl DirectDraw7_Vtable; -extern IDirectDrawVtbl DDRAW_IDirectDraw_VTable; -extern IDirectDraw2Vtbl DDRAW_IDirectDraw2_VTable; -extern IDirectDraw4Vtbl DDRAW_IDirectDraw4_VTable; + extern IDirectDrawSurface7Vtbl DirectDrawSurface7_Vtable; -extern IDirectDrawSurface3Vtbl DDRAW_IDDS3_Thunk_VTable; +extern IDirectDrawSurface3Vtbl DirectDrawSurface3_VTable; extern IDirectDrawPaletteVtbl DirectDrawPalette_Vtable; extern IDirectDrawClipperVtbl DirectDrawClipper_Vtable; @@ -265,6 +519,12 @@ extern IDirectDrawKernelVtbl DirectDrawKernel_Vtable; extern IDirectDrawSurfaceKernelVtbl DirectDrawSurfaceKernel_Vtable; /********* Prototypes **********/ +HRESULT WINAPI Main_DDrawSurface_AddAttachedSurface(LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAWSURFACE7 pAttach); +HRESULT WINAPI Main_DDrawSurface_AddOverlayDirtyRect(LPDIRECTDRAWSURFACE7 iface, LPRECT pRect); +HRESULT WINAPI Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface, LPDDSURFACEDESC2 pDDSD); +HRESULT WINAPI Main_DirectDraw_EnumDisplayModes(LPDIRECTDRAW7 iface, DWORD dwFlags, LPDDSURFACEDESC2 pDDSD, LPVOID context, LPDDENUMMODESCALLBACK2 callback); +HRESULT WINAPI Main_DDrawSurface_SetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface, DDSURFACEDESC2 *DDSD, DWORD Flags); + HRESULT WINAPI Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps, LPDWORD total, LPDWORD free); diff --git a/reactos/dll/directx/ddraw/soft/surface_hel.c b/reactos/dll/directx/ddraw/soft/surface_hel.c deleted file mode 100644 index 79636d8b86a..00000000000 --- a/reactos/dll/directx/ddraw/soft/surface_hel.c +++ /dev/null @@ -1,59 +0,0 @@ -/* $Id$ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS - * FILE: lib/ddraw/soft/surface.c - * PURPOSE: DirectDraw Software Implementation - * PROGRAMMER: Magnus Olsen, Maarten Bosma - * - */ - -#include "../rosdraw.h" - - - - -HRESULT Hel_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst, - LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx) -{ - DX_STUB; -} - -HRESULT Hel_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURFACEDESC2 - pDDSD, DWORD flags, HANDLE event) -{ - DX_STUB; -} - -HRESULT Hel_DDrawSurface_Unlock(LPDIRECTDRAWSURFACE7 iface, LPRECT pRect) -{ - DX_STUB; -} - -HRESULT Hel_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAWSURFACE7 override, DWORD dwFlags) -{ - DX_STUB; -} - -HRESULT Hel_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags, LPDDCOLORKEY pCKey) -{ - DX_STUB; -} - -HRESULT Hel_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags) -{ - DX_STUB; -} - -HRESULT Hel_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags) -{ - DX_STUB; -} - - - - - - - - diff --git a/reactos/dll/directx/ddraw/startup.c b/reactos/dll/directx/ddraw/startup.c index ed36a202241..26ca6fda3b0 100644 --- a/reactos/dll/directx/ddraw/startup.c +++ b/reactos/dll/directx/ddraw/startup.c @@ -12,11 +12,14 @@ #include "rosdraw.h" #include "d3dhal.h" +DDRAWI_DIRECTDRAW_GBL ddgbl; +DDRAWI_DDRAWSURFACE_GBL ddSurfGbl; + HRESULT WINAPI -StartDirectDraw(LPDIRECTDRAW* iface) +StartDirectDraw(LPDIRECTDRAW* iface, LPGUID lpGuid) { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; DWORD hal_ret; DWORD hel_ret; DEVMODE devmode; @@ -24,22 +27,27 @@ StartDirectDraw(LPDIRECTDRAW* iface) const UINT bmiSize = sizeof(BITMAPINFOHEADER) + 0x10; UCHAR *pbmiData; BITMAPINFO *pbmi; - DWORD *pMasks; - DWORD Flags; + DWORD *pMasks; + INT devicetypes = 0; DX_WINDBG_trace(); - RtlZeroMemory(&This->mDDrawGlobal, sizeof(DDRAWI_DIRECTDRAW_GBL)); + RtlZeroMemory(&ddgbl, sizeof(DDRAWI_DIRECTDRAW_GBL)); + + ddgbl.lpDDCBtmp = (LPDDHAL_CALLBACKS) DxHeapMemAlloc(sizeof(DDHAL_CALLBACKS)); + if (ddgbl.lpDDCBtmp == NULL) + { + DX_STUB_str("Out of memmory"); + return DD_FALSE; + } + + This->lpLcl->lpDDCB = ddgbl.lpDDCBtmp; - /* cObsolete is undoc in msdn it being use in CreateDCA */ - RtlCopyMemory(&This->mDDrawGlobal.cObsolete,&"DISPLAY",7); - RtlCopyMemory(&This->mDDrawGlobal.cDriverName,&"DISPLAY",7); /* Same for HEL and HAL */ - This->mcModeInfos = 1; - This->mpModeInfos = (DDHALMODEINFO*) DxHeapMemAlloc(This->mcModeInfos * sizeof(DDHALMODEINFO)); - - if (This->mpModeInfos == NULL) + This->lpLcl->lpGbl->lpModeInfo = (DDHALMODEINFO*) DxHeapMemAlloc(1 * sizeof(DDHALMODEINFO)); + + if (This->lpLcl->lpGbl->lpModeInfo == NULL) { DX_STUB_str("DD_FALSE"); return DD_FALSE; @@ -47,37 +55,68 @@ StartDirectDraw(LPDIRECTDRAW* iface) EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &devmode); - This->mpModeInfos[0].dwWidth = devmode.dmPelsWidth; - This->mpModeInfos[0].dwHeight = devmode.dmPelsHeight; - This->mpModeInfos[0].dwBPP = devmode.dmBitsPerPel; - This->mpModeInfos[0].lPitch = (devmode.dmPelsWidth*devmode.dmBitsPerPel)/8; - This->mpModeInfos[0].wRefreshRate = (WORD)devmode.dmDisplayFrequency; + This->lpLcl->lpGbl->lpModeInfo[0].dwWidth = devmode.dmPelsWidth; + This->lpLcl->lpGbl->lpModeInfo[0].dwHeight = devmode.dmPelsHeight; + This->lpLcl->lpGbl->lpModeInfo[0].dwBPP = devmode.dmBitsPerPel; + This->lpLcl->lpGbl->lpModeInfo[0].lPitch = (devmode.dmPelsWidth*devmode.dmBitsPerPel)/8; + This->lpLcl->lpGbl->lpModeInfo[0].wRefreshRate = (WORD)devmode.dmDisplayFrequency; - if ( This->devicetype <3 ) - { - /* Create HDC for default, hal and hel driver */ - This->hdc = CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL); + + if (lpGuid == NULL) + { + devicetypes = 1; + + /* Create HDC for default, hal and hel driver */ + This->lpLcl->hDC = (ULONG_PTR) CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL); + + /* cObsolete is undoc in msdn it being use in CreateDCA */ + RtlCopyMemory(&ddgbl.cObsolete,&"DISPLAY",7); + RtlCopyMemory(&ddgbl.cDriverName,&"DISPLAY",7); + } + + else if (lpGuid == (LPGUID) DDCREATE_HARDWAREONLY) + { + devicetypes = 2; + + /* Create HDC for default, hal and hel driver */ + This->lpLcl->hDC = (ULONG_PTR)CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL); + + /* cObsolete is undoc in msdn it being use in CreateDCA */ + RtlCopyMemory(&ddgbl.cObsolete,&"DISPLAY",7); + RtlCopyMemory(&ddgbl.cDriverName,&"DISPLAY",7); + } + + else if (lpGuid == (LPGUID) DDCREATE_EMULATIONONLY) + { + devicetypes = 3; + + /* Create HDC for default, hal and hel driver */ + This->lpLcl->hDC = (ULONG_PTR) CreateDCW(L"DISPLAY",L"DISPLAY",NULL,NULL); + + /* cObsolete is undoc in msdn it being use in CreateDCA */ + RtlCopyMemory(&ddgbl.cObsolete,&"DISPLAY",7); + RtlCopyMemory(&ddgbl.cDriverName,&"DISPLAY",7); } else { /* FIXME : need getting driver from the GUID that have been pass in from the register. we do not support that yet */ - This->hdc = NULL ; + devicetypes = 4; + This->lpLcl->hDC = (ULONG_PTR) NULL ; } - - if (This->hdc == NULL) + if ( (HDC)This->lpLcl->hDC == NULL) { DX_STUB_str("DDERR_OUTOFMEMORY"); return DDERR_OUTOFMEMORY ; } - hbmp = CreateCompatibleBitmap(This->hdc, 1, 1); + hbmp = CreateCompatibleBitmap((HDC) This->lpLcl->hDC, 1, 1); if (hbmp==NULL) { - DxHeapMemFree(This->mpModeInfos); - DeleteDC(This->hdc); + DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo); + DeleteDC((HDC) This->lpLcl->hDC); DX_STUB_str("DDERR_OUTOFMEMORY"); return DDERR_OUTOFMEMORY; } @@ -87,8 +126,8 @@ StartDirectDraw(LPDIRECTDRAW* iface) if (pbmiData==NULL) { - DxHeapMemFree(This->mpModeInfos); - DeleteDC(This->hdc); + DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo); + DeleteDC((HDC) This->lpLcl->hDC); DeleteObject(hbmp); DX_STUB_str("DDERR_OUTOFMEMORY"); return DDERR_OUTOFMEMORY; @@ -100,28 +139,24 @@ StartDirectDraw(LPDIRECTDRAW* iface) pbmi->bmiHeader.biWidth = 1; pbmi->bmiHeader.biHeight = 1; - GetDIBits(This->hdc, hbmp, 0, 0, NULL, pbmi, 0); + GetDIBits((HDC) This->lpLcl->hDC, hbmp, 0, 0, NULL, pbmi, 0); DeleteObject(hbmp); pMasks = (DWORD*)(pbmiData + sizeof(BITMAPINFOHEADER)); - This->mpModeInfos[0].dwRBitMask = pMasks[0]; - This->mpModeInfos[0].dwGBitMask = pMasks[1]; - This->mpModeInfos[0].dwBBitMask = pMasks[2]; - This->mpModeInfos[0].dwAlphaBitMask = pMasks[3]; + This->lpLcl->lpGbl->lpModeInfo[0].dwRBitMask = pMasks[0]; + This->lpLcl->lpGbl->lpModeInfo[0].dwGBitMask = pMasks[1]; + This->lpLcl->lpGbl->lpModeInfo[0].dwBBitMask = pMasks[2]; + This->lpLcl->lpGbl->lpModeInfo[0].dwAlphaBitMask = pMasks[3]; DxHeapMemFree(pbmiData); /* Startup HEL and HAL */ - RtlZeroMemory(&This->mDDrawGlobal, sizeof(DDRAWI_DIRECTDRAW_GBL)); - RtlZeroMemory(&This->mHALInfo, sizeof(DDHALINFO)); - RtlZeroMemory(&This->mCallbacks, sizeof(DDHAL_CALLBACKS)); + // RtlZeroMemory(&ddgbl, sizeof(DDRAWI_DIRECTDRAW_GBL)); + + This->lpLcl->lpDDCB = This->lpLcl->lpGbl->lpDDCBtmp; + This->lpLcl->dwProcessId = GetCurrentProcessId(); - This->mDDrawLocal.lpDDCB = &This->mCallbacks; - This->mDDrawLocal.lpGbl = &This->mDDrawGlobal; - This->mDDrawLocal.dwProcessId = GetCurrentProcessId(); - - This->mDDrawGlobal.lpDDCBtmp = &This->mCallbacks; - This->mDDrawGlobal.lpExclusiveOwner = &This->mDDrawLocal; + hal_ret = StartDirectDrawHal(iface); hel_ret = StartDirectDrawHel(iface); @@ -131,101 +166,16 @@ StartDirectDraw(LPDIRECTDRAW* iface) return DDERR_NODIRECTDRAWSUPPORT; } - /* - Setup HEL or HAL for DD_CALLBACKS - */ - - This->mDdCanCreateSurface.lpDD = &This->mDDrawGlobal; - This->mDdCreatePalette.lpDD = &This->mDDrawGlobal; - This->mDdCreateSurface.lpDD = &This->mDDrawGlobal; - This->mDdFlipToGDISurface.lpDD = &This->mDDrawGlobal; - This->mDdDestroyDriver.lpDD = &This->mDDrawGlobal; - This->mDdGetScanLine.lpDD = &This->mDDrawGlobal; - This->mDdSetExclusiveMode.lpDD = &This->mDDrawGlobal; - This->mDdSetMode.lpDD = &This->mDDrawGlobal; - This->mDdWaitForVerticalBlank.lpDD = &This->mDDrawGlobal; - This->mDdSetColorKey.lpDD = &This->mDDrawGlobal; - - if (This->devicetype!=1) - { - /* both or only hel */ - This->mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HELDD.CanCreateSurface; - This->mDdCreatePalette.CreatePalette = This->mCallbacks.HELDD.CreatePalette; - This->mDdCreateSurface.CreateSurface = This->mCallbacks.HELDD.CreateSurface; - This->mDdDestroyDriver.DestroyDriver = This->mCallbacks.HELDD.DestroyDriver; - This->mDdFlipToGDISurface.FlipToGDISurface = This->mCallbacks.HELDD.FlipToGDISurface; - This->mDdGetScanLine.GetScanLine = This->mCallbacks.HELDD.GetScanLine; - This->mDdSetExclusiveMode.SetExclusiveMode = This->mCallbacks.HELDD.SetExclusiveMode; - This->mDdSetMode.SetMode = This->mCallbacks.HELDD.SetMode; - This->mDdWaitForVerticalBlank.WaitForVerticalBlank = This->mCallbacks.HELDD.WaitForVerticalBlank; - // This->mDdSetColorKey.SetColorKey = This->mCallbacks.HELDD.SetColorKey; - } - - if (This->devicetype!=2) - { - Flags = This->mDDrawGlobal.lpDDCBtmp->HALDD.dwFlags; - if (Flags & DDHAL_CB32_CANCREATESURFACE) - { - This->mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface; - } - - if (Flags & DDHAL_CB32_CREATEPALETTE) - { - This->mDdCreatePalette.CreatePalette = This->mCallbacks.HALDD.CreatePalette; - } - - if (Flags & DDHAL_CB32_CREATESURFACE) - { - This->mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface; - } - - if (Flags & DDHAL_CB32_DESTROYDRIVER) - { - This->mDdDestroyDriver.DestroyDriver = This->mCallbacks.HALDD.DestroyDriver; - } - - if (Flags & DDHAL_CB32_FLIPTOGDISURFACE) - { - This->mDdFlipToGDISurface.FlipToGDISurface = This->mCallbacks.HALDD.FlipToGDISurface; - } - - if (Flags & DDHAL_CB32_GETSCANLINE) - { - This->mDdGetScanLine.GetScanLine = This->mCallbacks.HALDD.GetScanLine; - } - - if (Flags & DDHAL_CB32_SETEXCLUSIVEMODE) - { - This->mDdSetExclusiveMode.SetExclusiveMode = This->mCallbacks.HALDD.SetExclusiveMode; - } - - if (Flags & DDHAL_CB32_SETMODE) - { - This->mDdSetMode.SetMode = This->mCallbacks.HALDD.SetMode; - } - - if (Flags & DDHAL_CB32_WAITFORVERTICALBLANK) - { - This->mDdWaitForVerticalBlank.WaitForVerticalBlank = This->mCallbacks.HALDD.WaitForVerticalBlank; - } + This->lpLcl->hDD = This->lpLcl->lpGbl->hDD; - if (Flags & DDHAL_CB32_SETCOLORKEY) - { - // This->mDdSetColorKey.SetColorKey = This->mCallbacks.HALDD.SetColorKey; - } - } - /* - Setup HEL or HAL for SURFACE CALLBACK - */ + /* Fixme the mix betwin hel and hal */ - // FIXME - - /* Setup calback struct so we do not need refill same info again */ - This->mDdCreateSurface.lpDD = &This->mDDrawGlobal; - This->mDdCanCreateSurface.lpDD = &This->mDDrawGlobal; - - This->mDDrawLocal.lpGbl = &This->mDDrawGlobal; + + /* Fill some basic info for Surface */ + ddSurfGbl.lpDD = &ddgbl; + + return DD_OK; } @@ -233,30 +183,46 @@ StartDirectDraw(LPDIRECTDRAW* iface) HRESULT WINAPI StartDirectDrawHal(LPDIRECTDRAW* iface) { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; DDHAL_GETDRIVERINFODATA DriverInfo; + DDHALINFO mHALInfo; + DDHAL_CALLBACKS mCallbacks; + DDHAL_DDEXEBUFCALLBACKS mD3dBufferCallbacks; + D3DHAL_CALLBACKS mD3dCallbacks; + D3DHAL_GLOBALDRIVERDATA mD3dDriverData; + UINT mcvmList; + VIDMEM *mpvmList; + + UINT mcFourCC; + DWORD *mpFourCC; + UINT mcTextures; + DDSURFACEDESC *mpTextures; + /* HAL Startup process */ BOOL newmode = FALSE; + RtlZeroMemory(&mHALInfo, sizeof(DDHALINFO)); + RtlZeroMemory(&mCallbacks, sizeof(DDHAL_CALLBACKS)); + /* Startup DX HAL step one of three */ - if (!DdCreateDirectDrawObject(&This->mDDrawGlobal, This->hdc)) + if (!DdCreateDirectDrawObject(This->lpLcl->lpGbl, (HDC)This->lpLcl->hDC)) { - DxHeapMemFree(This->mpModeInfos); - DeleteDC(This->hdc); + DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo); + DeleteDC((HDC)This->lpLcl->hDC); return DD_FALSE; } // Do not relase HDC it have been map in kernel mode // DeleteDC(hdc); - if (!DdReenableDirectDrawObject(&This->mDDrawGlobal, &newmode)) + if (!DdReenableDirectDrawObject(This->lpLcl->lpGbl, &newmode)) { - DxHeapMemFree(This->mpModeInfos); - DeleteDC(This->hdc); + DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo); + DeleteDC((HDC)This->lpLcl->hDC); return DD_FALSE; } @@ -265,80 +231,80 @@ StartDirectDrawHal(LPDIRECTDRAW* iface) Startup DX HAL step two of three */ - if (!DdQueryDirectDrawObject(&This->mDDrawGlobal, - &This->mHALInfo, - &This->mCallbacks.HALDD, - &This->mCallbacks.HALDDSurface, - &This->mCallbacks.HALDDPalette, - &This->mD3dCallbacks, - &This->mD3dDriverData, - &This->mD3dBufferCallbacks, + if (!DdQueryDirectDrawObject(This->lpLcl->lpGbl, + &mHALInfo, + &mCallbacks.HALDD, + &mCallbacks.HALDDSurface, + &mCallbacks.HALDDPalette, + &mD3dCallbacks, + &mD3dDriverData, + &mD3dBufferCallbacks, NULL, NULL, NULL)) { - DxHeapMemFree(This->mpModeInfos); - DeleteDC(This->hdc); + DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo); + DeleteDC((HDC)This->lpLcl->hDC); // FIXME Close DX fristcall and second call return DD_FALSE; } - This->mcvmList = This->mHALInfo.vmiData.dwNumHeaps; - This->mpvmList = (VIDMEM*) DxHeapMemAlloc(sizeof(VIDMEM) * This->mcvmList); - if (This->mpvmList == NULL) + mcvmList = mHALInfo.vmiData.dwNumHeaps; + mpvmList = (VIDMEM*) DxHeapMemAlloc(sizeof(VIDMEM) * mcvmList); + if (mpvmList == NULL) { - DxHeapMemFree(This->mpModeInfos); - DeleteDC(This->hdc); + DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo); + DeleteDC((HDC)This->lpLcl->hDC); // FIXME Close DX fristcall and second call return DD_FALSE; } - This->mcFourCC = This->mHALInfo.ddCaps.dwNumFourCCCodes; - This->mpFourCC = (DWORD *) DxHeapMemAlloc(sizeof(DWORD) * This->mcFourCC); - if (This->mpFourCC == NULL) + mcFourCC = mHALInfo.ddCaps.dwNumFourCCCodes; + mpFourCC = (DWORD *) DxHeapMemAlloc(sizeof(DWORD) * mcFourCC); + if (mpFourCC == NULL) { - DxHeapMemFree(This->mpvmList); - DxHeapMemFree(This->mpModeInfos); - DeleteDC(This->hdc); + DxHeapMemFree(mpvmList); + DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo); + DeleteDC((HDC)This->lpLcl->hDC); // FIXME Close DX fristcall and second call return DD_FALSE; } - This->mcTextures = This->mD3dDriverData.dwNumTextureFormats; - This->mpTextures = (DDSURFACEDESC*) DxHeapMemAlloc(sizeof(DDSURFACEDESC) * This->mcTextures); - if (This->mpTextures == NULL) + mcTextures = mD3dDriverData.dwNumTextureFormats; + mpTextures = (DDSURFACEDESC*) DxHeapMemAlloc(sizeof(DDSURFACEDESC) * mcTextures); + if (mpTextures == NULL) { - DxHeapMemFree( This->mpFourCC); - DxHeapMemFree( This->mpvmList); - DxHeapMemFree( This->mpModeInfos); - DeleteDC(This->hdc); + DxHeapMemFree( mpFourCC); + DxHeapMemFree( mpvmList); + DxHeapMemFree( This->lpLcl->lpGbl->lpModeInfo); + DeleteDC((HDC)This->lpLcl->hDC); // FIXME Close DX fristcall and second call return DD_FALSE; } - This->mHALInfo.vmiData.pvmList = This->mpvmList; - This->mHALInfo.lpdwFourCC = This->mpFourCC; - This->mD3dDriverData.lpTextureFormats = (DDSURFACEDESC*) This->mpTextures; + mHALInfo.vmiData.pvmList = mpvmList; + mHALInfo.lpdwFourCC = mpFourCC; + mD3dDriverData.lpTextureFormats = (DDSURFACEDESC*) mpTextures; if (!DdQueryDirectDrawObject( - &This->mDDrawGlobal, - &This->mHALInfo, - &This->mCallbacks.HALDD, - &This->mCallbacks.HALDDSurface, - &This->mCallbacks.HALDDPalette, - &This->mD3dCallbacks, - &This->mD3dDriverData, - &This->mCallbacks.HALDDExeBuf, - (DDSURFACEDESC*)This->mpTextures, - This->mpFourCC, - This->mpvmList)) + This->lpLcl->lpGbl, + &mHALInfo, + &mCallbacks.HALDD, + &mCallbacks.HALDDSurface, + &mCallbacks.HALDDPalette, + &mD3dCallbacks, + &mD3dDriverData, + &mCallbacks.HALDDExeBuf, + (DDSURFACEDESC*)mpTextures, + mpFourCC, + mpvmList)) { - DxHeapMemFree(This->mpTextures); - DxHeapMemFree(This->mpFourCC); - DxHeapMemFree(This->mpvmList); - DxHeapMemFree(This->mpModeInfos); - DeleteDC(This->hdc); + DxHeapMemFree(mpTextures); + DxHeapMemFree(mpFourCC); + DxHeapMemFree(mpvmList); + DxHeapMemFree(This->lpLcl->lpGbl->lpModeInfo); + DeleteDC((HDC)This->lpLcl->hDC); // FIXME Close DX fristcall and second call return DD_FALSE; } @@ -350,84 +316,69 @@ StartDirectDrawHal(LPDIRECTDRAW* iface) // this is wrong, cDriverName need be in ASC code not UNICODE //memcpy(mDDrawGlobal.cDriverName, mDisplayAdapter, sizeof(wchar)*MAX_DRIVER_NAME); - memcpy(&This->mDDrawGlobal.vmiData, &This->mHALInfo.vmiData,sizeof(VIDMEMINFO)); - memcpy(&This->mDDrawGlobal.ddCaps, &This->mHALInfo.ddCaps,sizeof(DDCORECAPS)); - - This->mHALInfo.dwNumModes = This->mcModeInfos; - This->mHALInfo.lpModeInfo = This->mpModeInfos; - This->mHALInfo.dwMonitorFrequency = This->mpModeInfos[0].wRefreshRate; - - This->mDDrawGlobal.dwMonitorFrequency = This->mHALInfo.dwMonitorFrequency; - This->mDDrawGlobal.dwModeIndex = This->mHALInfo.dwModeIndex; - This->mDDrawGlobal.dwNumModes = This->mHALInfo.dwNumModes; - This->mDDrawGlobal.lpModeInfo = This->mHALInfo.lpModeInfo; - This->mDDrawGlobal.hInstance = This->mHALInfo.hInstance; + memcpy(&ddgbl.vmiData, &mHALInfo.vmiData,sizeof(VIDMEMINFO)); + memcpy(&ddgbl.ddCaps, &mHALInfo.ddCaps,sizeof(DDCORECAPS)); - This->mDDrawGlobal.lp16DD = &This->mDDrawGlobal; - - //DeleteDC(This->hdc); + mHALInfo.dwNumModes = 1; + mHALInfo.lpModeInfo = This->lpLcl->lpGbl->lpModeInfo; + mHALInfo.dwMonitorFrequency = This->lpLcl->lpGbl->lpModeInfo[0].wRefreshRate; + This->lpLcl->lpGbl->dwMonitorFrequency = mHALInfo.dwMonitorFrequency; + This->lpLcl->lpGbl->dwModeIndex = mHALInfo.dwModeIndex; + This->lpLcl->lpGbl->dwNumModes = mHALInfo.dwNumModes; + This->lpLcl->lpGbl->lpModeInfo = mHALInfo.lpModeInfo; + This->lpLcl->lpGbl->hInstance = mHALInfo.hInstance; + + This->lpLcl->lpGbl->lp16DD = This->lpLcl->lpGbl; + memset(&DriverInfo,0, sizeof(DDHAL_GETDRIVERINFODATA)); DriverInfo.dwSize = sizeof(DDHAL_GETDRIVERINFODATA); - DriverInfo.dwContext = This->mDDrawGlobal.hDD; + DriverInfo.dwContext = This->lpLcl->lpGbl->hDD; /* Get the MiscellaneousCallbacks */ DriverInfo.guidInfo = GUID_MiscellaneousCallbacks; - DriverInfo.lpvData = &This->mDDrawGlobal.lpDDCBtmp->HALDDMiscellaneous; + DriverInfo.lpvData = &ddgbl.lpDDCBtmp->HALDDMiscellaneous; DriverInfo.dwExpectedSize = sizeof(DDHAL_DDMISCELLANEOUSCALLBACKS); - This->mHALInfo.GetDriverInfo(&DriverInfo); + mHALInfo.GetDriverInfo(&DriverInfo); - /* Setup global surface */ - /*This->mPrimaryGlobal.dwGlobalFlags = DDRAWISURFGBL_ISGDISURFACE; - This->mPrimaryGlobal.lpDD = &This->mDDrawGlobal; - This->mPrimaryGlobal.lpDDHandle = &This->mDDrawGlobal; - This->mPrimaryGlobal.wWidth = (WORD)This->mpModeInfos[0].dwWidth; - This->mPrimaryGlobal.wHeight = (WORD)This->mpModeInfos[0].dwHeight; - This->mPrimaryGlobal.lPitch = This->mpModeInfos[0].lPitch;*/ - - /* FIXME free it in cleanup */ - // This->mDDrawGlobal.dsList = (LPDDRAWI_DDRAWSURFACE_INT)DxHeapMemAlloc(sizeof(DDRAWI_DDRAWSURFACE_INT)); + return DD_OK; } HRESULT WINAPI StartDirectDrawHel(LPDIRECTDRAW* iface) { - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; + + /* + FIXME : + FlipToGDISurface + SetColorKey + Hel api + */ + This->lpLcl->lpDDCB->HELDD.CanCreateSurface = HelDdCanCreateSurface; + This->lpLcl->lpDDCB->HELDD.CreateSurface = HelDdCreateSurface; + This->lpLcl->lpDDCB->HELDD.CreatePalette = HelDdCreatePalette; + This->lpLcl->lpDDCB->HELDD.DestroyDriver = HelDdDestroyDriver; + //This->lpLcl->lpDDCB->HELDD.FlipToGDISurface = HelDdFlipToGDISurface + This->lpLcl->lpDDCB->HELDD.GetScanLine = HelDdGetScanLine; + // This->lpLcl->lpDDCB->HELDD.SetColorKey = HelDdSetColorKey; + This->lpLcl->lpDDCB->HELDD.SetExclusiveMode = HelDdSetExclusiveMode; + This->lpLcl->lpDDCB->HELDD.SetMode = HelDdSetMode; + This->lpLcl->lpDDCB->HELDD.WaitForVerticalBlank = HelDdWaitForVerticalBlank; - This->HELMemoryAvilable = HEL_GRAPHIC_MEMORY_MAX; - - This->mCallbacks.HELDD.dwFlags = DDHAL_CB32_DESTROYDRIVER; - This->mCallbacks.HELDD.DestroyDriver = HelDdDestroyDriver; - - This->mCallbacks.HELDD.dwFlags += DDHAL_CB32_CREATESURFACE; - This->mCallbacks.HELDD.CreateSurface = HelDdCreateSurface; - - // DDHAL_CB32_ - //This->mCallbacks.HELDD.SetColorKey = HelDdSetColorKey; - - This->mCallbacks.HELDD.dwFlags += DDHAL_CB32_SETMODE; - This->mCallbacks.HELDD.SetMode = HelDdSetMode; - - This->mCallbacks.HELDD.dwFlags += DDHAL_CB32_WAITFORVERTICALBLANK; - This->mCallbacks.HELDD.WaitForVerticalBlank = HelDdWaitForVerticalBlank; - - This->mCallbacks.HELDD.dwFlags += DDHAL_CB32_CANCREATESURFACE; - This->mCallbacks.HELDD.CanCreateSurface = HelDdCanCreateSurface; - - This->mCallbacks.HELDD.dwFlags += DDHAL_CB32_CREATEPALETTE; - This->mCallbacks.HELDD.CreatePalette = HelDdCreatePalette; - - This->mCallbacks.HELDD.dwFlags += DDHAL_CB32_GETSCANLINE; - This->mCallbacks.HELDD.GetScanLine = HelDdGetScanLine; - - This->mCallbacks.HELDD.dwFlags += DDHAL_CB32_SETEXCLUSIVEMODE; - This->mCallbacks.HELDD.SetExclusiveMode = HelDdSetExclusiveMode; - - This->mCallbacks.HELDD.dwFlags += DDHAL_CB32_FLIPTOGDISURFACE; - This->mCallbacks.HELDD.FlipToGDISurface = HelDdFlipToGDISurface; - + This->lpLcl->lpDDCB->HELDD.dwFlags = DDHAL_CB32_CANCREATESURFACE | + DDHAL_CB32_CREATESURFACE | + DDHAL_CB32_CREATEPALETTE | + DDHAL_CB32_DESTROYDRIVER | + // DDHAL_CB32_FLIPTOGDISURFACE | + DDHAL_CB32_GETSCANLINE | + // DDHAL_CB32_SETCOLORKEY | + DDHAL_CB32_SETEXCLUSIVEMODE | + DDHAL_CB32_SETMODE | + DDHAL_CB32_WAITFORVERTICALBLANK ; + return DD_OK; } @@ -437,64 +388,43 @@ Create_DirectDraw (LPGUID pGUID, LPDIRECTDRAW* pIface, REFIID id, BOOL ex) -{ - IDirectDrawImpl* This; +{ + LPDDRAWI_DIRECTDRAW_INT This; + DX_WINDBG_trace(); - //AcquireDDThreadLock(); - - This = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl)); - - + This = DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT)); if (This == NULL) { - ReleaseDDThreadLock(); return E_OUTOFMEMORY; } + This->lpLcl = DxHeapMemAlloc(sizeof(DDRAWI_DIRECTDRAW_INT)); - ZeroMemory(This,sizeof(IDirectDrawImpl)); + if (This->lpLcl == NULL) + { + /* FIXME cleanup */ + return DDERR_OUTOFMEMORY; + } - This->lpVtbl = &DirectDraw7_Vtable; - This->lpVtbl_v1 = &DDRAW_IDirectDraw_VTable; - This->lpVtbl_v2 = &DDRAW_IDirectDraw2_VTable; - This->lpVtbl_v4 = &DDRAW_IDirectDraw4_VTable; - + This->lpLcl->lpGbl = &ddgbl; + *pIface = (LPDIRECTDRAW)This; - - if (pGUID == 0) - { - This->devicetype = 0; /* both hal and hel default driver "DISPLAY" */ - } - else if (pGUID == (LPGUID) DDCREATE_HARDWAREONLY) - { - This->devicetype = 1; /* hal only default driver "DISPLAY" */ - } - else if (pGUID == (LPGUID) DDCREATE_EMULATIONONLY) - { - This->devicetype = 2; /* hel only default driver "DISPLAY" */ - } - else - { - This->devicetype = 3; /* Read from the register which driver it should be */ - } - - - if(This->lpVtbl->QueryInterface ((LPDIRECTDRAW7)This, id, (void**)&pIface) != S_OK) - { - ReleaseDDThreadLock(); + if(Main_DirectDraw_QueryInterface((LPDIRECTDRAW7)This, id, (void**)&pIface) != S_OK) + { return DDERR_INVALIDPARAMS; } - if (StartDirectDraw((LPDIRECTDRAW*)This) == DD_OK); + if (StartDirectDraw((LPDIRECTDRAW*)This, pGUID) == DD_OK); { - //ReleaseDDThreadLock(); - return This->lpVtbl->Initialize ((LPDIRECTDRAW7)This, pGUID); - } - //ReleaseDDThreadLock(); + return ((LPDIRECTDRAW7)This)->lpVtbl->Initialize ((LPDIRECTDRAW7)This, pGUID); + } + return DDERR_INVALIDPARAMS; } + + diff --git a/reactos/dll/directx/ddraw/thunks/ddraw_thunk.c b/reactos/dll/directx/ddraw/thunks/ddraw_thunk.c index 576ac598e0e..8eaa89f3245 100644 --- a/reactos/dll/directx/ddraw/thunks/ddraw_thunk.c +++ b/reactos/dll/directx/ddraw/thunks/ddraw_thunk.c @@ -1,1049 +1,947 @@ -/* Direct Draw Thunks and old vtables - * Copyright 2000 TransGaming Technologies Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* - * Taken form wine (wine/dlls/ddraw/ddraw_thunks.c rev 1.2) - * with some little changes - * - */ - -#include "../winedraw.h" -static HRESULT WINAPI -IDirectDrawImpl_QueryInterface(LPDIRECTDRAW This, REFIID iid, LPVOID *ppObj) +#include "../rosdraw.h" + + + +HRESULT WINAPI +ThunkDirectDraw_QueryInterface(LPDIRECTDRAW iface, REFIID iid, LPVOID *ppObj) { - return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, This), - iid, ppObj); + DX_WINDBG_trace(); + + return Main_DirectDraw_QueryInterface ((LPDIRECTDRAW7) iface, iid, ppObj); } -static HRESULT WINAPI -IDirectDraw2Impl_QueryInterface(LPDIRECTDRAW2 This, REFIID iid, LPVOID *ppObj) +HRESULT WINAPI +ThunkDirectDraw2_QueryInterface(LPDIRECTDRAW2 iface, REFIID iid, LPVOID *obj) { - return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, This), - iid, ppObj); + DX_WINDBG_trace(); + + return Main_DirectDraw_QueryInterface ((LPDIRECTDRAW7) iface, iid, obj); } -static HRESULT WINAPI -IDirectDraw4Impl_QueryInterface(LPDIRECTDRAW4 This, REFIID iid, LPVOID *ppObj) +HRESULT WINAPI +ThunkDirectDraw4_QueryInterface(LPDIRECTDRAW4 iface, REFIID iid, LPVOID *ppObj) { - return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, This), - iid, ppObj); + DX_WINDBG_trace(); + + return Main_DirectDraw_QueryInterface ((LPDIRECTDRAW7) iface, iid, ppObj); } -static ULONG WINAPI -IDirectDrawImpl_AddRef(LPDIRECTDRAW This) +ULONG WINAPI +ThunkDirectDraw_AddRef(LPDIRECTDRAW iface) { - return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_AddRef((LPDIRECTDRAW7) iface); } -static ULONG WINAPI -IDirectDraw2Impl_AddRef(LPDIRECTDRAW2 This) +ULONG WINAPI +ThunkDirectDraw2_AddRef(LPDIRECTDRAW2 iface) { - return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_AddRef((LPDIRECTDRAW7) iface); } -static ULONG WINAPI -IDirectDraw4Impl_AddRef(LPDIRECTDRAW4 This) +ULONG WINAPI +ThunkDirectDraw4_AddRef(LPDIRECTDRAW4 iface) { - return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_AddRef((LPDIRECTDRAW7) iface); } -static ULONG WINAPI -IDirectDrawImpl_Release(LPDIRECTDRAW This) +ULONG WINAPI +ThunkDirectDraw_Release(LPDIRECTDRAW iface) { - return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_Release ((LPDIRECTDRAW7) iface); } -static ULONG WINAPI -IDirectDraw2Impl_Release(LPDIRECTDRAW2 This) +ULONG WINAPI +ThunkDirectDraw2_Release(LPDIRECTDRAW2 iface) { - return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_Release ((LPDIRECTDRAW7) iface); } -static ULONG WINAPI -IDirectDraw4Impl_Release(LPDIRECTDRAW4 This) +ULONG WINAPI +ThunkDirectDraw4_Release(LPDIRECTDRAW4 iface) { - return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_Release ((LPDIRECTDRAW7) iface); } -static HRESULT WINAPI -IDirectDrawImpl_Compact(LPDIRECTDRAW This) +HRESULT WINAPI +ThunkDirectDraw_Compact(LPDIRECTDRAW iface) { - return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_Compact((LPDIRECTDRAW7) iface) ; } -static HRESULT WINAPI -IDirectDraw2Impl_Compact(LPDIRECTDRAW2 This) +HRESULT WINAPI +ThunkDirectDraw2_Compact(LPDIRECTDRAW2 iface) { - return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_Compact((LPDIRECTDRAW7) iface) ; } -static HRESULT WINAPI -IDirectDraw4Impl_Compact(LPDIRECTDRAW4 This) +HRESULT WINAPI +ThunkDirectDraw4_Compact(LPDIRECTDRAW4 iface) { - return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_Compact((LPDIRECTDRAW7) iface) ; } -static HRESULT WINAPI -IDirectDrawImpl_CreateClipper(LPDIRECTDRAW This, DWORD dwFlags, - LPDIRECTDRAWCLIPPER *ppClipper, - IUnknown *pUnkOuter) -{ - return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This), - dwFlags, ppClipper, pUnkOuter); +HRESULT WINAPI +ThunkDirectDraw_CreateClipper(LPDIRECTDRAW iface,DWORD dwFlags,LPDIRECTDRAWCLIPPER *ppClipper,IUnknown *pUnkOuter) +{ + DX_WINDBG_trace(); + + return Main_DirectDraw_CreateClipper( (LPDIRECTDRAW7) iface, dwFlags, ppClipper, pUnkOuter); } -static HRESULT WINAPI -IDirectDraw2Impl_CreateClipper(LPDIRECTDRAW2 This, DWORD dwFlags, - LPDIRECTDRAWCLIPPER *ppClipper, - IUnknown *pUnkOuter) +HRESULT WINAPI +ThunkDirectDraw2_CreateClipper(LPDIRECTDRAW2 iface,DWORD dwFlags,LPDIRECTDRAWCLIPPER *ppClipper,IUnknown *pUnkOuter) { - return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), - dwFlags, ppClipper, pUnkOuter); + DX_WINDBG_trace(); + + return Main_DirectDraw_CreateClipper( (LPDIRECTDRAW7) iface, dwFlags, ppClipper, pUnkOuter); } -static HRESULT WINAPI -IDirectDraw4Impl_CreateClipper(LPDIRECTDRAW4 This, DWORD dwFlags, - LPDIRECTDRAWCLIPPER *ppClipper, - IUnknown *pUnkOuter) +HRESULT WINAPI +ThunkDirectDraw4_CreateClipper(LPDIRECTDRAW4 iface,DWORD dwFlags,LPDIRECTDRAWCLIPPER *ppClipper,IUnknown *pUnkOuter) { - return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - dwFlags, ppClipper, pUnkOuter); + DX_WINDBG_trace(); + + return Main_DirectDraw_CreateClipper( (LPDIRECTDRAW7) iface, dwFlags, ppClipper, pUnkOuter); } -static HRESULT WINAPI -IDirectDrawImpl_CreatePalette(LPDIRECTDRAW This, DWORD dwFlags, +HRESULT WINAPI +ThunkDirectDraw_CreatePalette(LPDIRECTDRAW iface, DWORD dwFlags, LPPALETTEENTRY pEntries, LPDIRECTDRAWPALETTE *ppPalette, IUnknown *pUnkOuter) { - return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This), - dwFlags, pEntries, ppPalette, pUnkOuter); + DX_WINDBG_trace(); + + return Main_DirectDraw_CreatePalette( (LPDIRECTDRAW7) iface, dwFlags, pEntries, ppPalette, pUnkOuter); } -static HRESULT WINAPI -IDirectDraw2Impl_CreatePalette(LPDIRECTDRAW2 This, DWORD dwFlags, +HRESULT WINAPI +ThunkDirectDraw2_CreatePalette(LPDIRECTDRAW2 iface, DWORD dwFlags, LPPALETTEENTRY pEntries, LPDIRECTDRAWPALETTE *ppPalette, IUnknown *pUnkOuter) { - return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), - dwFlags, pEntries, ppPalette, pUnkOuter); + DX_WINDBG_trace(); + + return Main_DirectDraw_CreatePalette( (LPDIRECTDRAW7) iface, dwFlags, pEntries, ppPalette, pUnkOuter); } -static HRESULT WINAPI -IDirectDraw4Impl_CreatePalette(LPDIRECTDRAW4 This, DWORD dwFlags, - LPPALETTEENTRY pEntries, - LPDIRECTDRAWPALETTE *ppPalette, - IUnknown *pUnkOuter) +HRESULT WINAPI +ThunkDirectDraw4_CreatePalette(LPDIRECTDRAW4 iface, DWORD dwFlags, LPPALETTEENTRY pEntries, + LPDIRECTDRAWPALETTE *ppPalette, IUnknown *pUnkOuter) { - return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - dwFlags, pEntries, ppPalette, pUnkOuter); + DX_WINDBG_trace(); + + return Main_DirectDraw_CreatePalette( (LPDIRECTDRAW7) iface, dwFlags, pEntries, ppPalette, pUnkOuter); } -static HRESULT WINAPI -IDirectDrawImpl_CreateSurface(LPDIRECTDRAW This, LPDDSURFACEDESC pSDesc, - LPDIRECTDRAWSURFACE *ppSurface, +HRESULT WINAPI +ThunkDirectDraw_CreateSurface(LPDIRECTDRAW iface, LPDDSURFACEDESC pDDSD, + LPDIRECTDRAWSURFACE *ppSurf, IUnknown *pUnkOuter) { - LPDIRECTDRAWSURFACE7 pSurface7; - HRESULT hr; + HRESULT retValue = DDERR_GENERIC; + LPDDRAWI_DDRAWSURFACE_INT That; - /* the LPDDSURFACEDESC -> LPDDSURFACEDESC2 conversion should be ok, - * since the data layout is the same */ - hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This), - (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter); + DX_WINDBG_trace(); + + if (pDDSD != NULL) + { + DDSURFACEDESC2 pDDSD2; + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + memcpy(&pDDSD2, pDDSD, sizeof(DDSURFACEDESC)); + pDDSD2.dwSize = sizeof(DDSURFACEDESC2); + retValue = Main_DirectDraw_CreateSurface ((LPDIRECTDRAW7) iface, &pDDSD2, + (LPDIRECTDRAWSURFACE7 *) ppSurf, pUnkOuter); + memcpy(pDDSD, &pDDSD2, sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + else + { + retValue = Main_DirectDraw_CreateSurface ((LPDIRECTDRAW7) iface, NULL, + (LPDIRECTDRAWSURFACE7 *) ppSurf, pUnkOuter); + } + + That = (LPDDRAWI_DDRAWSURFACE_INT) *ppSurf; + That->lpVtbl = &DirectDrawSurface3_VTable; - /* This coercion is safe, since the IDirectDrawSurface3 vtable has the - * IDirectDrawSurface vtable layout at the beginning */ - *ppSurface = (LPDIRECTDRAWSURFACE) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, - IDirectDrawSurface7, IDirectDrawSurface3, - pSurface7); - - return hr; + return retValue; } -static HRESULT WINAPI -IDirectDraw2Impl_CreateSurface(LPDIRECTDRAW2 This, LPDDSURFACEDESC pSDesc, - LPDIRECTDRAWSURFACE *ppSurface, - IUnknown *pUnkOuter) +HRESULT WINAPI +ThunkDirectDraw2_CreateSurface(LPDIRECTDRAW2 iface, LPDDSURFACEDESC pDDSD, + LPDIRECTDRAWSURFACE *ppSurface, IUnknown *pUnkOuter) { - LPDIRECTDRAWSURFACE7 pSurface7; - HRESULT hr; + HRESULT retValue = DDERR_GENERIC; + LPDDRAWI_DDRAWSURFACE_INT That; - hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), - (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter); + DX_WINDBG_trace(); + + if (pDDSD != NULL) + { + DDSURFACEDESC2 pDDSD2; + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + memcpy(&pDDSD2, pDDSD, sizeof(DDSURFACEDESC)); + pDDSD2.dwSize = sizeof(DDSURFACEDESC2); + retValue = Main_DirectDraw_CreateSurface ((LPDIRECTDRAW7) iface, &pDDSD2, + (LPDIRECTDRAWSURFACE7 *) ppSurface, pUnkOuter); + memcpy(pDDSD, &pDDSD2, sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + else + { + retValue = Main_DirectDraw_CreateSurface ((LPDIRECTDRAW7) iface, NULL, + (LPDIRECTDRAWSURFACE7 *) ppSurface, pUnkOuter); + } - /* This coercion is safe, since the IDirectDrawSurface3 vtable has the - * IDirectDrawSurface vtable layout at the beginning */ - *ppSurface = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, - IDirectDrawSurface7, IDirectDrawSurface3, - pSurface7); + That = (LPDDRAWI_DDRAWSURFACE_INT) *ppSurface; + That->lpVtbl = &DirectDrawSurface3_VTable; - return hr; + return retValue; } -static HRESULT WINAPI -IDirectDraw4Impl_CreateSurface(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pSDesc, - LPDIRECTDRAWSURFACE4 *ppSurface, - IUnknown *pUnkOuter) +HRESULT WINAPI +ThunkDirectDraw4_CreateSurface(LPDIRECTDRAW4 iface, LPDDSURFACEDESC2 pDDSD2, + LPDIRECTDRAWSURFACE4 *ppSurface, IUnknown *pUnkOuter) { - return IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - pSDesc, - (LPDIRECTDRAWSURFACE7 *)ppSurface, - pUnkOuter); + HRESULT retValue; + LPDDRAWI_DDRAWSURFACE_INT That; + + DX_WINDBG_trace(); + + + retValue = Main_DirectDraw_CreateSurface ((LPDIRECTDRAW7) iface, pDDSD2, + (LPDIRECTDRAWSURFACE7 *) ppSurface, pUnkOuter); + + That = (LPDDRAWI_DDRAWSURFACE_INT) *ppSurface; + That->lpVtbl = &DirectDrawSurface3_VTable; + + return retValue; } -static HRESULT WINAPI -IDirectDrawImpl_DuplicateSurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE pSrc, - LPDIRECTDRAWSURFACE *ppDst) +HRESULT WINAPI +ThunkDirectDraw_DuplicateSurface(LPDIRECTDRAW iface, LPDIRECTDRAWSURFACE src, LPDIRECTDRAWSURFACE *dst) { - LPDIRECTDRAWSURFACE7 pDst7; - HRESULT hr; + DX_WINDBG_trace(); - hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, This), - COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, - IDirectDrawSurface3, - IDirectDrawSurface7, - pSrc), - &pDst7); - - /* This coercion is safe, since the IDirectDrawSurface3 vtable has the - * IDirectDrawSurface vtable layout at the beginning */ - *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, - IDirectDrawSurface3, pDst7); - - return hr; + return Main_DirectDraw_DuplicateSurface((LPDIRECTDRAW7) iface, (LPDIRECTDRAWSURFACE7) src, + (LPDIRECTDRAWSURFACE7*) dst); } -static HRESULT WINAPI -IDirectDraw2Impl_DuplicateSurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE pSrc, - LPDIRECTDRAWSURFACE *ppDst) +HRESULT WINAPI +ThunkDirectDraw2_DuplicateSurface(LPDIRECTDRAW2 iface, LPDIRECTDRAWSURFACE src, LPDIRECTDRAWSURFACE *dst) { - LPDIRECTDRAWSURFACE7 pDst7; - HRESULT hr; + DX_WINDBG_trace(); - hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, This), - COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, - IDirectDrawSurface3, - IDirectDrawSurface7, - pSrc), - &pDst7); - - /* This coercion is safe, since the IDirectDrawSurface3 vtable has the - * IDirectDrawSurface vtable layout at the beginning */ - *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, - IDirectDrawSurface3, pDst7); - - return hr; + return Main_DirectDraw_DuplicateSurface((LPDIRECTDRAW7) iface, (LPDIRECTDRAWSURFACE7) src, + (LPDIRECTDRAWSURFACE7*) dst); } -static HRESULT WINAPI -IDirectDraw4Impl_DuplicateSurface(LPDIRECTDRAW4 This, - LPDIRECTDRAWSURFACE4 pSrc, - LPDIRECTDRAWSURFACE4 *ppDst) +HRESULT WINAPI +ThunkDirectDraw4_DuplicateSurface(LPDIRECTDRAW4 iface, LPDIRECTDRAWSURFACE4 src, LPDIRECTDRAWSURFACE4 *dst) { - return IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - (LPDIRECTDRAWSURFACE7)pSrc, - (LPDIRECTDRAWSURFACE7 *)ppDst); + DX_WINDBG_trace(); + + return Main_DirectDraw_DuplicateSurface((LPDIRECTDRAW7) iface, (LPDIRECTDRAWSURFACE7) src, + (LPDIRECTDRAWSURFACE7*) dst); } -struct displaymodescallback_context -{ - LPDDENUMMODESCALLBACK func; - LPVOID context; -}; - -static HRESULT CALLBACK -EnumDisplayModesCallbackThunk(LPDDSURFACEDESC2 pDDSD2, LPVOID context) -{ - DDSURFACEDESC DDSD; - struct displaymodescallback_context *cbcontext = context; - - memcpy(&DDSD,pDDSD2,sizeof(DDSD)); - DDSD.dwSize = sizeof(DDSD); - - return cbcontext->func(&DDSD, cbcontext->context); -} - -static HRESULT WINAPI -IDirectDrawImpl_EnumDisplayModes(LPDIRECTDRAW This, DWORD dwFlags, +HRESULT WINAPI +ThunkDirectDraw_EnumDisplayModes(LPDIRECTDRAW iface, DWORD dwFlags, LPDDSURFACEDESC pDDSD, LPVOID context, LPDDENUMMODESCALLBACK cb) { - struct displaymodescallback_context cbcontext; + HRESULT retValue = DDERR_GENERIC; - cbcontext.func = cb; - cbcontext.context = context; + DX_WINDBG_trace(); - return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This), - dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext, - EnumDisplayModesCallbackThunk); + if (pDDSD != NULL) + { + DDSURFACEDESC2 pDDSD2; + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + memcpy(&pDDSD2, pDDSD, sizeof(DDSURFACEDESC)); + pDDSD2.dwSize = sizeof(DDSURFACEDESC2); + retValue = Main_DirectDraw_EnumDisplayModes((LPDIRECTDRAW7) iface, dwFlags, &pDDSD2, + context, (LPDDENUMMODESCALLBACK2)cb); + memcpy(pDDSD, &pDDSD2, sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + else + { + retValue = Main_DirectDraw_EnumDisplayModes((LPDIRECTDRAW7) iface, dwFlags, NULL, + context, (LPDDENUMMODESCALLBACK2)cb); + } + + return retValue; } -static HRESULT WINAPI -IDirectDraw2Impl_EnumDisplayModes(LPDIRECTDRAW2 This, DWORD dwFlags, +HRESULT WINAPI +ThunkDirectDraw2_EnumDisplayModes(LPDIRECTDRAW2 iface, DWORD dwFlags, LPDDSURFACEDESC pDDSD, LPVOID context, LPDDENUMMODESCALLBACK cb) { - struct displaymodescallback_context cbcontext; + HRESULT retValue = DDERR_GENERIC; - cbcontext.func = cb; - cbcontext.context = context; + DX_WINDBG_trace(); - return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), - dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext, - EnumDisplayModesCallbackThunk); + if (pDDSD != NULL) + { + DDSURFACEDESC2 pDDSD2; + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + memcpy(&pDDSD2, pDDSD, sizeof(DDSURFACEDESC)); + pDDSD2.dwSize = sizeof(DDSURFACEDESC2); + retValue = Main_DirectDraw_EnumDisplayModes((LPDIRECTDRAW7) iface, dwFlags, &pDDSD2, + context, (LPDDENUMMODESCALLBACK2)cb); + memcpy(pDDSD, &pDDSD2, sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + else + { + retValue = Main_DirectDraw_EnumDisplayModes((LPDIRECTDRAW7) iface, dwFlags, NULL, + context, (LPDDENUMMODESCALLBACK2)cb); + } + + return retValue; } -static HRESULT WINAPI -IDirectDraw4Impl_EnumDisplayModes(LPDIRECTDRAW4 This, DWORD dwFlags, +HRESULT WINAPI +ThunkDirectDraw4_EnumDisplayModes(LPDIRECTDRAW4 iface, DWORD dwFlags, LPDDSURFACEDESC2 pDDSD, LPVOID context, LPDDENUMMODESCALLBACK2 cb) { - return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - dwFlags, pDDSD, context, cb); + DX_WINDBG_trace(); + + return Main_DirectDraw_EnumDisplayModes((LPDIRECTDRAW7) iface, dwFlags, pDDSD, context, cb); } -struct surfacescallback_context -{ - LPDDENUMSURFACESCALLBACK func; - LPVOID context; -}; -static HRESULT CALLBACK -EnumSurfacesCallbackThunk(LPDIRECTDRAWSURFACE7 pSurf, LPDDSURFACEDESC2 pDDSD, - LPVOID context) -{ - struct surfacescallback_context *cbcontext = context; - /* This coercion is safe, since the IDirectDrawSurface3 vtable has the - * IDirectDrawSurface vtable layout at the beginning */ - return cbcontext->func((LPDIRECTDRAWSURFACE) - COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, - IDirectDrawSurface7, - IDirectDrawSurface3, pSurf), - (LPDDSURFACEDESC)pDDSD, cbcontext->context); -} -static HRESULT WINAPI -IDirectDrawImpl_EnumSurfaces(LPDIRECTDRAW This, DWORD dwFlags, + +HRESULT WINAPI +ThunkDirectDraw_EnumSurfaces(LPDIRECTDRAW iface, DWORD dwFlags, LPDDSURFACEDESC pDDSD, LPVOID context, LPDDENUMSURFACESCALLBACK cb) { - struct surfacescallback_context cbcontext; + HRESULT retValue = DDERR_GENERIC; - cbcontext.func = cb; - cbcontext.context = context; + DX_WINDBG_trace(); - return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, This), - dwFlags, (LPDDSURFACEDESC2)pDDSD, - &cbcontext, EnumSurfacesCallbackThunk); + if (pDDSD != NULL) + { + DDSURFACEDESC2 pDDSD2; + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + memcpy(&pDDSD2, pDDSD, sizeof(DDSURFACEDESC)); + pDDSD2.dwSize = sizeof(DDSURFACEDESC2); + retValue = Main_DirectDraw_EnumSurfaces((LPDIRECTDRAW7) iface, dwFlags, &pDDSD2, + context, (LPDDENUMSURFACESCALLBACK7)cb); + memcpy(pDDSD, &pDDSD2, sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + else + { + retValue = Main_DirectDraw_EnumSurfaces((LPDIRECTDRAW7) iface, dwFlags, NULL, + context, (LPDDENUMSURFACESCALLBACK7)cb); + } + + return retValue; } -static HRESULT WINAPI -IDirectDraw2Impl_EnumSurfaces(LPDIRECTDRAW2 This, DWORD dwFlags, +HRESULT WINAPI +ThunkDirectDraw2_EnumSurfaces(LPDIRECTDRAW2 iface, DWORD dwFlags, LPDDSURFACEDESC pDDSD, LPVOID context, LPDDENUMSURFACESCALLBACK cb) { - struct surfacescallback_context cbcontext; + HRESULT retValue = DDERR_GENERIC; - cbcontext.func = cb; - cbcontext.context = context; + DX_WINDBG_trace(); - return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, This), - dwFlags, (LPDDSURFACEDESC2)pDDSD, - &cbcontext, EnumSurfacesCallbackThunk); + if (pDDSD != NULL) + { + DDSURFACEDESC2 pDDSD2; + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + memcpy(&pDDSD2, pDDSD, sizeof(DDSURFACEDESC)); + pDDSD2.dwSize = sizeof(DDSURFACEDESC2); + retValue = Main_DirectDraw_EnumSurfaces((LPDIRECTDRAW7) iface, dwFlags, &pDDSD2, + context, (LPDDENUMSURFACESCALLBACK7)cb); + memcpy(pDDSD, &pDDSD2, sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + else + { + retValue = Main_DirectDraw_EnumSurfaces((LPDIRECTDRAW7) iface, dwFlags, NULL, + context, (LPDDENUMSURFACESCALLBACK7)cb); + } + + return retValue; } -static HRESULT WINAPI -IDirectDraw4Impl_EnumSurfaces(LPDIRECTDRAW4 This, DWORD dwFlags, +HRESULT WINAPI +ThunkDirectDraw4_EnumSurfaces(LPDIRECTDRAW4 iface, DWORD dwFlags, LPDDSURFACEDESC2 pDDSD, LPVOID context, LPDDENUMSURFACESCALLBACK2 cb) { - return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, This), - dwFlags, pDDSD, context, - (LPDDENUMSURFACESCALLBACK7)cb); + DX_WINDBG_trace(); + + return Main_DirectDraw_EnumSurfaces((LPDIRECTDRAW7) iface, dwFlags, pDDSD, context, (LPDDENUMSURFACESCALLBACK7)cb); } -static HRESULT WINAPI -IDirectDrawImpl_FlipToGDISurface(LPDIRECTDRAW This) + + +HRESULT WINAPI +ThunkDirectDraw_FlipToGDISurface(LPDIRECTDRAW iface) { - return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_FlipToGDISurface((LPDIRECTDRAW7) iface); } -static HRESULT WINAPI -IDirectDraw2Impl_FlipToGDISurface(LPDIRECTDRAW2 This) +HRESULT WINAPI +ThunkDirectDraw2_FlipToGDISurface(LPDIRECTDRAW2 iface) { - return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_FlipToGDISurface((LPDIRECTDRAW7) iface); } -static HRESULT WINAPI -IDirectDraw4Impl_FlipToGDISurface(LPDIRECTDRAW4 This) +HRESULT WINAPI +ThunkDirectDraw4_FlipToGDISurface(LPDIRECTDRAW4 iface) { - return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_FlipToGDISurface((LPDIRECTDRAW7) iface); } -static HRESULT WINAPI -IDirectDrawImpl_GetCaps(LPDIRECTDRAW This, LPDDCAPS pDDC1, LPDDCAPS pDDC2) +HRESULT WINAPI +ThunkDirectDraw_GetCaps(LPDIRECTDRAW iface, LPDDCAPS pDDC1, LPDDCAPS pDDC2) { - return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, IDirectDraw7, - This), pDDC1, pDDC2); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetCaps((LPDIRECTDRAW7) iface, pDDC1, pDDC2); } -static HRESULT WINAPI -IDirectDraw2Impl_GetCaps(LPDIRECTDRAW2 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2) +HRESULT WINAPI +ThunkDirectDraw2_GetCaps(LPDIRECTDRAW2 iface, LPDDCAPS pDDC1, LPDDCAPS pDDC2) { - return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, IDirectDraw7, - This), pDDC1, pDDC2); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetCaps((LPDIRECTDRAW7) iface, pDDC1, pDDC2); } -static HRESULT WINAPI -IDirectDraw4Impl_GetCaps(LPDIRECTDRAW4 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2) +HRESULT WINAPI +ThunkDirectDraw4_GetCaps(LPDIRECTDRAW4 iface, LPDDCAPS pDDC1, LPDDCAPS pDDC2) { - return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, IDirectDraw7, - This), pDDC1, pDDC2); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetCaps((LPDIRECTDRAW7) iface, pDDC1, pDDC2); } -static HRESULT WINAPI -IDirectDrawImpl_GetDisplayMode(LPDIRECTDRAW This, LPDDSURFACEDESC pDDSD) +HRESULT WINAPI +ThunkDirectDraw_GetDisplayMode(LPDIRECTDRAW iface, LPDDSURFACEDESC pDDSD) { - return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, This), - (LPDDSURFACEDESC2)pDDSD); + + HRESULT retValue = DDERR_GENERIC; + + DX_WINDBG_trace(); + + if (pDDSD != NULL) + { + DDSURFACEDESC2 pDDSD2; + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + memcpy(&pDDSD2, pDDSD, sizeof(DDSURFACEDESC)); + pDDSD2.dwSize = sizeof(DDSURFACEDESC2); + retValue = Main_DirectDraw_GetDisplayMode((LPDIRECTDRAW7) iface, &pDDSD2); + memcpy(pDDSD, &pDDSD2, sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + else + { + retValue = Main_DirectDraw_GetDisplayMode((LPDIRECTDRAW7) iface, NULL); + } + + return retValue; } -static HRESULT WINAPI -IDirectDraw2Impl_GetDisplayMode(LPDIRECTDRAW2 This, LPDDSURFACEDESC pDDSD) +HRESULT WINAPI +ThunkDirectDraw2_GetDisplayMode(LPDIRECTDRAW2 iface, LPDDSURFACEDESC pDDSD) { - return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, This), - (LPDDSURFACEDESC2)pDDSD); + HRESULT retValue = DDERR_GENERIC; + + DX_WINDBG_trace(); + + if (pDDSD != NULL) + { + DDSURFACEDESC2 pDDSD2; + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + memcpy(&pDDSD2, pDDSD, sizeof(DDSURFACEDESC)); + pDDSD2.dwSize = sizeof(DDSURFACEDESC2); + retValue = Main_DirectDraw_GetDisplayMode((LPDIRECTDRAW7) iface, &pDDSD2); + memcpy(pDDSD, &pDDSD2, sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + else + { + retValue = Main_DirectDraw_GetDisplayMode((LPDIRECTDRAW7) iface, NULL); + } + + return retValue; } -static HRESULT WINAPI -IDirectDraw4Impl_GetDisplayMode(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pDDSD) +HRESULT WINAPI +ThunkDirectDraw4_GetDisplayMode(LPDIRECTDRAW4 iface, LPDDSURFACEDESC2 pDDSD2) { - return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, This), - pDDSD); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetDisplayMode((LPDIRECTDRAW7) iface, pDDSD2); } -static HRESULT WINAPI -IDirectDrawImpl_GetFourCCCodes(LPDIRECTDRAW This, LPDWORD lpNumCodes, - LPDWORD lpCodes) +HRESULT WINAPI +ThunkDirectDraw_GetFourCCCodes(LPDIRECTDRAW iface, LPDWORD pNumCodes, + LPDWORD pCodes) { - return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This), - lpNumCodes, lpCodes); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetFourCCCodes((LPDIRECTDRAW7) iface, pNumCodes, pCodes); } -static HRESULT WINAPI -IDirectDraw2Impl_GetFourCCCodes(LPDIRECTDRAW2 This, LPDWORD lpNumCodes, - LPDWORD lpCodes) +HRESULT WINAPI +ThunkDirectDraw2_GetFourCCCodes(LPDIRECTDRAW2 iface, LPDWORD pNumCodes, + LPDWORD pCodes) { - return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), - lpNumCodes, lpCodes); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetFourCCCodes((LPDIRECTDRAW7) iface, pNumCodes, pCodes); } -static HRESULT WINAPI -IDirectDraw4Impl_GetFourCCCodes(LPDIRECTDRAW4 This, LPDWORD lpNumCodes, - LPDWORD lpCodes) +HRESULT WINAPI +ThunkDirectDraw4_GetFourCCCodes(LPDIRECTDRAW4 iface, LPDWORD pNumCodes, + LPDWORD pCodes) { - return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - lpNumCodes, lpCodes); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetFourCCCodes((LPDIRECTDRAW7) iface, pNumCodes, pCodes); } -static HRESULT WINAPI -IDirectDrawImpl_GetGDISurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE *ppSurf) +HRESULT WINAPI +ThunkDirectDraw_GetGDISurface(LPDIRECTDRAW iface, LPDIRECTDRAWSURFACE *lplpGDIDDSSurface) { - LPDIRECTDRAWSURFACE7 pSurf7; - HRESULT hr; + DX_WINDBG_trace(); - hr = IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This), &pSurf7); - - /* This coercion is safe, since the IDirectDrawSurface3 vtable has the - * IDirectDrawSurface vtable layout at the beginning */ - *ppSurf = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, - IDirectDrawSurface3, pSurf7); - - return hr; + return Main_DirectDraw_GetGDISurface((LPDIRECTDRAW7) iface, (LPDIRECTDRAWSURFACE7 *) lplpGDIDDSSurface); } -static HRESULT WINAPI -IDirectDraw2Impl_GetGDISurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE *ppSurf) +HRESULT WINAPI +ThunkDirectDraw2_GetGDISurface(LPDIRECTDRAW2 iface, LPDIRECTDRAWSURFACE *lplpGDIDDSSurface) { - LPDIRECTDRAWSURFACE7 pSurf7; - HRESULT hr; + DX_WINDBG_trace(); - hr = IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), &pSurf7); - - /* This coercion is safe, since the IDirectDrawSurface3 vtable has the - * IDirectDrawSurface vtable layout at the beginning */ - *ppSurf = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, - IDirectDrawSurface3, pSurf7); - - return hr; + return Main_DirectDraw_GetGDISurface((LPDIRECTDRAW7) iface, (LPDIRECTDRAWSURFACE7 *) lplpGDIDDSSurface); } -static HRESULT WINAPI -IDirectDraw4Impl_GetGDISurface(LPDIRECTDRAW4 This, - LPDIRECTDRAWSURFACE4 *ppSurf) +HRESULT WINAPI +ThunkDirectDraw4_GetGDISurface(LPDIRECTDRAW4 iface, LPDIRECTDRAWSURFACE4 *lplpGDIDDSSurface) { - return IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - (LPDIRECTDRAWSURFACE7 *)ppSurf); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetGDISurface((LPDIRECTDRAW7) iface, (LPDIRECTDRAWSURFACE7 *) lplpGDIDDSSurface); } -static HRESULT WINAPI -IDirectDrawImpl_GetMonitorFrequency(LPDIRECTDRAW This, LPDWORD pdwFreq) +HRESULT WINAPI +ThunkDirectDraw_GetMonitorFrequency(LPDIRECTDRAW iface, LPDWORD pdwFreq) { - return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This), - pdwFreq); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetMonitorFrequency((LPDIRECTDRAW7) iface, pdwFreq); } -static HRESULT WINAPI -IDirectDraw2Impl_GetMonitorFrequency(LPDIRECTDRAW2 This, LPDWORD pdwFreq) +HRESULT WINAPI +ThunkDirectDraw2_GetMonitorFrequency(LPDIRECTDRAW2 iface, LPDWORD pdwFreq) { - return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), - pdwFreq); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetMonitorFrequency((LPDIRECTDRAW7) iface, pdwFreq); } -static HRESULT WINAPI -IDirectDraw4Impl_GetMonitorFrequency(LPDIRECTDRAW4 This, LPDWORD pdwFreq) +HRESULT WINAPI +ThunkDirectDraw4_GetMonitorFrequency(LPDIRECTDRAW4 iface, LPDWORD pdwFreq) { - return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - pdwFreq); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetMonitorFrequency((LPDIRECTDRAW7) iface, pdwFreq); } -static HRESULT WINAPI -IDirectDrawImpl_GetScanLine(LPDIRECTDRAW This, LPDWORD pdwLine) +HRESULT WINAPI +ThunkDirectDraw_GetScanLine(LPDIRECTDRAW iface, LPDWORD lpdwScanLine) { - return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This), pdwLine); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetScanLine((LPDIRECTDRAW7) iface, lpdwScanLine); } -static HRESULT WINAPI -IDirectDraw2Impl_GetScanLine(LPDIRECTDRAW2 This, LPDWORD pdwLine) +HRESULT WINAPI +ThunkDirectDraw2_GetScanLine(LPDIRECTDRAW2 iface, LPDWORD lpdwScanLine) { - return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), pdwLine); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetScanLine((LPDIRECTDRAW7) iface, lpdwScanLine); } -static HRESULT WINAPI -IDirectDraw4Impl_GetScanLine(LPDIRECTDRAW4 This, LPDWORD pdwLine) +HRESULT WINAPI +ThunkDirectDraw4_GetScanLine(LPDIRECTDRAW4 iface, LPDWORD lpdwScanLine) { - return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), pdwLine); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetScanLine((LPDIRECTDRAW7) iface, lpdwScanLine); } -static HRESULT WINAPI -IDirectDrawImpl_GetVerticalBlankStatus(LPDIRECTDRAW This, LPBOOL lpbIsInVB) +HRESULT WINAPI +ThunkDirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW iface, LPBOOL lpbIsInVB) { - return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This), - lpbIsInVB); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetVerticalBlankStatus((LPDIRECTDRAW7) iface, lpbIsInVB); } -static HRESULT WINAPI -IDirectDraw2Impl_GetVerticalBlankStatus(LPDIRECTDRAW2 This, LPBOOL lpbIsInVB) +HRESULT WINAPI +ThunkDirectDraw2_GetVerticalBlankStatus(LPDIRECTDRAW2 iface, LPBOOL lpbIsInVB) { - return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), - lpbIsInVB); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetVerticalBlankStatus((LPDIRECTDRAW7) iface, lpbIsInVB); } -static HRESULT WINAPI -IDirectDraw4Impl_GetVerticalBlankStatus(LPDIRECTDRAW4 This, LPBOOL lpbIsInVB) +HRESULT WINAPI +ThunkDirectDraw4_GetVerticalBlankStatus(LPDIRECTDRAW4 iface, LPBOOL lpbIsInVB) { - return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - lpbIsInVB); + DX_WINDBG_trace(); + + return Main_DirectDraw_GetVerticalBlankStatus((LPDIRECTDRAW7) iface, lpbIsInVB); } -static HRESULT WINAPI -IDirectDrawImpl_Initialize(LPDIRECTDRAW iface, LPGUID pGUID) +HRESULT WINAPI +ThunkDirectDraw_Initialize(LPDIRECTDRAW iface, LPGUID pGUID) { - ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw, iface); - HRESULT ret_value; - - ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID); - - /* Overwrite the falsely set 'DIRECTDRAW7' flag */ - //This->local.dwLocalFlags &= ~DDRAWILCL_DIRECTDRAW7; - - return ret_value; + DX_WINDBG_trace(); + + if (iface==NULL) + { + return DDERR_NOTINITIALIZED; + } + + return DDERR_ALREADYINITIALIZED; } -static HRESULT WINAPI -IDirectDraw2Impl_Initialize(LPDIRECTDRAW2 iface, LPGUID pGUID) +HRESULT WINAPI +ThunkDirectDraw2_Initialize(LPDIRECTDRAW2 iface, LPGUID pGUID) { - ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw2, iface); - HRESULT ret_value; - - ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID); - - /* Overwrite the falsely set 'DIRECTDRAW7' flag */ - //This->local.dwLocalFlags &= ~DDRAWILCL_DIRECTDRAW7; - - return ret_value; + DX_WINDBG_trace(); + + if (iface==NULL) + { + return DDERR_NOTINITIALIZED; + } + + return DDERR_ALREADYINITIALIZED; } -static HRESULT WINAPI -IDirectDraw4Impl_Initialize(LPDIRECTDRAW4 iface, LPGUID pGUID) +HRESULT WINAPI +ThunkDirectDraw4_Initialize(LPDIRECTDRAW4 iface, LPGUID pGUID) { - ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw4, iface); - HRESULT ret_value; - - ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID); - - /* Overwrite the falsely set 'DIRECTDRAW7' flag */ - //This->local.dwLocalFlags &= ~DDRAWILCL_DIRECTDRAW7; - - return ret_value; + DX_WINDBG_trace(); + + if (iface==NULL) + { + return DDERR_NOTINITIALIZED; + } + + return DDERR_ALREADYINITIALIZED; } -static HRESULT WINAPI -IDirectDrawImpl_RestoreDisplayMode(LPDIRECTDRAW This) +HRESULT WINAPI +ThunkDirectDraw_RestoreDisplayMode(LPDIRECTDRAW iface) { - return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_RestoreDisplayMode((LPDIRECTDRAW7) iface); } -static HRESULT WINAPI -IDirectDraw2Impl_RestoreDisplayMode(LPDIRECTDRAW2 This) +HRESULT WINAPI +ThunkDirectDraw2_RestoreDisplayMode(LPDIRECTDRAW2 iface) { - return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_RestoreDisplayMode((LPDIRECTDRAW7) iface); } -static HRESULT WINAPI -IDirectDraw4Impl_RestoreDisplayMode(LPDIRECTDRAW4 This) +HRESULT WINAPI +ThunkDirectDraw4_RestoreDisplayMode(LPDIRECTDRAW4 iface) { - return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This)); + DX_WINDBG_trace(); + + return Main_DirectDraw_RestoreDisplayMode((LPDIRECTDRAW7) iface); } -static HRESULT WINAPI -IDirectDrawImpl_SetCooperativeLevel(LPDIRECTDRAW This, HWND hWnd, - DWORD dwFlags) +HRESULT WINAPI +ThunkDirectDraw_SetCooperativeLevel(LPDIRECTDRAW iface, HWND hwnd, DWORD dwFlags) { - return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This), - hWnd, dwFlags); + DX_WINDBG_trace(); + + return Main_DirectDraw_SetCooperativeLevel ((LPDIRECTDRAW7) iface, hwnd, dwFlags); } -static HRESULT WINAPI -IDirectDraw2Impl_SetCooperativeLevel(LPDIRECTDRAW2 This, HWND hWnd, - DWORD dwFlags) +HRESULT WINAPI +ThunkDirectDraw2_SetCooperativeLevel(LPDIRECTDRAW2 iface, HWND hwnd, DWORD dwFlags) { - return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), - hWnd, dwFlags); + DX_WINDBG_trace(); + + return Main_DirectDraw_SetCooperativeLevel ((LPDIRECTDRAW7) iface, hwnd, dwFlags); } -static HRESULT WINAPI -IDirectDraw4Impl_SetCooperativeLevel(LPDIRECTDRAW4 This, HWND hWnd, - DWORD dwFlags) +HRESULT WINAPI +ThunkDirectDraw4_SetCooperativeLevel(LPDIRECTDRAW4 iface, HWND hwnd, DWORD dwFlags) { - return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - hWnd, dwFlags); + DX_WINDBG_trace(); + + return Main_DirectDraw_SetCooperativeLevel ((LPDIRECTDRAW7) iface, hwnd, dwFlags); } -static HRESULT WINAPI -IDirectDrawImpl_SetDisplayMode(LPDIRECTDRAW This, DWORD a, DWORD b, DWORD c) +HRESULT WINAPI +ThunkDirectDraw_SetDisplayMode(LPDIRECTDRAW iface, DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) { - return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This), - a, b, c, 0, 0); + DX_WINDBG_trace(); + + return Main_DirectDraw_SetDisplayMode ((LPDIRECTDRAW7) iface, dwWidth, dwHeight, dwBPP, 0, 0); } -static HRESULT WINAPI -IDirectDraw2Impl_SetDisplayMode(LPDIRECTDRAW2 This, DWORD a, DWORD b, DWORD c, - DWORD d, DWORD e) +HRESULT WINAPI +ThunkDirectDraw2_SetDisplayMode(LPDIRECTDRAW2 iface, DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD d, DWORD e) { - return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), - a, b, c, d, e); + DX_WINDBG_trace(); + + return Main_DirectDraw_SetDisplayMode ((LPDIRECTDRAW7) iface, dwWidth, dwHeight, dwBPP, 0, 0); } -static HRESULT WINAPI -IDirectDraw4Impl_SetDisplayMode(LPDIRECTDRAW4 This, DWORD a, DWORD b, DWORD c, - DWORD d, DWORD e) +HRESULT WINAPI +ThunkDirectDraw4_SetDisplayMode(LPDIRECTDRAW4 iface, DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD d, DWORD e) { - return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - a, b, c, d, e); + DX_WINDBG_trace(); + + return Main_DirectDraw_SetDisplayMode ((LPDIRECTDRAW7) iface, dwWidth, dwHeight, dwBPP, 0, 0); } -static HRESULT WINAPI -IDirectDrawImpl_WaitForVerticalBlank(LPDIRECTDRAW This, DWORD dwFlags, - HANDLE hEvent) +HRESULT WINAPI +ThunkDirectDraw_WaitForVerticalBlank(LPDIRECTDRAW iface, DWORD dwFlags, HANDLE hEvent) { - return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw, - IDirectDraw7, - This), - dwFlags, hEvent); + DX_WINDBG_trace(); + + return Main_DirectDraw_WaitForVerticalBlank((LPDIRECTDRAW7) iface, dwFlags, hEvent); } -static HRESULT WINAPI -IDirectDraw2Impl_WaitForVerticalBlank(LPDIRECTDRAW2 This, DWORD dwFlags, - HANDLE hEvent) +HRESULT WINAPI +ThunkDirectDraw2_WaitForVerticalBlank(LPDIRECTDRAW2 iface, DWORD dwFlags, HANDLE hEvent) { - return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), - dwFlags, hEvent); + DX_WINDBG_trace(); + + return Main_DirectDraw_WaitForVerticalBlank((LPDIRECTDRAW7) iface, dwFlags, hEvent); } -static HRESULT WINAPI -IDirectDraw4Impl_WaitForVerticalBlank(LPDIRECTDRAW4 This, DWORD dwFlags, - HANDLE hEvent) +HRESULT WINAPI +ThunkDirectDraw4_WaitForVerticalBlank(LPDIRECTDRAW4 iface, DWORD dwFlags, HANDLE hEvent) { - return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - dwFlags, hEvent); + DX_WINDBG_trace(); + + return Main_DirectDraw_WaitForVerticalBlank((LPDIRECTDRAW7) iface, dwFlags, hEvent); } -void DDRAW_Convert_DDSCAPS_1_To_2(const DDSCAPS* pIn, DDSCAPS2* pOut) +HRESULT WINAPI +ThunkDirectDraw2_GetAvailableVidMem(LPDIRECTDRAW2 iface, LPDDSCAPS pCaps, LPDWORD pdwTotal, LPDWORD pdwFree) { - /* 2 adds three additional caps fields to the end. Both versions - * are unversioned. */ - pOut->dwCaps = pIn->dwCaps; - pOut->dwCaps2 = 0; - pOut->dwCaps3 = 0; - pOut->dwCaps4 = 0; + HRESULT retValue = DDERR_GENERIC; + + DX_WINDBG_trace(); + + if (pCaps != NULL) + { + DDSCAPS2 pCaps2; + ZeroMemory(&pCaps2,sizeof(DDSCAPS2)); + memcpy(&pCaps2, pCaps, sizeof(DDSCAPS)); + retValue = Main_DirectDraw_GetAvailableVidMem((LPDIRECTDRAW7) iface, &pCaps2, pdwTotal, pdwFree); + memcpy(pCaps, &pCaps2, sizeof(DDSCAPS)); + } + else + { + retValue = Main_DirectDraw_GetAvailableVidMem((LPDIRECTDRAW7) iface, NULL, pdwTotal, pdwFree); + } + + return retValue; } -static HRESULT WINAPI -IDirectDraw2Impl_GetAvailableVidMem(LPDIRECTDRAW2 This, LPDDSCAPS pCaps, - LPDWORD pdwTotal, LPDWORD pdwFree) +HRESULT WINAPI +ThunkDirectDraw4_GetAvailableVidMem(LPDIRECTDRAW4 iface, LPDDSCAPS2 pCaps, LPDWORD pdwTotal, LPDWORD pdwFree) +{ + DX_WINDBG_trace(); + + return Main_DirectDraw_GetAvailableVidMem((LPDIRECTDRAW7) iface, pCaps, pdwTotal, pdwFree); +} + +HRESULT WINAPI +ThunkDirectDraw4_GetSurfaceFromDC(LPDIRECTDRAW4 iface, HDC hdc, LPDIRECTDRAWSURFACE4 *pSurf) { - DDSCAPS2 Caps2; - DDRAW_Convert_DDSCAPS_1_To_2(pCaps, &Caps2); + DX_WINDBG_trace(); - return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw2, - IDirectDraw7, - This), - &Caps2, pdwTotal, pdwFree); + return Main_DirectDraw_GetSurfaceFromDC((LPDIRECTDRAW7) iface, hdc, (LPDIRECTDRAWSURFACE7 *) pSurf); } -static HRESULT WINAPI -IDirectDraw4Impl_GetAvailableVidMem(LPDIRECTDRAW4 This, LPDDSCAPS2 pCaps, - LPDWORD pdwTotal, LPDWORD pdwFree) +HRESULT WINAPI +ThunkDirectDraw4_RestoreAllSurfaces(LPDIRECTDRAW4 iface) { - return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - pCaps, pdwTotal, pdwFree); + DX_WINDBG_trace(); + + return Main_DirectDraw_RestoreAllSurfaces((LPDIRECTDRAW7) iface); } -static HRESULT WINAPI -IDirectDraw4Impl_GetSurfaceFromDC(LPDIRECTDRAW4 This, HDC hDC, - LPDIRECTDRAWSURFACE4 *pSurf) +HRESULT WINAPI +ThunkDirectDraw4_TestCooperativeLevel(LPDIRECTDRAW4 iface) { - return IDirectDraw7_GetSurfaceFromDC(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - hDC, (LPDIRECTDRAWSURFACE7 *)pSurf); + DX_WINDBG_trace(); + + return Main_DirectDraw_TestCooperativeLevel((LPDIRECTDRAW7) iface); } -static HRESULT WINAPI -IDirectDraw4Impl_RestoreAllSurfaces(LPDIRECTDRAW4 This) -{ - return IDirectDraw7_RestoreAllSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This)); -} -static HRESULT WINAPI -IDirectDraw4Impl_TestCooperativeLevel(LPDIRECTDRAW4 This) -{ - return IDirectDraw7_TestCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This)); -} -void DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(const DDDEVICEIDENTIFIER2* pIn, - DDDEVICEIDENTIFIER* pOut) -{ - /* 2 adds a dwWHQLLevel field to the end. Both structures are - * unversioned. */ - memcpy(pOut, pIn, sizeof(*pOut)); -} - -static HRESULT WINAPI -IDirectDraw4Impl_GetDeviceIdentifier(LPDIRECTDRAW4 This, +HRESULT WINAPI +ThunkDirectDraw4_GetDeviceIdentifier(LPDIRECTDRAW4 iface, LPDDDEVICEIDENTIFIER pDDDI, DWORD dwFlags) { - DDDEVICEIDENTIFIER2 DDDI2; - HRESULT hr; + HRESULT retValue = DDERR_GENERIC; + + DX_WINDBG_trace(); - hr = IDirectDraw7_GetDeviceIdentifier(COM_INTERFACE_CAST(IDirectDrawImpl, - IDirectDraw4, - IDirectDraw7, - This), - &DDDI2, dwFlags); + if (pDDDI != NULL) + { + + DDDEVICEIDENTIFIER2 pDDDI2; + ZeroMemory(&pDDDI2,sizeof(DDDEVICEIDENTIFIER2)); + memcpy(&pDDDI2, pDDDI, sizeof(DDDEVICEIDENTIFIER)); + retValue = Main_DirectDraw_GetDeviceIdentifier((LPDIRECTDRAW7) iface, &pDDDI2, dwFlags); + memcpy(pDDDI, &pDDDI2, sizeof(DDDEVICEIDENTIFIER)); + } + else + { + retValue = Main_DirectDraw_GetDeviceIdentifier((LPDIRECTDRAW7) iface, NULL, dwFlags); + } - DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(&DDDI2, pDDDI); - - return hr; + return retValue; } -IDirectDrawVtbl DDRAW_IDirectDraw_VTable = + + +IDirectDrawVtbl DirectDraw_Vtable = { - IDirectDrawImpl_QueryInterface, - IDirectDrawImpl_AddRef, - IDirectDrawImpl_Release, - IDirectDrawImpl_Compact, - IDirectDrawImpl_CreateClipper, - IDirectDrawImpl_CreatePalette, - IDirectDrawImpl_CreateSurface, - IDirectDrawImpl_DuplicateSurface, - IDirectDrawImpl_EnumDisplayModes, - IDirectDrawImpl_EnumSurfaces, - IDirectDrawImpl_FlipToGDISurface, - IDirectDrawImpl_GetCaps, - IDirectDrawImpl_GetDisplayMode, - IDirectDrawImpl_GetFourCCCodes, - IDirectDrawImpl_GetGDISurface, - IDirectDrawImpl_GetMonitorFrequency, - IDirectDrawImpl_GetScanLine, - IDirectDrawImpl_GetVerticalBlankStatus, - IDirectDrawImpl_Initialize, - IDirectDrawImpl_RestoreDisplayMode, - IDirectDrawImpl_SetCooperativeLevel, - IDirectDrawImpl_SetDisplayMode, - IDirectDrawImpl_WaitForVerticalBlank, + ThunkDirectDraw_QueryInterface, + ThunkDirectDraw_AddRef, + ThunkDirectDraw_Release, + ThunkDirectDraw_Compact, + ThunkDirectDraw_CreateClipper, + ThunkDirectDraw_CreatePalette, + ThunkDirectDraw_CreateSurface, + ThunkDirectDraw_DuplicateSurface, + ThunkDirectDraw_EnumDisplayModes, + ThunkDirectDraw_EnumSurfaces, + ThunkDirectDraw_FlipToGDISurface, + ThunkDirectDraw_GetCaps, + ThunkDirectDraw_GetDisplayMode, + ThunkDirectDraw_GetFourCCCodes, + ThunkDirectDraw_GetGDISurface, + ThunkDirectDraw_GetMonitorFrequency, + ThunkDirectDraw_GetScanLine, + ThunkDirectDraw_GetVerticalBlankStatus, + ThunkDirectDraw_Initialize, + ThunkDirectDraw_RestoreDisplayMode, + ThunkDirectDraw_SetCooperativeLevel, + ThunkDirectDraw_SetDisplayMode, + ThunkDirectDraw_WaitForVerticalBlank, }; -IDirectDraw2Vtbl DDRAW_IDirectDraw2_VTable = +IDirectDraw2Vtbl DirectDraw2_Vtable = { - IDirectDraw2Impl_QueryInterface, - IDirectDraw2Impl_AddRef, - IDirectDraw2Impl_Release, - IDirectDraw2Impl_Compact, - IDirectDraw2Impl_CreateClipper, - IDirectDraw2Impl_CreatePalette, - IDirectDraw2Impl_CreateSurface, - IDirectDraw2Impl_DuplicateSurface, - IDirectDraw2Impl_EnumDisplayModes, - IDirectDraw2Impl_EnumSurfaces, - IDirectDraw2Impl_FlipToGDISurface, - IDirectDraw2Impl_GetCaps, - IDirectDraw2Impl_GetDisplayMode, - IDirectDraw2Impl_GetFourCCCodes, - IDirectDraw2Impl_GetGDISurface, - IDirectDraw2Impl_GetMonitorFrequency, - IDirectDraw2Impl_GetScanLine, - IDirectDraw2Impl_GetVerticalBlankStatus, - IDirectDraw2Impl_Initialize, - IDirectDraw2Impl_RestoreDisplayMode, - IDirectDraw2Impl_SetCooperativeLevel, - IDirectDraw2Impl_SetDisplayMode, - IDirectDraw2Impl_WaitForVerticalBlank, - IDirectDraw2Impl_GetAvailableVidMem + ThunkDirectDraw2_QueryInterface, + ThunkDirectDraw2_AddRef, + ThunkDirectDraw2_Release, + ThunkDirectDraw2_Compact, + ThunkDirectDraw2_CreateClipper, + ThunkDirectDraw2_CreatePalette, + ThunkDirectDraw2_CreateSurface, + ThunkDirectDraw2_DuplicateSurface, + ThunkDirectDraw2_EnumDisplayModes, + ThunkDirectDraw2_EnumSurfaces, + ThunkDirectDraw2_FlipToGDISurface, + ThunkDirectDraw2_GetCaps, + ThunkDirectDraw2_GetDisplayMode, + ThunkDirectDraw2_GetFourCCCodes, + ThunkDirectDraw2_GetGDISurface, + ThunkDirectDraw2_GetMonitorFrequency, + ThunkDirectDraw2_GetScanLine, + ThunkDirectDraw2_GetVerticalBlankStatus, + ThunkDirectDraw2_Initialize, + ThunkDirectDraw2_RestoreDisplayMode, + ThunkDirectDraw2_SetCooperativeLevel, + ThunkDirectDraw2_SetDisplayMode, + ThunkDirectDraw2_WaitForVerticalBlank, + ThunkDirectDraw2_GetAvailableVidMem }; -IDirectDraw4Vtbl DDRAW_IDirectDraw4_VTable = +IDirectDraw4Vtbl DirectDraw4_Vtable = { - IDirectDraw4Impl_QueryInterface, - IDirectDraw4Impl_AddRef, - IDirectDraw4Impl_Release, - IDirectDraw4Impl_Compact, - IDirectDraw4Impl_CreateClipper, - IDirectDraw4Impl_CreatePalette, - IDirectDraw4Impl_CreateSurface, - IDirectDraw4Impl_DuplicateSurface, - IDirectDraw4Impl_EnumDisplayModes, - IDirectDraw4Impl_EnumSurfaces, - IDirectDraw4Impl_FlipToGDISurface, - IDirectDraw4Impl_GetCaps, - IDirectDraw4Impl_GetDisplayMode, - IDirectDraw4Impl_GetFourCCCodes, - IDirectDraw4Impl_GetGDISurface, - IDirectDraw4Impl_GetMonitorFrequency, - IDirectDraw4Impl_GetScanLine, - IDirectDraw4Impl_GetVerticalBlankStatus, - IDirectDraw4Impl_Initialize, - IDirectDraw4Impl_RestoreDisplayMode, - IDirectDraw4Impl_SetCooperativeLevel, - IDirectDraw4Impl_SetDisplayMode, - IDirectDraw4Impl_WaitForVerticalBlank, - IDirectDraw4Impl_GetAvailableVidMem, - IDirectDraw4Impl_GetSurfaceFromDC, - IDirectDraw4Impl_RestoreAllSurfaces, - IDirectDraw4Impl_TestCooperativeLevel, - IDirectDraw4Impl_GetDeviceIdentifier + ThunkDirectDraw4_QueryInterface, + ThunkDirectDraw4_AddRef, + ThunkDirectDraw4_Release, + ThunkDirectDraw4_Compact, + ThunkDirectDraw4_CreateClipper, + ThunkDirectDraw4_CreatePalette, + ThunkDirectDraw4_CreateSurface, + ThunkDirectDraw4_DuplicateSurface, + ThunkDirectDraw4_EnumDisplayModes, + ThunkDirectDraw4_EnumSurfaces, + ThunkDirectDraw4_FlipToGDISurface, + ThunkDirectDraw4_GetCaps, + ThunkDirectDraw4_GetDisplayMode, + ThunkDirectDraw4_GetFourCCCodes, + ThunkDirectDraw4_GetGDISurface, + ThunkDirectDraw4_GetMonitorFrequency, + ThunkDirectDraw4_GetScanLine, + ThunkDirectDraw4_GetVerticalBlankStatus, + ThunkDirectDraw4_Initialize, + ThunkDirectDraw4_RestoreDisplayMode, + ThunkDirectDraw4_SetCooperativeLevel, + ThunkDirectDraw4_SetDisplayMode, + ThunkDirectDraw4_WaitForVerticalBlank, + ThunkDirectDraw4_GetAvailableVidMem, + ThunkDirectDraw4_GetSurfaceFromDC, + ThunkDirectDraw4_RestoreAllSurfaces, + ThunkDirectDraw4_TestCooperativeLevel, + ThunkDirectDraw4_GetDeviceIdentifier }; diff --git a/reactos/dll/directx/ddraw/thunks/surface_thunk.c b/reactos/dll/directx/ddraw/thunks/surface_thunk.c index bf7abde3311..ed8d36da8e6 100644 --- a/reactos/dll/directx/ddraw/thunks/surface_thunk.c +++ b/reactos/dll/directx/ddraw/thunks/surface_thunk.c @@ -1,430 +1,522 @@ -/* IDirectDrawSurface3 -> IDirectDrawSurface7 thunks - * Copyright 2000 TransGaming Technologies Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -/* - * Taken form wine (wine/dlls/ddraw/surface_thunks.c rev 1.2) - * with some little changes - * - */ -#include "../winedraw.h" +#include "../rosdraw.h" -#define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \ - IDirectDrawSurface3, \ - IDirectDrawSurface7, \ - (pdds)) -#define CONVERT_REV(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \ - IDirectDrawSurface7, \ - IDirectDrawSurface3, \ - (pdds)) -static HRESULT WINAPI -IDirectDrawSurface3Impl_QueryInterface(LPDIRECTDRAWSURFACE3 This, REFIID iid, +HRESULT WINAPI +Thunk_DDrawSurface3_QueryInterface(LPDIRECTDRAWSURFACE3 iface, REFIID iid, LPVOID *ppObj) { - return IDirectDrawSurface7_QueryInterface(CONVERT(This), iid, ppObj); + DX_WINDBG_trace(); + + return Main_DDrawSurface_QueryInterface((LPDIRECTDRAWSURFACE7) iface, iid, ppObj); } -static ULONG WINAPI -IDirectDrawSurface3Impl_AddRef(LPDIRECTDRAWSURFACE3 This) +ULONG WINAPI +Thunk_DDrawSurface3_AddRef(LPDIRECTDRAWSURFACE3 iface) { - return IDirectDrawSurface7_AddRef(CONVERT(This)); + DX_WINDBG_trace(); + + return Main_DDrawSurface_AddRef((LPDIRECTDRAWSURFACE7) iface); } -static ULONG WINAPI -IDirectDrawSurface3Impl_Release(LPDIRECTDRAWSURFACE3 This) +ULONG WINAPI +Thunk_DDrawSurface3_Release(LPDIRECTDRAWSURFACE3 iface) { - return IDirectDrawSurface7_Release(CONVERT(This)); + DX_WINDBG_trace(); + + return Main_DDrawSurface_Release((LPDIRECTDRAWSURFACE7) iface); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_AddAttachedSurface(LPDIRECTDRAWSURFACE3 This, - LPDIRECTDRAWSURFACE3 pAttach) +HRESULT WINAPI +Thunk_DDrawSurface3_AddAttachedSurface(LPDIRECTDRAWSURFACE3 iface, LPDIRECTDRAWSURFACE3 pAttach) { - return IDirectDrawSurface7_AddAttachedSurface(CONVERT(This), - CONVERT(pAttach)); + DX_WINDBG_trace(); + + return Main_DDrawSurface_AddAttachedSurface((LPDIRECTDRAWSURFACE7) iface, (LPDIRECTDRAWSURFACE7) pAttach); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_AddOverlayDirtyRect(LPDIRECTDRAWSURFACE3 This, - LPRECT pRect) +HRESULT WINAPI +Thunk_DDrawSurface3_AddOverlayDirtyRect(LPDIRECTDRAWSURFACE3 iface, LPRECT pRect) { - return IDirectDrawSurface7_AddOverlayDirtyRect(CONVERT(This), pRect); + DX_WINDBG_trace(); + + return Main_DDrawSurface_AddOverlayDirtyRect((LPDIRECTDRAWSURFACE7) iface, pRect); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_Blt(LPDIRECTDRAWSURFACE3 This, LPRECT prcDst, - LPDIRECTDRAWSURFACE3 pSrcSurf, LPRECT prcSrc, +HRESULT WINAPI +Thunk_DDrawSurface3_Blt(LPDIRECTDRAWSURFACE3 iface, LPRECT rdst, + LPDIRECTDRAWSURFACE3 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX pFX) { - return IDirectDrawSurface7_Blt(CONVERT(This), prcDst, CONVERT(pSrcSurf), - prcSrc, dwFlags, pFX); + DX_WINDBG_trace(); + + return Main_DDrawSurface_Blt((LPDIRECTDRAWSURFACE7) iface, rdst,(LPDIRECTDRAWSURFACE7) src, rsrc, dwFlags, pFX); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_BltBatch(LPDIRECTDRAWSURFACE3 This, - LPDDBLTBATCH pBatch, DWORD dwCount, - DWORD dwFlags) +HRESULT WINAPI +Thunk_DDrawSurface3_BltBatch(LPDIRECTDRAWSURFACE3 iface, LPDDBLTBATCH pBatch, DWORD dwCount, DWORD dwFlags) { - return IDirectDrawSurface7_BltBatch(CONVERT(This), pBatch, dwCount, - dwFlags); + DX_WINDBG_trace(); + + return Main_DDrawSurface_BltBatch((LPDIRECTDRAWSURFACE7) iface, pBatch, dwCount, dwFlags); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_BltFast(LPDIRECTDRAWSURFACE3 This, DWORD x, DWORD y, - LPDIRECTDRAWSURFACE3 pSrcSurf, LPRECT prcSrc, - DWORD dwTrans) +HRESULT WINAPI +Thunk_DDrawSurface3_BltFast(LPDIRECTDRAWSURFACE3 iface, DWORD dstx, DWORD dsty, + LPDIRECTDRAWSURFACE3 src, LPRECT rsrc, DWORD dwTrans) { - return IDirectDrawSurface7_BltFast(CONVERT(This), x, y, CONVERT(pSrcSurf), - prcSrc, dwTrans); + DX_WINDBG_trace(); + + return Main_DDrawSurface_BltFast((LPDIRECTDRAWSURFACE7) iface, dstx, dsty, + (LPDIRECTDRAWSURFACE7)src, rsrc, dwTrans); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_DeleteAttachedSurface(LPDIRECTDRAWSURFACE3 This, - DWORD dwFlags, - LPDIRECTDRAWSURFACE3 pAttached) +HRESULT WINAPI +Thunk_DDrawSurface3_DeleteAttachedSurface(LPDIRECTDRAWSURFACE3 iface, DWORD dwFlags, LPDIRECTDRAWSURFACE3 pAttached) { - return IDirectDrawSurface7_DeleteAttachedSurface(CONVERT(This), dwFlags, - CONVERT(pAttached)); + DX_WINDBG_trace(); + + return Main_DDrawSurface_DeleteAttachedSurface((LPDIRECTDRAWSURFACE7) iface, dwFlags, + (LPDIRECTDRAWSURFACE7) pAttached); } -struct callback_info -{ - LPDDENUMSURFACESCALLBACK callback; - LPVOID context; -}; -static HRESULT CALLBACK -EnumCallback(LPDIRECTDRAWSURFACE7 iface, LPDDSURFACEDESC2 pDDSD, - LPVOID context) -{ - const struct callback_info* info = context; -#if 0 - /* This is an outgoing conversion so we have to do it. */ - DDSURFACEDESC ddsd; - memset(&ddsd, 0, sizeof(ddsd)); - ddsd.dwSize = sizeof(ddsd); - DDRAW_Convert_DDSURFACEDESC_2_To_1(pDDSD, &ddsd); -#endif - - /* the LPDDSURFACEDESC2 -> LPDDSURFACEDESC coercion is safe, since - * the data format is compatible with older enum procs */ - return info->callback((LPDIRECTDRAWSURFACE)CONVERT_REV(iface), (LPDDSURFACEDESC)pDDSD, - info->context); -} - -static HRESULT WINAPI -IDirectDrawSurface3Impl_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE3 This, +HRESULT WINAPI +Thunk_DDrawSurface3_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE3 iface, LPVOID context, - LPDDENUMSURFACESCALLBACK callback) -{ - struct callback_info info; + LPDDENUMSURFACESCALLBACK cb) +{ + DX_WINDBG_trace(); - info.callback = callback; - info.context = context; - - return IDirectDrawSurface7_EnumAttachedSurfaces(CONVERT(This), &info, - EnumCallback); + return Main_DDrawSurface_EnumAttachedSurfaces((LPDIRECTDRAWSURFACE7) iface, + context, (LPDDENUMSURFACESCALLBACK7)cb); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_EnumOverlayZOrders(LPDIRECTDRAWSURFACE3 This, +HRESULT WINAPI +Thunk_DDrawSurface3_EnumOverlayZOrders(LPDIRECTDRAWSURFACE3 iface, DWORD dwFlags, LPVOID context, - LPDDENUMSURFACESCALLBACK callback) + LPDDENUMSURFACESCALLBACK cb) { - struct callback_info info; + DX_WINDBG_trace(); - info.callback = callback; - info.context = context; - - return IDirectDrawSurface7_EnumOverlayZOrders(CONVERT(This), dwFlags, - &info, EnumCallback); + return Main_DDrawSurface_EnumOverlayZOrders( (LPDIRECTDRAWSURFACE7) iface, dwFlags, context, + (LPDDENUMSURFACESCALLBACK7) cb); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_Flip(LPDIRECTDRAWSURFACE3 This, - LPDIRECTDRAWSURFACE3 pOverride, DWORD dwFlags) +HRESULT WINAPI +Thunk_DDrawSurface3_Flip(LPDIRECTDRAWSURFACE3 iface, + LPDIRECTDRAWSURFACE3 lpDDSurfaceTargetOverride, DWORD dwFlags) { - return IDirectDrawSurface7_Flip(CONVERT(This), CONVERT(pOverride), - dwFlags); + DX_WINDBG_trace(); + + return Main_DDrawSurface_Flip( (LPDIRECTDRAWSURFACE7)iface, (LPDIRECTDRAWSURFACE7) lpDDSurfaceTargetOverride, + dwFlags); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_GetAttachedSurface(LPDIRECTDRAWSURFACE3 This, +HRESULT WINAPI +Thunk_DDrawSurface3_GetAttachedSurface(LPDIRECTDRAWSURFACE3 iface, LPDDSCAPS pCaps, LPDIRECTDRAWSURFACE3* ppAttached) { - DDSCAPS2 caps; - LPDIRECTDRAWSURFACE7 pAttached7; - HRESULT hr; + DDSCAPS2 caps; + HRESULT hr = DDERR_GENERIC; - caps.dwCaps = pCaps->dwCaps; - caps.dwCaps2 = 0; - caps.dwCaps3 = 0; - caps.dwCaps4 = 0; + DX_WINDBG_trace(); - hr = IDirectDrawSurface7_GetAttachedSurface(CONVERT(This), &caps, - &pAttached7); - if (FAILED(hr)) return hr; + ZeroMemory(&caps,sizeof(DDSCAPS2)); + + if (pCaps != NULL) + { + caps.dwCaps = pCaps->dwCaps; + + hr = Main_DDrawSurface_GetAttachedSurface( (LPDIRECTDRAWSURFACE7) iface, + &caps, (LPDIRECTDRAWSURFACE7 *) ppAttached); + pCaps->dwCaps = caps.dwCaps; + } + else + { + hr = Main_DDrawSurface_GetAttachedSurface( (LPDIRECTDRAWSURFACE7) iface, + NULL, (LPDIRECTDRAWSURFACE7 *) ppAttached); + } - *ppAttached = CONVERT_REV(pAttached7); return hr; } -static HRESULT WINAPI -IDirectDrawSurface3Impl_GetBltStatus(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags) +HRESULT WINAPI +Thunk_DDrawSurface3_GetBltStatus(LPDIRECTDRAWSURFACE3 iface, DWORD dwFlags) { - return IDirectDrawSurface7_GetBltStatus(CONVERT(This), dwFlags); + DX_WINDBG_trace(); + + return Main_DDrawSurface_GetBltStatus((LPDIRECTDRAWSURFACE7) iface, dwFlags); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_GetCaps(LPDIRECTDRAWSURFACE3 This, LPDDSCAPS pCaps) +HRESULT WINAPI +Thunk_DDrawSurface3_GetCaps(LPDIRECTDRAWSURFACE3 iface, LPDDSCAPS pCaps) { DDSCAPS2 caps; - HRESULT hr; + HRESULT hr = DDERR_GENERIC; - hr = IDirectDrawSurface7_GetCaps(CONVERT(This), &caps); - if (FAILED(hr)) return hr; + DX_WINDBG_trace(); + + ZeroMemory(&caps,sizeof(DDSCAPS2)); + + if (pCaps != NULL) + { + hr = Main_DDrawSurface_GetCaps((LPDIRECTDRAWSURFACE7) iface, &caps); + pCaps->dwCaps = caps.dwCaps; + } + else + { + hr = Main_DDrawSurface_GetCaps((LPDIRECTDRAWSURFACE7) iface, NULL); + } - pCaps->dwCaps = caps.dwCaps; return hr; } -static HRESULT WINAPI -IDirectDrawSurface3Impl_GetClipper(LPDIRECTDRAWSURFACE3 This, +HRESULT WINAPI +Thunk_DDrawSurface3_GetClipper(LPDIRECTDRAWSURFACE3 iface, LPDIRECTDRAWCLIPPER* ppClipper) { - return IDirectDrawSurface7_GetClipper(CONVERT(This), ppClipper); + DX_WINDBG_trace(); + + return Main_DDrawSurface_GetClipper((LPDIRECTDRAWSURFACE7) iface, ppClipper); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_GetColorKey(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags, +HRESULT WINAPI +Thunk_DDrawSurface3_GetColorKey(LPDIRECTDRAWSURFACE3 iface, DWORD dwFlags, LPDDCOLORKEY pCKey) { - return IDirectDrawSurface7_GetColorKey(CONVERT(This), dwFlags, pCKey); + DX_WINDBG_trace(); + + return Main_DDrawSurface_GetColorKey( (LPDIRECTDRAWSURFACE7) iface, dwFlags, pCKey); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_GetDC(LPDIRECTDRAWSURFACE3 This, HDC* phDC) +HRESULT WINAPI +Thunk_DDrawSurface3_GetDC(LPDIRECTDRAWSURFACE3 iface, HDC* phDC) { - return IDirectDrawSurface7_GetDC(CONVERT(This), phDC); + DX_WINDBG_trace(); + + return Main_DDrawSurface_GetDC((LPDIRECTDRAWSURFACE7) iface, phDC); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_GetFlipStatus(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags) +HRESULT WINAPI +Thunk_DDrawSurface3_GetFlipStatus(LPDIRECTDRAWSURFACE3 iface, DWORD dwFlags) { - return IDirectDrawSurface7_GetFlipStatus(CONVERT(This), dwFlags); + DX_WINDBG_trace(); + + return Main_DDrawSurface_GetFlipStatus((LPDIRECTDRAWSURFACE7) iface, dwFlags); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_GetOverlayPosition(LPDIRECTDRAWSURFACE3 This, LPLONG pX, - LPLONG pY) +HRESULT WINAPI +Thunk_DDrawSurface3_GetOverlayPosition(LPDIRECTDRAWSURFACE3 iface, LPLONG pX, LPLONG pY) { - return IDirectDrawSurface7_GetOverlayPosition(CONVERT(This), pX, pY); + DX_WINDBG_trace(); + + return Main_DDrawSurface_GetOverlayPosition((LPDIRECTDRAWSURFACE7) iface, pX, pY); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_GetPalette(LPDIRECTDRAWSURFACE3 This, +HRESULT WINAPI +Thunk_DDrawSurface3_GetPalette(LPDIRECTDRAWSURFACE3 iface, LPDIRECTDRAWPALETTE* ppPalette) { - return IDirectDrawSurface7_GetPalette(CONVERT(This), ppPalette); + DX_WINDBG_trace(); + + return Main_DDrawSurface_GetPalette((LPDIRECTDRAWSURFACE7) iface, ppPalette); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_GetPixelFormat(LPDIRECTDRAWSURFACE3 This, - LPDDPIXELFORMAT pPixelFormat) +HRESULT WINAPI +Thunk_DDrawSurface3_GetPixelFormat(LPDIRECTDRAWSURFACE3 iface, + LPDDPIXELFORMAT pDDPixelFormat) { - return IDirectDrawSurface7_GetPixelFormat(CONVERT(This), pPixelFormat); + DX_WINDBG_trace(); + + return Main_DDrawSurface_GetPixelFormat((LPDIRECTDRAWSURFACE7) iface, pDDPixelFormat); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_GetSurfaceDesc(LPDIRECTDRAWSURFACE3 This, +HRESULT WINAPI +Thunk_DDrawSurface3_GetSurfaceDesc(LPDIRECTDRAWSURFACE3 iface, LPDDSURFACEDESC pDDSD) { - return IDirectDrawSurface7_GetSurfaceDesc(CONVERT(This), - (LPDDSURFACEDESC2)pDDSD); + HRESULT retValue = DDERR_GENERIC; + + DX_WINDBG_trace(); + + if (pDDSD != NULL) + { + DDSURFACEDESC2 pDDSD2; + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + memcpy(&pDDSD2, pDDSD, sizeof(DDSURFACEDESC)); + pDDSD2.dwSize = sizeof(DDSURFACEDESC2); + retValue = Main_DDrawSurface_GetSurfaceDesc((LPDIRECTDRAWSURFACE7) iface, &pDDSD2); + memcpy(pDDSD, &pDDSD2, sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + else + { + retValue = Main_DDrawSurface_GetSurfaceDesc((LPDIRECTDRAWSURFACE7) iface, NULL); + } + + return retValue; } -static HRESULT WINAPI -IDirectDrawSurface3Impl_Initialize(LPDIRECTDRAWSURFACE3 This, LPDIRECTDRAW pDD, +HRESULT WINAPI +Thunk_DDrawSurface3_Initialize(LPDIRECTDRAWSURFACE3 iface, LPDIRECTDRAW pDD, LPDDSURFACEDESC pDDSD) { - return IDirectDrawSurface7_Initialize(CONVERT(This), pDD, - (LPDDSURFACEDESC2)pDDSD); + HRESULT retValue = DDERR_GENERIC; + DDSURFACEDESC2 pDDSD2; + + DX_WINDBG_trace(); + + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + + if (pDDSD != NULL) + { + DDSURFACEDESC2 pDDSD2; + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + memcpy(&pDDSD2, pDDSD, sizeof(DDSURFACEDESC)); + pDDSD2.dwSize = sizeof(DDSURFACEDESC2); + retValue = Main_DDrawSurface_Initialize((LPDIRECTDRAWSURFACE7) iface, pDD, &pDDSD2); + memcpy(pDDSD, &pDDSD2, sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + else + { + retValue = Main_DDrawSurface_Initialize ((LPDIRECTDRAWSURFACE7) iface, pDD, NULL); + + } + + return retValue; } -static HRESULT WINAPI -IDirectDrawSurface3Impl_IsLost(LPDIRECTDRAWSURFACE3 This) +HRESULT WINAPI +Thunk_DDrawSurface3_IsLost(LPDIRECTDRAWSURFACE3 iface) { - return IDirectDrawSurface7_IsLost(CONVERT(This)); + DX_WINDBG_trace(); + + return Main_DDrawSurface_IsLost((LPDIRECTDRAWSURFACE7) iface); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_Lock(LPDIRECTDRAWSURFACE3 This, LPRECT pRect, - LPDDSURFACEDESC pDDSD, DWORD dwFlags, HANDLE h) +HRESULT WINAPI +Thunk_DDrawSurface3_Lock(LPDIRECTDRAWSURFACE3 iface, LPRECT pRect, + LPDDSURFACEDESC pDDSD, DWORD dwFlags, HANDLE events) { - return IDirectDrawSurface7_Lock(CONVERT(This), pRect, - (LPDDSURFACEDESC2)pDDSD, dwFlags, h); + + HRESULT retValue = DDERR_GENERIC; + DDSURFACEDESC2 pDDSD2; + + DX_WINDBG_trace(); + + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + + if (pDDSD != NULL) + { + DDSURFACEDESC2 pDDSD2; + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + memcpy(&pDDSD2, pDDSD, sizeof(DDSURFACEDESC)); + pDDSD2.dwSize = sizeof(DDSURFACEDESC2); + retValue = Main_DDrawSurface_Lock ( (LPDIRECTDRAWSURFACE7) iface, pRect, &pDDSD2, dwFlags, events); + memcpy(pDDSD, &pDDSD2, sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + else + { + retValue = Main_DDrawSurface_Lock ( (LPDIRECTDRAWSURFACE7) iface, pRect, NULL, dwFlags, events); + } + + return retValue; + } -static HRESULT WINAPI -IDirectDrawSurface3Impl_ReleaseDC(LPDIRECTDRAWSURFACE3 This, HDC hDC) +HRESULT WINAPI +Thunk_DDrawSurface3_ReleaseDC(LPDIRECTDRAWSURFACE3 iface, HDC hDC) { - return IDirectDrawSurface7_ReleaseDC(CONVERT(This), hDC); + DX_WINDBG_trace(); + + return Main_DDrawSurface_ReleaseDC((LPDIRECTDRAWSURFACE7) iface, hDC); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_Restore(LPDIRECTDRAWSURFACE3 This) +HRESULT WINAPI +Thunk_DDrawSurface3_Restore(LPDIRECTDRAWSURFACE3 iface) { - return IDirectDrawSurface7_Restore(CONVERT(This)); + DX_WINDBG_trace(); + + return Main_DDrawSurface_Restore((LPDIRECTDRAWSURFACE7) iface); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_SetClipper(LPDIRECTDRAWSURFACE3 This, - LPDIRECTDRAWCLIPPER pClipper) +HRESULT WINAPI +Thunk_DDrawSurface3_SetClipper(LPDIRECTDRAWSURFACE3 iface, LPDIRECTDRAWCLIPPER pDDClipper) { - return IDirectDrawSurface7_SetClipper(CONVERT(This), pClipper); + DX_WINDBG_trace(); + + return Main_DDrawSurface_SetClipper ((LPDIRECTDRAWSURFACE7) iface, pDDClipper); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_SetColorKey(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags, +HRESULT WINAPI +Thunk_DDrawSurface3_SetColorKey(LPDIRECTDRAWSURFACE3 iface, DWORD dwFlags, LPDDCOLORKEY pCKey) { - return IDirectDrawSurface7_SetColorKey(CONVERT(This), dwFlags, pCKey); + DX_WINDBG_trace(); + + return Main_DDrawSurface_SetColorKey ((LPDIRECTDRAWSURFACE7) iface, dwFlags, pCKey); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_SetOverlayPosition(LPDIRECTDRAWSURFACE3 This, LONG x, - LONG y) +HRESULT WINAPI +Thunk_DDrawSurface3_SetOverlayPosition(LPDIRECTDRAWSURFACE3 iface, LONG X,LONG Y) { - return IDirectDrawSurface7_SetOverlayPosition(CONVERT(This), x, y); + DX_WINDBG_trace(); + + return Main_DDrawSurface_SetOverlayPosition ((LPDIRECTDRAWSURFACE7) iface, X, Y); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_SetPalette(LPDIRECTDRAWSURFACE3 This, +HRESULT WINAPI +Thunk_DDrawSurface3_SetPalette(LPDIRECTDRAWSURFACE3 iface, LPDIRECTDRAWPALETTE pPalette) { - return IDirectDrawSurface7_SetPalette(CONVERT(This), pPalette); + DX_WINDBG_trace(); + + return Main_DDrawSurface_SetPalette ((LPDIRECTDRAWSURFACE7) iface, pPalette); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_Unlock(LPDIRECTDRAWSURFACE3 This, LPVOID data) +/* +HRESULT WINAPI +Thunk_DDrawSurface3_Unlock(LPDIRECTDRAWSURFACE3 iface, LPRECT pRect) { - /* data might not be the LPRECT of later versions, so drop it. */ - return IDirectDrawSurface7_Unlock(CONVERT(This), NULL); -} + DX_WINDBG_trace(); + + return Main_DDrawSurface_Unlock ((LPDIRECTDRAWSURFACE7) iface, pRect); +} */ -static HRESULT WINAPI -IDirectDrawSurface3Impl_UpdateOverlay(LPDIRECTDRAWSURFACE3 This, LPRECT prcSrc, - LPDIRECTDRAWSURFACE3 pDstSurf, - LPRECT prcDst, DWORD dwFlags, - LPDDOVERLAYFX pFX) +HRESULT WINAPI +Thunk_DDrawSurface3_Unlock(LPVOID iface, LPVOID pRect) { - return IDirectDrawSurface7_UpdateOverlay(CONVERT(This), prcSrc, - CONVERT(pDstSurf), prcDst, - dwFlags, pFX); + DX_WINDBG_trace(); + DX_STUB; } -static HRESULT WINAPI -IDirectDrawSurface3Impl_UpdateOverlayDisplay(LPDIRECTDRAWSURFACE3 This, - DWORD dwFlags) +HRESULT WINAPI +Thunk_DDrawSurface3_UpdateOverlay(LPDIRECTDRAWSURFACE3 iface, LPRECT pSrcRect, LPDIRECTDRAWSURFACE3 pDstSurface, + LPRECT pDstRect, DWORD dwFlags, LPDDOVERLAYFX pFX) { - return IDirectDrawSurface7_UpdateOverlayDisplay(CONVERT(This), dwFlags); + + DX_WINDBG_trace(); + + return Main_DDrawSurface_UpdateOverlay ( (LPDIRECTDRAWSURFACE7) iface, pSrcRect, + (LPDIRECTDRAWSURFACE7) pDstSurface, pDstRect, dwFlags, pFX); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_UpdateOverlayZOrder(LPDIRECTDRAWSURFACE3 This, +HRESULT WINAPI +Thunk_DDrawSurface3_UpdateOverlayDisplay(LPDIRECTDRAWSURFACE3 iface, DWORD dwFlags) +{ + DX_WINDBG_trace(); + + return Main_DDrawSurface_UpdateOverlayDisplay((LPDIRECTDRAWSURFACE7) iface, dwFlags); +} + +HRESULT WINAPI +Thunk_DDrawSurface3_UpdateOverlayZOrder(LPDIRECTDRAWSURFACE3 iface, DWORD dwFlags, LPDIRECTDRAWSURFACE3 pSurfReference) { - return IDirectDrawSurface7_UpdateOverlayZOrder(CONVERT(This), dwFlags, - CONVERT(pSurfReference)); + DX_WINDBG_trace(); + return Main_DDrawSurface_UpdateOverlayZOrder((LPDIRECTDRAWSURFACE7) iface, dwFlags, + (LPDIRECTDRAWSURFACE7) pSurfReference); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_GetDDInterface(LPDIRECTDRAWSURFACE3 This, LPVOID* ppDD) +HRESULT WINAPI +Thunk_DDrawSurface3_GetDDInterface(LPDIRECTDRAWSURFACE3 iface, LPVOID* ppDD) { - return IDirectDrawSurface7_GetDDInterface(CONVERT(This), ppDD); + DX_WINDBG_trace(); + + return Main_DDrawSurface_GetDDInterface((LPDIRECTDRAWSURFACE7) iface, ppDD); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_PageLock(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags) +HRESULT WINAPI +Thunk_DDrawSurface3_PageLock(LPDIRECTDRAWSURFACE3 iface, DWORD dwFlags) { - return IDirectDrawSurface7_PageLock(CONVERT(This), dwFlags); + DX_WINDBG_trace(); + + return Main_DDrawSurface_PageLock((LPDIRECTDRAWSURFACE7) iface, dwFlags); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_PageUnlock(LPDIRECTDRAWSURFACE3 This, DWORD dwFlags) +HRESULT WINAPI +Thunk_DDrawSurface3_PageUnlock(LPDIRECTDRAWSURFACE3 iface, DWORD dwFlags) { - return IDirectDrawSurface7_PageUnlock(CONVERT(This), dwFlags); + DX_WINDBG_trace(); + + return Main_DDrawSurface_PageUnlock((LPDIRECTDRAWSURFACE7) iface, dwFlags); } -static HRESULT WINAPI -IDirectDrawSurface3Impl_SetSurfaceDesc(LPDIRECTDRAWSURFACE3 This, +HRESULT WINAPI +Thunk_DDrawSurface3_SetSurfaceDesc(LPDIRECTDRAWSURFACE3 iface, LPDDSURFACEDESC pDDSD, DWORD dwFlags) { - return IDirectDrawSurface7_SetSurfaceDesc(CONVERT(This), - (LPDDSURFACEDESC2)pDDSD, - dwFlags); + HRESULT retValue = DDERR_GENERIC; + + DX_WINDBG_trace(); + + if (pDDSD != NULL) + { + DDSURFACEDESC2 pDDSD2; + ZeroMemory(&pDDSD2,sizeof(DDSURFACEDESC2)); + memcpy(&pDDSD2, pDDSD, sizeof(DDSURFACEDESC)); + pDDSD2.dwSize = sizeof(DDSURFACEDESC2); + retValue = Main_DDrawSurface_SetSurfaceDesc((LPDIRECTDRAWSURFACE7) iface, &pDDSD2, dwFlags); + memcpy(pDDSD, &pDDSD2, sizeof(DDSURFACEDESC)); + pDDSD->dwSize = sizeof(DDSURFACEDESC); + } + else + { + retValue = Main_DDrawSurface_SetSurfaceDesc((LPDIRECTDRAWSURFACE7) iface, NULL, dwFlags); + } + + + return retValue; } -IDirectDrawSurface3Vtbl DDRAW_IDDS3_Thunk_VTable = +IDirectDrawSurface3Vtbl DirectDrawSurface3_VTable = { - IDirectDrawSurface3Impl_QueryInterface, - IDirectDrawSurface3Impl_AddRef, - IDirectDrawSurface3Impl_Release, - IDirectDrawSurface3Impl_AddAttachedSurface, - IDirectDrawSurface3Impl_AddOverlayDirtyRect, - IDirectDrawSurface3Impl_Blt, - IDirectDrawSurface3Impl_BltBatch, - IDirectDrawSurface3Impl_BltFast, - IDirectDrawSurface3Impl_DeleteAttachedSurface, - IDirectDrawSurface3Impl_EnumAttachedSurfaces, - IDirectDrawSurface3Impl_EnumOverlayZOrders, - IDirectDrawSurface3Impl_Flip, - IDirectDrawSurface3Impl_GetAttachedSurface, - IDirectDrawSurface3Impl_GetBltStatus, - IDirectDrawSurface3Impl_GetCaps, - IDirectDrawSurface3Impl_GetClipper, - IDirectDrawSurface3Impl_GetColorKey, - IDirectDrawSurface3Impl_GetDC, - IDirectDrawSurface3Impl_GetFlipStatus, - IDirectDrawSurface3Impl_GetOverlayPosition, - IDirectDrawSurface3Impl_GetPalette, - IDirectDrawSurface3Impl_GetPixelFormat, - IDirectDrawSurface3Impl_GetSurfaceDesc, - IDirectDrawSurface3Impl_Initialize, - IDirectDrawSurface3Impl_IsLost, - IDirectDrawSurface3Impl_Lock, - IDirectDrawSurface3Impl_ReleaseDC, - IDirectDrawSurface3Impl_Restore, - IDirectDrawSurface3Impl_SetClipper, - IDirectDrawSurface3Impl_SetColorKey, - IDirectDrawSurface3Impl_SetOverlayPosition, - IDirectDrawSurface3Impl_SetPalette, - IDirectDrawSurface3Impl_Unlock, - IDirectDrawSurface3Impl_UpdateOverlay, - IDirectDrawSurface3Impl_UpdateOverlayDisplay, - IDirectDrawSurface3Impl_UpdateOverlayZOrder, - IDirectDrawSurface3Impl_GetDDInterface, - IDirectDrawSurface3Impl_PageLock, - IDirectDrawSurface3Impl_PageUnlock, - IDirectDrawSurface3Impl_SetSurfaceDesc + Thunk_DDrawSurface3_QueryInterface, + Thunk_DDrawSurface3_AddRef, + Thunk_DDrawSurface3_Release, + Thunk_DDrawSurface3_AddAttachedSurface, + Thunk_DDrawSurface3_AddOverlayDirtyRect, + Thunk_DDrawSurface3_Blt, + Thunk_DDrawSurface3_BltBatch, + Thunk_DDrawSurface3_BltFast, + Thunk_DDrawSurface3_DeleteAttachedSurface, + Thunk_DDrawSurface3_EnumAttachedSurfaces, + Thunk_DDrawSurface3_EnumOverlayZOrders, + Thunk_DDrawSurface3_Flip, + Thunk_DDrawSurface3_GetAttachedSurface, + Thunk_DDrawSurface3_GetBltStatus, + Thunk_DDrawSurface3_GetCaps, + Thunk_DDrawSurface3_GetClipper, + Thunk_DDrawSurface3_GetColorKey, + Thunk_DDrawSurface3_GetDC, + Thunk_DDrawSurface3_GetFlipStatus, + Thunk_DDrawSurface3_GetOverlayPosition, + Thunk_DDrawSurface3_GetPalette, + Thunk_DDrawSurface3_GetPixelFormat, + Thunk_DDrawSurface3_GetSurfaceDesc, + Thunk_DDrawSurface3_Initialize, + Thunk_DDrawSurface3_IsLost, + Thunk_DDrawSurface3_Lock, + Thunk_DDrawSurface3_ReleaseDC, + Thunk_DDrawSurface3_Restore, + Thunk_DDrawSurface3_SetClipper, + Thunk_DDrawSurface3_SetColorKey, + Thunk_DDrawSurface3_SetOverlayPosition, + Thunk_DDrawSurface3_SetPalette, + Thunk_DDrawSurface3_Unlock, + Thunk_DDrawSurface3_UpdateOverlay, + Thunk_DDrawSurface3_UpdateOverlayDisplay, + Thunk_DDrawSurface3_UpdateOverlayZOrder, + Thunk_DDrawSurface3_GetDDInterface, + Thunk_DDrawSurface3_PageLock, + Thunk_DDrawSurface3_PageUnlock, + Thunk_DDrawSurface3_SetSurfaceDesc }; diff --git a/reactos/dll/directx/ddraw/winedraw.h b/reactos/dll/directx/ddraw/winedraw.h deleted file mode 100644 index cc5d192d6fc..00000000000 --- a/reactos/dll/directx/ddraw/winedraw.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2000-2001 TransGaming Technologies Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#ifndef _DDCOMIMPL_H_ -#define _DDCOMIMPL_H_ - -#include - -/* Generates the name for a vtable pointer for a given interface. */ -/* The canonical name for a single interface is "lpVtbl". */ -#define ICOM_VFIELD_MULTI_NAME2(iface) ITF_##iface -#define ICOM_VFIELD_MULTI_NAME(iface) ICOM_VFIELD_MULTI_NAME2(iface) - -/* Declares a vtable pointer field in an implementation. */ -#define ICOM_VFIELD_MULTI(iface) \ - iface ICOM_VFIELD_MULTI_NAME(iface) - -/* Returns the offset of a vtable pointer within an implementation object. */ -#define ICOM_VFIELD_OFFSET(impltype, iface) \ - offsetof(impltype, ICOM_VFIELD_MULTI_NAME(iface)) - -/* Given an interface pointer, returns the implementation pointer. */ -#define ICOM_OBJECT(impltype, ifacename, ifaceptr) \ - (impltype*)((ifaceptr) == NULL ? NULL \ - : (char*)(ifaceptr) - ICOM_VFIELD_OFFSET(impltype,ifacename)) - -#define ICOM_THIS_FROM(impltype, ifacename, ifaceptr) \ - impltype* This = ICOM_OBJECT(impltype, ifacename, ifaceptr) - -/* Given an object and interface name, returns a pointer to that interface. */ -#define ICOM_INTERFACE(implobj, iface) \ - (&((implobj)->ICOM_VFIELD_MULTI_NAME(iface))) - -#define ICOM_INIT_INTERFACE(implobj, ifacename, vtblname) \ - do { \ - (implobj)->ICOM_VFIELD_MULTI_NAME(ifacename).lpVtbl = &(vtblname); \ - } while (0) - -#define COM_INTERFACE_CAST(impltype, ifnamefrom, ifnameto, ifaceptr) \ - ICOM_INTERFACE(ICOM_OBJECT(impltype, ifnamefrom, ifaceptr), ifnameto) - -#endif /* _DDCOMIMPL_H_ */ - -#ifndef __WINE_DLLS_DDRAW_DDRAW_PRIVATE_H -#define __WINE_DLLS_DDRAW_DDRAW_PRIVATE_H - -/* MAY NOT CONTAIN X11 or DGA specific includes/defines/structs! */ - -#include -#include - -#include "windef.h" -#include "winbase.h" -#include "wtypes.h" -#include "wingdi.h" -#include "winuser.h" -#include "ddraw.h" -#include "d3d.h" -#include "ddrawi.h" - -/***************************************************************************** - * IDirectDraw implementation structure - */ - -typedef struct IDirectDrawImpl IDirectDrawImpl; -typedef struct IDirectDrawSurfaceImpl IDirectDrawSurfaceImpl; - -struct IDirectDrawImpl -{ - ICOM_VFIELD_MULTI(IDirectDraw7); - ICOM_VFIELD_MULTI(IDirectDraw4); - ICOM_VFIELD_MULTI(IDirectDraw2); - ICOM_VFIELD_MULTI(IDirectDraw); -}; - -/***************************************************************************** - * IDirectDrawSurface implementation structure - */ - -struct IDirectDrawSurfaceImpl -{ - /* IUnknown fields */ - ICOM_VFIELD_MULTI(IDirectDrawSurface7); - ICOM_VFIELD_MULTI(IDirectDrawSurface3); -}; - -#endif /* __WINE_DLLS_DDRAW_DDRAW_PRIVATE_H */