[ros-diffs] [greatlrd] 21533: Implement GetSurfaceDesc

aleksey at studiocerebral.com aleksey at studiocerebral.com
Sun Apr 9 19:05:57 CEST 2006


Author: greatlrd
Date: Sun Apr  9 21:05:57 2006
New Revision: 21533

URL: http://svn.reactos.ru/svn/reactos?rev=21533&view=rev
Log:
Implement GetSurfaceDesc

Modified:
    trunk/reactos/dll/directx/ddraw/hal/surface_hal.c
    trunk/reactos/dll/directx/ddraw/main/ddraw_main.c
    trunk/reactos/dll/directx/ddraw/main/surface_main.c
    trunk/reactos/dll/directx/ddraw/rosdraw.h

Modified: trunk/reactos/dll/directx/ddraw/hal/surface_hal.c
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/hal/surface_hal.c?rev=21533&r1=21532&r2=21533&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/hal/surface_hal.c (original)
+++ trunk/reactos/dll/directx/ddraw/hal/surface_hal.c Sun Apr  9 21:05:57 2006
@@ -13,7 +13,7 @@
 
 HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD, IDirectDrawSurfaceImpl *ppSurf, IUnknown *pUnkOuter)
 {
-        //UINT i;
+       // UINT i;
         IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
         IDirectDrawSurfaceImpl* That = ppSurf;        
 
@@ -101,26 +101,26 @@
         }
         else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
         {
-            DX_STUB_str( "Can not create overlay surface");
-           ////memset(&This->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
-           //memcpy(&This->mddsdOverlay,pDDSD,sizeof(DDSURFACEDESC));
-           //This->mddsdOverlay.dwSize = sizeof(DDSURFACEDESC);
-           ////This->mddsdOverlay.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_BACKBUFFERCOUNT | DDSD_WIDTH | DDSD_HEIGHT;
-
-           ////This->mddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
-
-           ////This->mddsdOverlay.dwWidth = 100;  //pels;
-           ////This->mddsdOverlay.dwHeight = 100; // lines;
-           ////This->mddsdOverlay.dwBackBufferCount = 1; //cBuffers;
-
-           ////This->mddsdOverlay.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
-           ////This->mddsdOverlay.ddpfPixelFormat.dwFlags = DDPF_RGB; 
-           ////This->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = 32;
+           // DX_STUB_str( "Can not create overlay surface");
+           // memset(&That->Surf->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
+           // memcpy(&That->Surf->mddsdOverlay,pDDSD,sizeof(DDSURFACEDESC));
+           // That->Surf->mddsdOverlay.dwSize = sizeof(DDSURFACEDESC);
+           //That->Surf->mddsdOverlay.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_BACKBUFFERCOUNT | DDSD_WIDTH | DDSD_HEIGHT;
+
+           //That->Surf->mddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
+
+           //That->Surf->mddsdOverlay.dwWidth = 100;  //pels;
+           //That->Surf->mddsdOverlay.dwHeight = 100; // lines;
+           //That->Surf->mddsdOverlay.dwBackBufferCount = 1; //cBuffers;
+
+           //That->Surf->mddsdOverlay.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
+           //That->Surf->mddsdOverlay.ddpfPixelFormat.dwFlags = DDPF_RGB; 
+           //That->Surf->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = 32;
      
            //mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
            //mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface;
            //mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat;
-           //mDdCanCreateSurface.lpDDSurfaceDesc = &This->mddsdOverlay; // pDDSD;
+           //mDdCanCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay; // pDDSD;
    
    
            //if (This->mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED) 
@@ -133,40 +133,40 @@
            //   return DDERR_NOTINITIALIZED;
            //}
 
-           //memset(&This->mOverlayGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
-           //This->mOverlayGlobal.dwGlobalFlags = 0;
-           //This->mOverlayGlobal.lpDD       = &This->mDDrawGlobal;
-           //This->mOverlayGlobal.lpDDHandle = &This->mDDrawGlobal;
-           //This->mOverlayGlobal.wWidth  = (WORD)This->mddsdOverlay.dwWidth;
-           //This->mOverlayGlobal.wHeight = (WORD)This->mddsdOverlay.dwHeight;
-           //This->mOverlayGlobal.lPitch  = -1;
-           //This->mOverlayGlobal.ddpfSurface = This->mddsdOverlay.ddpfPixelFormat;
+           //memset(&That->Surf->mOverlayGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
+           //That->Surf->mOverlayGlobal.dwGlobalFlags = 0;
+           //That->Surf->mOverlayGlobal.lpDD       = &This->mDDrawGlobal;
+           //That->Surf->mOverlayGlobal.lpDDHandle = &This->mDDrawGlobal;
+           //That->Surf->mOverlayGlobal.wWidth  = (WORD)That->Surf->mddsdOverlay.dwWidth;
+           //That->Surf->mOverlayGlobal.wHeight = (WORD)That->Surf->mddsdOverlay.dwHeight;
+           //That->Surf->mOverlayGlobal.lPitch  = -1;
+           //That->Surf->mOverlayGlobal.ddpfSurface = That->Surf->mddsdOverlay.ddpfPixelFormat;
 
            //// setup front- and backbuffer surfaces
-           //UINT cSurfaces = This->mddsdOverlay.dwBackBufferCount + 1;
+           //UINT cSurfaces = That->Surf->mddsdOverlay.dwBackBufferCount + 1;
            //for (i = 0; i < cSurfaces; i++)
            //{
-           //   memset(&This->mOverlayMore[i], 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
-           //   This->mOverlayMore[i].dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
-
-           //   memset(&This->mOverlayLocal[i],  0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
-           //   This->mOverlayLocal[i].lpGbl = &This->mOverlayGlobal;
-           //   This->mOverlayLocal[i].lpSurfMore = &This->mOverlayMore[i];
-           //   This->mOverlayLocal[i].dwProcessId = GetCurrentProcessId();
-           //   This->mOverlayLocal[i].dwFlags = (i == 0) ?
+           //   memset(&That->Surf->mOverlayMore[i], 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
+           //   That->Surf->mOverlayMore[i].dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
+
+           //   memset(&That->Surf->mOverlayLocal[i],  0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
+           //   That->Surf->mOverlayLocal[i].lpGbl = &That->Surf->mOverlayGlobal;
+           //   That->Surf->mOverlayLocal[i].lpSurfMore = &That->Surf->mOverlayMore[i];
+           //   That->Surf->mOverlayLocal[i].dwProcessId = GetCurrentProcessId();
+           //   That->Surf->mOverlayLocal[i].dwFlags = (i == 0) ?
            //   (DDRAWISURF_IMPLICITROOT|DDRAWISURF_FRONTBUFFER):
            //   (DDRAWISURF_IMPLICITCREATE|DDRAWISURF_BACKBUFFER);
 
-           //   This->mOverlayLocal[i].dwFlags |= DDRAWISURF_ATTACHED|DDRAWISURF_ATTACHED_FROM| DDRAWISURF_HASPIXELFORMAT| DDRAWISURF_HASOVERLAYDATA;
-
-           //   This->mOverlayLocal[i].ddsCaps.dwCaps = This->mddsdOverlay.ddsCaps.dwCaps;
-           //   This->mpOverlayLocals[i] = &This->mOverlayLocal[i];
+           //   That->Surf->mOverlayLocal[i].dwFlags |= DDRAWISURF_ATTACHED|DDRAWISURF_ATTACHED_FROM| DDRAWISURF_HASPIXELFORMAT| DDRAWISURF_HASOVERLAYDATA;
+
+           //   That->Surf->mOverlayLocal[i].ddsCaps.dwCaps = That->Surf->mddsdOverlay.ddsCaps.dwCaps;
+           //   That->Surf->mpOverlayLocals[i] = &That->Surf->mOverlayLocal[i];
            //}
 
            //for (i = 0; i < cSurfaces; i++)
            //{
            //   UINT j = (i + 1) % cSurfaces;	
-           //   if (!DdAttachSurface(This->mpOverlayLocals[i], This->mpOverlayLocals[j])) 
+           //   if (!DdAttachSurface(That->Surf->mpOverlayLocals[i], That->Surf->mpOverlayLocals[j])) 
            //   {
            //      // derr(L"DirectDrawImpl[%08x]::__setupDevice DdAttachSurface(%d, %d) failed", this, i, j);
            //     return DD_FALSE;
@@ -175,8 +175,8 @@
   
            //mDdCreateSurface.lpDD = &This->mDDrawGlobal;
            //mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;  
-           //mDdCreateSurface.lpDDSurfaceDesc = &This->mddsdOverlay;//pDDSD;
-           //mDdCreateSurface.lplpSList = This->mpOverlayLocals; //cSurfaces;
+           //mDdCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay;//pDDSD;
+           //mDdCreateSurface.lplpSList = That->Surf->mpOverlayLocals; //cSurfaces;
            //mDdCreateSurface.dwSCnt = 1 ;  //ppSurfaces;
 
            //if (This->mHALInfo.lpDDCallbacks->CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED)
@@ -193,7 +193,7 @@
            //mDdUpdateOverlay.lpDD = &This->mDDrawGlobal;
            //mDdUpdateOverlay.UpdateOverlay = This->mCallbacks.HALDDSurface.UpdateOverlay;
            //mDdUpdateOverlay.lpDDDestSurface = That->Surf->mpPrimaryLocals[0];
-           //mDdUpdateOverlay.lpDDSrcSurface = This->mpOverlayLocals[0];//pDDSurface;
+           //mDdUpdateOverlay.lpDDSrcSurface = That->Surf->mpOverlayLocals[0];//pDDSurface;
            //mDdUpdateOverlay.dwFlags = DDOVER_SHOW;
   
            //mDdUpdateOverlay.rDest.top = 0;
@@ -216,7 +216,7 @@
            //   return mDdUpdateOverlay.ddRVal;
            //}
 
-           //return DD_OK;
+           return DD_OK;
            return DDERR_INVALIDSURFACETYPE;
  
         }	

