diff --git a/reactos/dll/directx/ddraw/cleanup.c b/reactos/dll/directx/ddraw/cleanup.c new file mode 100644 index 00000000000..918a289b0b3 --- /dev/null +++ b/reactos/dll/directx/ddraw/cleanup.c @@ -0,0 +1,51 @@ +/* $Id: main.c 21434 2006-04-01 19:12:56Z greatlrd $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: lib/ddraw/ddraw.c + * PURPOSE: DirectDraw Library + * PROGRAMMER: Magnus Olsen (greatlrd) + * + */ + +#include +#include "rosdraw.h" +#include "d3dhal.h" + +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); + } + +} + diff --git a/reactos/dll/directx/ddraw/ddraw.rbuild b/reactos/dll/directx/ddraw/ddraw.rbuild index 36d527a2413..b477a8500dc 100644 --- a/reactos/dll/directx/ddraw/ddraw.rbuild +++ b/reactos/dll/directx/ddraw/ddraw.rbuild @@ -18,6 +18,7 @@ main.c regsvr.c startup.c + cleanup.c clipper.c color.c diff --git a/reactos/dll/directx/ddraw/hal/ddraw_hal.c b/reactos/dll/directx/ddraw/hal/ddraw_hal.c index b03d8d6523e..4724b98fab6 100644 --- a/reactos/dll/directx/ddraw/hal/ddraw_hal.c +++ b/reactos/dll/directx/ddraw/hal/ddraw_hal.c @@ -10,43 +10,6 @@ #include "rosdraw.h" -VOID -Hal_DirectDraw_Release (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); - } - -} - HRESULT Hal_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps, diff --git a/reactos/dll/directx/ddraw/main/ddraw_main.c b/reactos/dll/directx/ddraw/main/ddraw_main.c index d6f2817672d..6c249181c7c 100644 --- a/reactos/dll/directx/ddraw/main/ddraw_main.c +++ b/reactos/dll/directx/ddraw/main/ddraw_main.c @@ -138,8 +138,7 @@ Main_DirectDraw_Release (LPDIRECTDRAW7 iface) ChangeDisplaySettings(NULL, 0); } - Hal_DirectDraw_Release(iface); - //Hel_DirectDraw_Release(iface); + Cleanup(iface); if (This!=NULL) { HeapFree(GetProcessHeap(), 0, This); diff --git a/reactos/dll/directx/ddraw/rosdraw.h b/reactos/dll/directx/ddraw/rosdraw.h index 657c68d0356..bffe702bea7 100644 --- a/reactos/dll/directx/ddraw/rosdraw.h +++ b/reactos/dll/directx/ddraw/rosdraw.h @@ -16,6 +16,10 @@ HRESULT WINAPI StartDirectDrawHal(LPDIRECTDRAW* iface); HRESULT WINAPI StartDirectDrawHel(LPDIRECTDRAW* iface); HRESULT WINAPI Create_DirectDraw (LPGUID pGUID, LPDIRECTDRAW* pIface, REFIID id, BOOL ex); +/* DirectDraw Cleanup code only internal use */ +VOID Cleanup(LPDIRECTDRAW7 iface); + + /* own macro to alloc memmory */ #define DxHeapMemAlloc(m) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, m) #define DxHeapMemFree(p) HeapFree(GetProcessHeap(), 0, p); diff --git a/reactos/dll/directx/ddraw/soft/ddraw_hel.c b/reactos/dll/directx/ddraw/soft/ddraw_hel.c index 0c20fbdfae1..2332dc73a3e 100644 --- a/reactos/dll/directx/ddraw/soft/ddraw_hel.c +++ b/reactos/dll/directx/ddraw/soft/ddraw_hel.c @@ -11,13 +11,6 @@ #include "rosdraw.h" - - -VOID Hel_DirectDraw_Release (LPDIRECTDRAW7 iface) -{ -} - - HRESULT Hel_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps, LPDWORD total, LPDWORD free) { @@ -28,12 +21,6 @@ HRESULT Hel_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscap return DD_OK; } - -HRESULT Hel_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,HANDLE h) -{ - DX_STUB; -} - HRESULT Hel_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine) { DX_STUB; @@ -43,55 +30,3 @@ HRESULT Hel_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface) { DX_STUB; } - -HRESULT Hel_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight, - DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) -{ - IDirectDrawImpl* This = (IDirectDrawImpl*)iface; - - // this only for exclusive mode - if(!(This->cooperative_level & DDSCL_EXCLUSIVE)) - return DDERR_NOEXCLUSIVEMODE; - - // change the resolution using normal WinAPI function - DEVMODE mode; - mode.dmSize = sizeof(mode); - mode.dmPelsWidth = dwWidth; - mode.dmPelsHeight = dwHeight; - mode.dmBitsPerPel = dwBPP; - - //mode.dmDisplayFrequency = dwRefreshRate; - mode.dmFields = 0; - - DX_STUB_str("in hel"); - - if(dwWidth) - mode.dmFields |= DM_PELSWIDTH; - if(dwHeight) - mode.dmFields |= DM_PELSHEIGHT; - if(dwBPP) - mode.dmFields |= DM_BITSPERPEL; - /* - if(dwRefreshRate) - mode.dmFields |= DM_DISPLAYFREQUENCY; - */ - if (ChangeDisplaySettings(&mode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL) - return DDERR_UNSUPPORTEDMODE; - - - // TODO: reactivate ddraw object, maximize window, set it in foreground - // and set excluive mode (if implemented by the driver) - - /* FIXME fill the DirectDrawGlobal right the modeindex old and new */ - - //if(dwWidth) - // This->Height = dwWidth; - //if(dwHeight) - // This->Width = dwHeight; - //if(dwBPP) - // This->Bpp = dwBPP; - - return DD_OK; -} - -