Author: greatlrd Date: Sat Nov 22 11:08:55 2008 New Revision: 37560
URL: http://svn.reactos.org/svn/reactos?rev=37560&view=rev Log: implement bit more of DCICreatePrimary, it is not finish or tested yet, and comment up the code.
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 11:08:55 2008 @@ -112,8 +112,10 @@ DDHALINFO HalInfo; DDHAL_DDPALETTECALLBACKS DDPaletteCallbacks;
+ /* Alloc memory for the internal struct, rember this internal struct are not compatible with windows xp */ if ( (pDciSurface_int = (LPDCISURFACE_INT) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DCISURFACE_INT) )) == NULL ) { + /* Fail alloc memmory */ retvalue = DCI_ERR_OUTOFMEMORY; } else @@ -135,15 +137,51 @@ NULL, NULL) == FALSE) ) { + /* Fail to get importment Directx informations */ retvalue = DCI_FAIL_UNSUPPORTED; } else { + /* We got all informations to start create our primary surface */ + + /* Will be use later, it check see if we lost the surface or not */ pDciSurface_int->DciSurface_lcl.LostSurface = FALSE;
/* FIXME Add the real code now to create the primary surface after we create the dx hal interface */
+ /* Fill in the size of DCISURFACEINFO struct */ pDciSurface_int->DciSurfaceInfo.dwSize = sizeof(DCISURFACEINFO); + + /* Fill in the surface is visible, for it always are the primary surface and it is visible */ + pDciSurface_int->DciSurfaceInfo.dwDCICaps = DCI_VISIBLE; + + /* for primary screen res lower that 256Color, ms dciman.dll set this value to BI_RGB + * old note I found in ddk header comment follow dwMask is type for BI_BITMASK surfaces + * and for dwCompression it was which format the surface was create in, I also tested with older graphic card like S3 + * that support 16Color or lower for the primary display. and saw this member change betwin 0 (BI_RGB) and 3 (BI_BITFIELDS). + */ + if (HalInfo.vmiData.ddpfDisplay.dwRGBBitCount >= 8) + { + pDciSurface_int->DciSurfaceInfo.dwCompression = BI_BITFIELDS; + } + else + { + pDciSurface_int->DciSurfaceInfo.dwCompression = BI_RGB; + } + + /* Fill in the RGB mask */ + pDciSurface_int->DciSurfaceInfo.dwMask[0] = HalInfo.vmiData.ddpfDisplay.dwRBitMask; + pDciSurface_int->DciSurfaceInfo.dwMask[1] = HalInfo.vmiData.ddpfDisplay.dwGBitMask; + pDciSurface_int->DciSurfaceInfo.dwMask[2] = HalInfo.vmiData.ddpfDisplay.dwBBitMask; + + /* Fill in the width and height of the primary surface */ + pDciSurface_int->DciSurfaceInfo.dwWidth = HalInfo.vmiData.dwDisplayWidth; + pDciSurface_int->DciSurfaceInfo.dwHeight = HalInfo.vmiData.dwDisplayHeight; + + /* Fill in the color deep and stride of the primary surface */ + pDciSurface_int->DciSurfaceInfo.dwBitCount = HalInfo.vmiData.ddpfDisplay.dwRGBBitCount; + pDciSurface_int->DciSurfaceInfo.lStride = HalInfo.vmiData.lDisplayPitch; + *pDciSurfaceInfo = (LPDCISURFACEINFO) &pDciSurface_int->DciSurfaceInfo; } }