Filling in two more member, and they should be using when u create a new
dc with CreateDCA
Modified: trunk/reactos/lib/ddraw/main/ddraw_main.c
_____
Modified: trunk/reactos/lib/ddraw/main/ddraw_main.c
--- trunk/reactos/lib/ddraw/main/ddraw_main.c 2005-11-05 22:13:59 UTC
(rev 19022)
+++ trunk/reactos/lib/ddraw/main/ddraw_main.c 2005-11-05 23:10:43 UTC
(rev 19023)
@@ -21,6 +21,14 @@
This->InitializeDraw = TRUE;
+ RtlZeroMemory(&This->DirectDrawGlobal,
sizeof(DDRAWI_DIRECTDRAW_GBL));
+
+
+
+ /* cObsolete is undoc in msdn it being use in CreateDCA */
+ RtlCopyMemory(&This->DirectDrawGlobal.cObsolete,&"DISPLAY",7);
+ RtlCopyMemory(&This->DirectDrawGlobal.cDriverName,&"DISPLAY",7);
+
/* Setup the lpExclusiveOwner struct in msdn this struct member is
undoc
I am using there name to figout which info it should be fild
with
My hardware drv does not support call to SetExusive so I can
not
Remove hwnd and hdc, so it being store to right struct.
Modified: trunk/reactos/lib/ddraw/hal/ddraw_hal.c
Modified: trunk/reactos/lib/ddraw/main/ddraw_main.c
Modified: trunk/reactos/lib/ddraw/rosdraw.h
_____
Modified: trunk/reactos/lib/ddraw/hal/ddraw_hal.c
--- trunk/reactos/lib/ddraw/hal/ddraw_hal.c 2005-11-05 14:21:39 UTC
(rev 19014)
+++ trunk/reactos/lib/ddraw/hal/ddraw_hal.c 2005-11-05 15:05:31 UTC
(rev 19015)
@@ -19,12 +19,9 @@
This->DirectDrawGlobal.lp16DD = &This->DirectDrawGlobal;
/* get the object */
- if(!DdCreateDirectDrawObject (&This->DirectDrawGlobal, This->hdc))
+ if(!DdCreateDirectDrawObject (&This->DirectDrawGlobal,
(HDC)This->DirectDrawGlobal.lpExclusiveOwner->hDC ))
return DDERR_INVALIDPARAMS;
-
- BOOL dummy;
- DdReenableDirectDrawObject(&This->DirectDrawGlobal, &dummy);
-
+
/* alloc all the space */
This->DirectDrawGlobal.lpDDCBtmp =
(LPDDHAL_CALLBACKS)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(DDHAL_CALLBACKS));
@@ -267,12 +264,14 @@
This->HalInfo.GetDriverInfo(&DriverInfo);
/* Get the ZPixelFormats */
+ /* take off this it until we figout how lpexluisev should be
fild in
This->DirectDrawGlobal.lpZPixelFormats = (LPDDPIXELFORMAT)
HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
sizeof(DDPIXELFORMAT) *
This->DirectDrawGlobal.dwNumZPixelFormats);
DriverInfo.guidInfo = GUID_ZPixelFormats;
DriverInfo.lpvData = (PVOID)This->DirectDrawGlobal.lpZPixelFormats;
DriverInfo.dwExpectedSize = sizeof(DDPIXELFORMAT);
This->HalInfo.GetDriverInfo(&DriverInfo);
+ */
/* Setup some info from the callbacks we got */
DDHAL_GETAVAILDRIVERMEMORYDATA mem;
_____
Modified: trunk/reactos/lib/ddraw/main/ddraw_main.c
--- trunk/reactos/lib/ddraw/main/ddraw_main.c 2005-11-05 14:21:39 UTC
(rev 19014)
+++ trunk/reactos/lib/ddraw/main/ddraw_main.c 2005-11-05 15:05:31 UTC
(rev 19015)
@@ -21,14 +21,23 @@
This->InitializeDraw = TRUE;
-
+ /* Setup the lpExclusiveOwner struct in msdn this struct member is
undoc
+ I am using there name to figout which info it should be fild
with
+ My hardware drv does not support call to SetExusive so I can
not
+ debug it see how it should be fild
+ */
+
+ This->DirectDrawGlobal.lpExclusiveOwner = &This->ExclusiveOwner;
+ memset(&This->ExclusiveOwner, 0, sizeof(DDRAWI_DIRECTDRAW_LCL));
-
- // get the HDC
- This->hdc = GetWindowDC(GetDesktopWindow());
- This->Height = GetDeviceCaps(This->hdc, VERTRES);
- This->Width = GetDeviceCaps(This->hdc, HORZRES);
- This->Bpp = GetDeviceCaps(This->hdc, BITSPIXEL);
+ This->DirectDrawGlobal.lpExclusiveOwner->dwProcessId =
GetCurrentProcessId();
+ This->DirectDrawGlobal.lpExclusiveOwner->hDC =
((ULONG_PTR)GetWindowDC(GetDesktopWindow()));
+ This->DirectDrawGlobal.lpExclusiveOwner->hWnd =
((ULONG_PTR)GetDesktopWindow());
+ This->DirectDrawGlobal.lpExclusiveOwner->lpGbl =
&This->DirectDrawGlobal;
+
+ This->Height =
GetDeviceCaps((HDC)This->DirectDrawGlobal.lpExclusiveOwner->hDC ,
VERTRES);
+ This->Width =
GetDeviceCaps((HDC)This->DirectDrawGlobal.lpExclusiveOwner->hDC ,
HORZRES);
+ This->Bpp =
GetDeviceCaps((HDC)This->DirectDrawGlobal.lpExclusiveOwner->hDC ,
BITSPIXEL);
// call software first
if((ret = Hal_DirectDraw_Initialize (iface)) != DD_OK)
@@ -51,12 +60,9 @@
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
// check the parameters
- if (This->cooperative_level == cooplevel && This->window == hwnd)
+ if ((This->cooperative_level == cooplevel) &&
((HWND)This->DirectDrawGlobal.lpExclusiveOwner->hWnd == hwnd))
return DD_OK;
-
- if (This->window)
- return DDERR_HWNDALREADYSET;
-
+
if (This->cooperative_level)
return DDERR_EXCLUSIVEMODEALREADYSET;
@@ -67,8 +73,8 @@
return DDERR_INVALIDPARAMS;
// set the data
- This->window = hwnd;
- This->hdc = GetDC(hwnd);
+ This->DirectDrawGlobal.lpExclusiveOwner->hWnd = (ULONG_PTR) hwnd;
+ This->DirectDrawGlobal.lpExclusiveOwner->hDC =
(ULONG_PTR)GetDC(hwnd);
This->cooperative_level = cooplevel;
if (This->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags &
DDHAL_CB32_SETEXCLUSIVEMODE)
_____
Modified: trunk/reactos/lib/ddraw/rosdraw.h
--- trunk/reactos/lib/ddraw/rosdraw.h 2005-11-05 14:21:39 UTC (rev
19014)
+++ trunk/reactos/lib/ddraw/rosdraw.h 2005-11-05 15:05:31 UTC (rev
19015)
@@ -14,23 +14,28 @@
typedef struct
{
+ /* Setup the Vtbl COM table */
IDirectDraw7Vtbl* lpVtbl;
IDirectDraw4Vtbl* lpVtbl_v4;
IDirectDraw2Vtbl* lpVtbl_v2;
IDirectDrawVtbl* lpVtbl_v1;
+ /* The main struct that contain all info from the HAL and HEL */
DDRAWI_DIRECTDRAW_GBL DirectDrawGlobal;
+
+ /* ExclusiveOwner */
+ DDRAWI_DIRECTDRAW_LCL ExclusiveOwner;
+
+ /* MISC info that will be remove in futuer */
DDHAL_DDMISCELLANEOUSCALLBACKS Misc2Callback;
DDHALINFO HalInfo;
-
- HWND window;
- DWORD cooperative_level;
- HDC hdc;
+
+ DWORD cooperative_level;
int Height, Width, Bpp;
- GUID InGUID;
BOOL InitializeDraw;
+
} IDirectDrawImpl;
/******** Surface Object ********/