[ros-diffs] [greatlrd] 23257: 1. start Cleaning up ddraw_main.c 2. Implement (not tested) CreatePalette it can use HAL or HEL 3. change DirectDraw_Addref and DirectDraw_Release using document dwRefCnt in DDRAWI_DIRECTDRAW_LCL 4. change Palette_Addref and Palette_Release using document dwRefCnt in DDRAWI_DDRAWPALETTE_GBL more cleanup will follow

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Sun Jul 23 22:38:29 CEST 2006


Author: greatlrd
Date: Mon Jul 24 00:38:28 2006
New Revision: 23257

URL: http://svn.reactos.org/svn/reactos?rev=23257&view=rev
Log:
1. start Cleaning up ddraw_main.c
2. Implement (not tested) CreatePalette it can use HAL or HEL 
3. change DirectDraw_Addref and DirectDraw_Release using document dwRefCnt in DDRAWI_DIRECTDRAW_LCL
4. change Palette_Addref and Palette_Release using document dwRefCnt in DDRAWI_DDRAWPALETTE_GBL

more cleanup will follow

Modified:
    trunk/reactos/dll/directx/ddraw/main/ddraw_main.c
    trunk/reactos/dll/directx/ddraw/palette.c

Modified: trunk/reactos/dll/directx/ddraw/main/ddraw_main.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/main/ddraw_main.c?rev=23257&r1=23256&r2=23257&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/main/ddraw_main.c (original)
+++ trunk/reactos/dll/directx/ddraw/main/ddraw_main.c Mon Jul 24 00:38:28 2006
@@ -9,6 +9,256 @@
  */
 
 #include "rosdraw.h"
+
+/*
+ * IMPLEMENT
+ * Status ok
+ */
+HRESULT 
+WINAPI 
+Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface, 
+								REFIID id, 
+								LPVOID *obj) 
+{
+    DX_WINDBG_trace();
+
+    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+    
+    if (IsEqualGUID(&IID_IDirectDraw7, id))
+    {
+        *obj = &This->lpVtbl;
+    }
+    else if (IsEqualGUID(&IID_IDirectDraw, id))
+    {
+        *obj = &This->lpVtbl_v1;
+    }
+    else if (IsEqualGUID(&IID_IDirectDraw2, id))
+    {
+        *obj = &This->lpVtbl_v2;
+    }
+    else if (IsEqualGUID(&IID_IDirectDraw4, id))
+    {
+        *obj = &This->lpVtbl_v4;
+    }
+    else
+    {
+        *obj = NULL;
+        return E_NOINTERFACE;
+    }
+
+    Main_DirectDraw_AddRef(iface);
+    return S_OK;
+}
+
+/*
+ * IMPLEMENT
+ * Status ok
+ */
+ULONG
+WINAPI 
+Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface) 
+{
+    DX_WINDBG_trace();
+
+    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+	ULONG ref=0;
+    
+	if (iface!=NULL)
+	{
+        ref = InterlockedIncrement(  (PLONG) &This->mDDrawLocal.dwLocalRefCnt);       
+	}    
+    return ref;
+}
+
+/*
+ * IMPLEMENT
+ * Status ok
+ */
+ULONG 
+WINAPI 
+Main_DirectDraw_Release (LPDIRECTDRAW7 iface) 
+{
+    DX_WINDBG_trace();
+
+    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+	ULONG ref=0;
+
+	if (iface!=NULL)
+	{	  	
+		ref = InterlockedDecrement( (PLONG) &This->mDDrawLocal.dwLocalRefCnt);
+            
+		if (ref == 0)
+		{
+			// set resoltion back to the one in registry
+			if(This->cooperative_level & DDSCL_EXCLUSIVE)
+			{
+				ChangeDisplaySettings(NULL, 0);
+			}
+            
+			Cleanup(iface);					
+            if (This!=NULL)
+            {              
+			    HeapFree(GetProcessHeap(), 0, This);
+            }
+		}
+    }
+    return ref;
+}
+/*
+ * IMPLEMENT
+ * Status ok
+ */
+HRESULT 
+WINAPI 
+Main_DirectDraw_Compact(LPDIRECTDRAW7 iface) 
+{
+	/* MSDN say not implement but my question what does it return then */
+    DX_WINDBG_trace();
+    return DD_OK;
+}
+
+/*
+ * IMPLEMENT
+ * Status ok
+ */
+HRESULT 
+WINAPI 
+Main_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface, 
+							  DWORD dwFlags, 
+                              LPDIRECTDRAWCLIPPER *ppClipper, 
+							  IUnknown *pUnkOuter)
+{
+    DX_WINDBG_trace();
+
+    if (pUnkOuter!=NULL) 
+        return DDERR_INVALIDPARAMS; 
+
+    IDirectDrawClipperImpl* That; 
+    That = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawClipperImpl));
+
+    if (That == NULL) 
+        return E_OUTOFMEMORY;
+
+    ZeroMemory(That, sizeof(IDirectDrawClipperImpl));
+
+    That->lpVtbl = &DirectDrawClipper_Vtable;
+    That->ref = 1;
+    *ppClipper = (LPDIRECTDRAWCLIPPER)That;
+
+    return That->lpVtbl->Initialize (*ppClipper, (LPDIRECTDRAW)iface, dwFlags);
+}
+
+
+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;	 		    			    
+}
+
+
 
 const DDPIXELFORMAT pixelformats[] =
 {
@@ -91,25 +341,10 @@
     return DD_OK;
 }
 
