Author: greatlrd Date: Sat Nov 22 10:10:53 2008 New Revision: 37557
URL: http://svn.reactos.org/svn/reactos?rev=37557&view=rev Log: start implement DCICreatePrimary, it is not finish or tested yet.
Modified: branches/reactx/reactos/dll/win32/dciman32/dciman_main.c
Modified: branches/reactx/reactos/dll/win32/dciman32/dciman_main.c URL: http://svn.reactos.org/svn/reactos/branches/reactx/reactos/dll/win32/dciman3... ============================================================================== --- branches/reactx/reactos/dll/win32/dciman32/dciman_main.c [iso-8859-1] (original) +++ branches/reactx/reactos/dll/win32/dciman32/dciman_main.c [iso-8859-1] Sat Nov 22 10:10:53 2008 @@ -1,6 +1,13 @@
#include <windows.h> +#include <ndk/ntndk.h> +#include <stdio.h> #include <dciman.h> +#include <ddraw.h> +#include <ddrawi.h> +#include <d3dhal.h> +#include <ddrawgdi.h> +#include <pseh/pseh.h>
CRITICAL_SECTION ddcs;
@@ -80,11 +87,82 @@ }
+typedef struct _DCISURFACE_LCL +{ + BOOL LostSurface; + DDRAWI_DIRECTDRAW_GBL DirectDrawGlobal; + DDRAWI_DDRAWSURFACE_LCL SurfaceLocal; + DDHAL_DDCALLBACKS DDCallbacks; + DDHAL_DDSURFACECALLBACKS DDSurfaceCallbacks; +} DCISURFACE_LCL, *LPDCISURFACE_LCL; + +typedef struct _DCISURFACE_INT +{ + DCISURFACE_LCL DciSurface_lcl; + DCISURFACEINFO DciSurfaceInfo; +} DCISURFACE_INT, *LPDCISURFACE_INT; + + int WINAPI -DCICreatePrimary(HDC hdc, LPDCISURFACEINFO *pDciSurfaceInfo) +DCICreatePrimary(HDC hDC, LPDCISURFACEINFO *pDciSurfaceInfo) { - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return DCI_FAIL_UNSUPPORTED; + int retvalue = DCI_OK; + BOOL bNewMode = FALSE; + LPDCISURFACE_INT pDciSurface_int; + DDHALINFO HalInfo; + DDHAL_DDPALETTECALLBACKS DDPaletteCallbacks; + + if ( (pDciSurface_int = (LPDCISURFACE_INT) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DCISURFACE_INT) )) == NULL ) + { + retvalue = DCI_ERR_OUTOFMEMORY; + } + else + { + /* Activate the DirectX support from HAL, if any of these function fail, we was not avail setup infomrations we need to create our frame */ + if ( ( DdCreateDirectDrawObject( &pDciSurface_int->DciSurface_lcl.DirectDrawGlobal, + hDC) == FALSE) || + ( DdReenableDirectDrawObject(&pDciSurface_int->DciSurface_lcl.DirectDrawGlobal, + &bNewMode) == FALSE) || + ( DdQueryDirectDrawObject( &pDciSurface_int->DciSurface_lcl.DirectDrawGlobal, + &HalInfo, + &pDciSurface_int->DciSurface_lcl.DDCallbacks, + &pDciSurface_int->DciSurface_lcl.DDSurfaceCallbacks, + &DDPaletteCallbacks, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL) == FALSE) ) + { + retvalue = DCI_FAIL_UNSUPPORTED; + } + else + { + pDciSurface_int->DciSurface_lcl.LostSurface = FALSE; + + /* FIXME Add the real code now to create the primary surface after we create the dx hal interface */ + + pDciSurface_int->DciSurfaceInfo.dwSize = sizeof(DCISURFACEINFO); + *pDciSurfaceInfo = (LPDCISURFACEINFO) &pDciSurface_int->DciSurfaceInfo; + } + } + +/* Cleanup code when we fail */ + if (retvalue < DCI_OK) + { + if (pDciSurface_int->DciSurface_lcl.DirectDrawGlobal.hDD != 0) + { + DdDeleteDirectDrawObject(&pDciSurface_int->DciSurface_lcl.DirectDrawGlobal); + } + + if (pDciSurface_int != NULL) + { + HeapFree(GetProcessHeap(), 0, pDciSurface_int); + } + } + + return retvalue; }