Modified: trunk/reactos/dll/directx/ddraw/main/ddraw_main.c
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/main/ddraw_main.c?rev=21533&r1=21532&r2=21533&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/main/ddraw_main.c (original)
+++ trunk/reactos/dll/directx/ddraw/main/ddraw_main.c Sun Apr  9 21:05:57 2006
@@ -144,9 +144,7 @@
 	if (iface!=NULL)
 	{	  	
 		ref = InterlockedDecrement(&This->ref);
-    
-        DX_WINDBG_trace_res((INT)This->mDDrawGlobal.dwRefCnt,(INT)ref,(INT)0);
-
+            
 		if (ref == 0)
 		{
 			// set resoltion back to the one in registry
@@ -481,22 +479,19 @@
     pDDSD->dwWidth = This->mDDrawGlobal.vmiData.dwDisplayWidth; 
     pDDSD->lPitch  = This->mDDrawGlobal.vmiData.lDisplayPitch;
     pDDSD->dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency;
-    
+    pDDSD->dwAlphaBitDepth = This->mDDrawGlobal.vmiData.ddpfDisplay.dwAlphaBitDepth;
+
     RtlCopyMemory(&pDDSD->ddpfPixelFormat,&This->mDDrawGlobal.vmiData.ddpfDisplay,sizeof(DDPIXELFORMAT));
     RtlCopyMemory(&pDDSD->ddsCaps,&This->mDDrawGlobal.ddCaps,sizeof(DDCORECAPS));
+    
+    RtlCopyMemory(&pDDSD->ddckCKDestOverlay,&This->mDDrawGlobal.ddckCKDestOverlay,sizeof(DDCOLORKEY));
+    RtlCopyMemory(&pDDSD->ddckCKSrcOverlay,&This->mDDrawGlobal.ddckCKSrcOverlay,sizeof(DDCOLORKEY));
 
     /* have not check where I should get hold of this info yet
-	DWORD  dwBackBufferCount;
-    DWORD  dwAlphaBitDepth;
+	DWORD  dwBackBufferCount;    
     DWORD  dwReserved;
-    LPVOID lpSurface;
-    union
-    {
-        DDCOLORKEY    ddckCKDestOverlay;
-        DWORD         dwEmptyFaceColor;
-    } 
-    DDCOLORKEY    ddckCKDestBlt;
-    DDCOLORKEY    ddckCKSrcOverlay;
+    LPVOID lpSurface;    
+    DDCOLORKEY    ddckCKDestBlt;    
     DDCOLORKEY    ddckCKSrcBlt;  
     DWORD         dwTextureStage;
     */

Modified: trunk/reactos/dll/directx/ddraw/main/surface_main.c
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/main/surface_main.c?rev=21533&r1=21532&r2=21533&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/main/surface_main.c (original)
+++ trunk/reactos/dll/directx/ddraw/main/surface_main.c Sun Apr  9 21:05:57 2006
@@ -406,9 +406,24 @@
 Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface,
 				      LPDDSURFACEDESC2 pDDSD)
 {
-    DX_WINDBG_trace();
-
-    DX_STUB;
+    DWORD dwSize;
+    DX_WINDBG_trace();
+
+    IDirectDrawSurfaceImpl *This = (IDirectDrawSurfaceImpl *)iface;
+
+    dwSize =  pDDSD->dwSize;
+  
+    if ((dwSize != sizeof(DDSURFACEDESC)) &&
+    	(dwSize != sizeof(DDSURFACEDESC2))) 
+    {	
+	   return DDERR_GENERIC;
+    }
+    
+    RtlZeroMemory(pDDSD,dwSize);
+    memcpy(pDDSD, &This->Surf->mddsdPrimary, sizeof(DDSURFACEDESC));
+    pDDSD->dwSize = dwSize;
+   
+    return DD_OK;
 }
 
 HRESULT WINAPI

Modified: trunk/reactos/dll/directx/ddraw/rosdraw.h
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/rosdraw.h?rev=21533&r1=21532&r2=21533&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/rosdraw.h (original)
+++ trunk/reactos/dll/directx/ddraw/rosdraw.h Sun Apr  9 21:05:57 2006
@@ -92,6 +92,14 @@
     DDRAWI_DDRAWCLIPPER_GBL mPrimaryClipperGlobal;
 
     DDSURFACEDESC mddsdPrimary;
+
+    DDRAWI_DDRAWSURFACE_GBL mOverlayGlobal;
+    DDRAWI_DDRAWSURFACE_LCL mOverlayLocal[6];
+    DDRAWI_DDRAWSURFACE_LCL *mpOverlayLocals[6];
+    DDRAWI_DDRAWSURFACE_MORE mOverlayMore[6];
+
+    DDSURFACEDESC mddsdOverlay;
+
 } DxSurf;
 
 typedef struct 
@@ -229,7 +237,7 @@
 		char buffer[1024]; \
 		sprintf ( buffer, "Enter Function %s (%s:%d)\n", __FUNCTION__,__FILE__,__LINE__ ); \
 		OutputDebugStringA(buffer); \
-		firstcallx = FALSE; \
+		firstcallx = TRUE; \
 	}
 
 #define DX_WINDBG_trace_res(width,height,bpp) \





More information about the Ros-diffs mailing list