-/*
- * IMPLEMENT
- * Status this api is finish and is 100% correct 
- */
-ULONG
-WINAPI 
-Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface) 
-{
-    DX_WINDBG_trace();
-
-    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
-	ULONG ref=0;
-    
-	if (iface!=NULL)
-	{
-        ref = InterlockedIncrement( (PLONG) &This->ref);       
-	}    
-    return ref;
-}
+
+
+
+
 
 /*
  * IMPLEMENT
@@ -117,36 +352,6 @@
  * not finish yet but is working fine 
  * it prevent memmory leaks at exit
  */
-ULONG 
-WINAPI 
-Main_DirectDraw_Release (LPDIRECTDRAW7 iface) 
-{
-    DX_WINDBG_trace();
-
-    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
-	ULONG ref=0;
-
-	if (iface!=NULL)
-	{	  	
-		ref = InterlockedDecrement( (PLONG) &This->ref);
-            
-		if (ref == 0)
-		{
-			// set resoltion back to the one in registry
-			if(This->cooperative_level & DDSCL_EXCLUSIVE)
-			{
-				ChangeDisplaySettings(NULL, 0);
-			}
-            
-			Cleanup(iface);					
-            if (This!=NULL)
-            {              
-			    HeapFree(GetProcessHeap(), 0, This);
-            }
-		}
-    }
-    return ref;
-}
 
 
 
@@ -363,45 +568,7 @@
 
 
 
-/*
- * IMPLEMENT
- * Status this api is finish and is 100% correct 
- */
-HRESULT 
-WINAPI 
-Main_DirectDraw_QueryInterface (LPDIRECTDRAW7 iface, 
-								REFIID id, 
-								LPVOID *obj) 
-{
-    DX_WINDBG_trace();
-
-    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
-    
-    if (IsEqualGUID(&IID_IDirectDraw7, id))
-    {
-        *obj = &This->lpVtbl;
-    }
-    else if (IsEqualGUID(&IID_IDirectDraw, id))
-    {
-        *obj = &This->lpVtbl_v1;
-    }
-    else if (IsEqualGUID(&IID_IDirectDraw2, id))
-    {
-        *obj = &This->lpVtbl_v2;
-    }
-    else if (IsEqualGUID(&IID_IDirectDraw4, id))
-    {
-        *obj = &This->lpVtbl_v4;
-    }
-    else
-    {
-        *obj = NULL;
-        return E_NOINTERFACE;
-    }
-
-    Main_DirectDraw_AddRef(iface);
-    return S_OK;
-}
+
 
 HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD,
                                             LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter) 
@@ -706,28 +873,7 @@
    
 }
 
-HRESULT WINAPI Main_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface, DWORD dwFlags, 
-                                             LPDIRECTDRAWCLIPPER *ppClipper, IUnknown *pUnkOuter)
-{
-    DX_WINDBG_trace();
-
-    if (pUnkOuter!=NULL) 
-        return DDERR_INVALIDPARAMS; 
-
-    IDirectDrawClipperImpl* That; 
-    That = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawClipperImpl));
-
-    if (That == NULL) 
-        return E_OUTOFMEMORY;
-
-    ZeroMemory(That, sizeof(IDirectDrawClipperImpl));
-
-    That->lpVtbl = &DirectDrawClipper_Vtable;
-    That->ref = 1;
-    *ppClipper = (LPDIRECTDRAWCLIPPER)That;
-
-    return That->lpVtbl->Initialize (*ppClipper, (LPDIRECTDRAW)iface, dwFlags);
-}
+
 
 // This function is exported by the dll
 HRESULT WINAPI DirectDrawCreateClipper (DWORD dwFlags, 
@@ -738,28 +884,7 @@
     return Main_DirectDraw_CreateClipper(NULL, dwFlags, lplpDDClipper, pUnkOuter);
 }
 
-HRESULT WINAPI Main_DirectDraw_CreatePalette(LPDIRECTDRAW7 iface, DWORD dwFlags,
-                  LPPALETTEENTRY palent, LPDIRECTDRAWPALETTE* ppPalette, LPUNKNOWN pUnkOuter)
-{
-    DX_WINDBG_trace();
-
-    if (pUnkOuter!=NULL) 
-        return DDERR_INVALIDPARAMS; 
-
-    IDirectDrawPaletteImpl* That; 
-    That = (IDirectDrawPaletteImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawPaletteImpl));
-
-    if (That == NULL) 
-        return E_OUTOFMEMORY;
-
-    ZeroMemory(That, sizeof(IDirectDrawPaletteImpl));
-
-    That->lpVtbl = &DirectDrawPalette_Vtable;
-    That->ref = 1;
-    *ppPalette = (LPDIRECTDRAWPALETTE)That;
-
-       return That->lpVtbl->Initialize (*ppPalette, (LPDIRECTDRAW)iface, dwFlags, palent);
-}
+
 
 HRESULT WINAPI Main_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface) 
 {
@@ -928,11 +1053,7 @@
 
 /********************************** Stubs **********************************/
 
-HRESULT WINAPI Main_DirectDraw_Compact(LPDIRECTDRAW7 iface) 
-{
-    DX_WINDBG_trace();
-    DX_STUB;
-}
+
 
 HRESULT WINAPI Main_DirectDraw_DuplicateSurface(LPDIRECTDRAW7 iface, LPDIRECTDRAWSURFACE7 src,
                  LPDIRECTDRAWSURFACE7* dst) 

Modified: trunk/reactos/dll/directx/ddraw/palette.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/palette.c?rev=23257&r1=23256&r2=23257&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/palette.c (original)
+++ trunk/reactos/dll/directx/ddraw/palette.c Mon Jul 24 00:38:28 2006
@@ -20,7 +20,7 @@
 
 	if (iface!=NULL)
 	{	  	
-		ref = InterlockedDecrement( (PLONG) &This->ref);
+		ref = InterlockedDecrement( (PLONG) &This->DDPalette.dwRefCnt);
             
 		if (ref == 0)
 		{		
@@ -30,7 +30,7 @@
 		      			
             if (This!=NULL)
             {              
-			    HeapFree(GetProcessHeap(), 0, This);
+			    DxHeapMemFree(This);
             }
 		}
     }
@@ -48,7 +48,7 @@
     
    if (iface!=NULL)
    {
-       ref = InterlockedIncrement( (PLONG) &This->ref);       
+       ref = InterlockedIncrement( (PLONG) &This->DDPalette.dwRefCnt);       
    }    
    return ref;    
 }




More information about the Ros-diffs mailing list