[ros-diffs] [greatlrd] 21576: This commit is redesign off ddraw primare surface, we need reach primare surface from every where. We have now a expriment code that show how to create overlay with this new design but we do not set it up right yet.

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Thu Apr 13 11:14:32 CEST 2006


Author: greatlrd
Date: Thu Apr 13 13:14:32 2006
New Revision: 21576

URL: http://svn.reactos.ru/svn/reactos?rev=21576&view=rev
Log:
This commit is redesign off ddraw primare surface, we need reach primare surface from every where. We have now a expriment code that show how to create overlay with this new design but we do not set it up right yet. 

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=21576&r1=21575&r2=21576&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/hal/surface_hal.c (original)
+++ trunk/reactos/dll/directx/ddraw/hal/surface_hal.c Thu Apr 13 13:14:32 2006
@@ -30,14 +30,14 @@
             return DD_FALSE;
         }
 
-        if (!(This->owner->mDDrawGlobal.lpDDCBtmp->HALDDSurface.dwFlags  & DDHAL_SURFCB32_BLT)) 
+        if (!(This->Owner->mDDrawGlobal.lpDDCBtmp->HALDDSurface.dwFlags  & DDHAL_SURFCB32_BLT)) 
         {
               return DDERR_NODRIVERSUPPORT;
         }
 
-        mDdBlt.lpDDDestSurface = This->Surf->mpPrimaryLocals[0];
-
-        if (!DdResetVisrgn(This->Surf->mpPrimaryLocals[0], NULL)) 
+        mDdBlt.lpDDDestSurface = This->Owner->mpPrimaryLocals[0];
+
+        if (!DdResetVisrgn(This->Owner->mpPrimaryLocals[0], NULL)) 
         {      
               return DDERR_NOGDI;
         }
@@ -62,12 +62,12 @@
            
         if (src != NULL)
         {
-              mDdBlt.lpDDSrcSurface = That->Surf->mpPrimaryLocals[0];
-        }
-
-        mDdBlt.lpDD = &This->owner->mDDrawGlobal;
-        mDdBlt.Blt = This->owner->mCallbacks.HALDDSurface.Blt; 
-        mDdBlt.lpDDDestSurface = This->Surf->mpPrimaryLocals[0];
+              mDdBlt.lpDDSrcSurface = That->Surf->mpSurfLocals[0];
+        }
+
+        mDdBlt.lpDD = &This->Owner->mDDrawGlobal;
+        mDdBlt.Blt = This->Owner->mCallbacks.HALDDSurface.Blt; 
+        mDdBlt.lpDDDestSurface = This->Owner->mpPrimaryLocals[0];
 
         mDdBlt.dwFlags = dwFlags;
              
@@ -107,13 +107,13 @@
    }
 
    Lock.ddRVal = DDERR_NOTPALETTIZED;
-   Lock.Lock = This->owner->mCallbacks.HALDDSurface.Lock;
+   Lock.Lock = This->Owner->mCallbacks.HALDDSurface.Lock;
    Lock.dwFlags = flags;
-   Lock.lpDDSurface = &This->Surf->mPrimaryLocal;
-   Lock.lpDD = &This->owner->mDDrawGlobal;   
+   Lock.lpDDSurface = &This->Owner->mPrimaryLocal;
+   Lock.lpDD = &This->Owner->mDDrawGlobal;   
    Lock.lpSurfData = NULL;
      
-   if (!DdResetVisrgn(&This->Surf->mPrimaryLocal, NULL)) 
+   if (!DdResetVisrgn(&This->Owner->mPrimaryLocal, NULL)) 
    {
       OutputDebugStringA("Here DdResetVisrgn lock");
       return DDERR_UNSUPPORTED;
@@ -138,13 +138,13 @@
         {
             RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC2));
             // FIXME the interanl mddsdPrimary shall be DDSURFACEDESC2
-            memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC));
+            memcpy(pDDSD,&This->Owner->mddsdPrimary,sizeof(DDSURFACEDESC));
             pDDSD->dwSize = sizeof(DDSURFACEDESC2);
         }
         if (pDDSD->dwSize == sizeof(DDSURFACEDESC))
         {
             RtlZeroMemory(pDDSD,sizeof(DDSURFACEDESC));
-            memcpy(pDDSD,&This->Surf->mddsdPrimary,sizeof(DDSURFACEDESC));
+            memcpy(pDDSD,&This->Owner->mddsdPrimary,sizeof(DDSURFACEDESC));
             pDDSD->dwSize = sizeof(DDSURFACEDESC);
         }
 
@@ -159,9 +159,9 @@
       
    DDHAL_UNLOCKDATA unLock;   
    unLock.ddRVal = DDERR_NOTPALETTIZED;
-   unLock.lpDD = &This->owner->mDDrawGlobal;   
-   unLock.lpDDSurface =  &This->Surf->mPrimaryLocal;
-   unLock.Unlock = This->owner->mCallbacks.HALDDSurface.Unlock;
+   unLock.lpDD = &This->Owner->mDDrawGlobal;   
+   unLock.lpDDSurface =  &This->Owner->mPrimaryLocal;
+   unLock.Unlock = This->Owner->mCallbacks.HALDDSurface.Unlock;
 
 
 

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=21576&r1=21575&r2=21576&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/main/ddraw_main.c (original)
+++ trunk/reactos/dll/directx/ddraw/main/ddraw_main.c Thu Apr 13 13:14:32 2006
@@ -357,6 +357,11 @@
 		DdReenableDirectDrawObject(&This->mDDrawGlobal, &dummy);
 		/* FIXME fill the This->DirectDrawGlobal.vmiData right */
 	}
+
+     //This->mDDrawGlobal.lpExclusiveOwner->hDC  = (ULONG_PTR)GetDC( (HWND)This->mDDrawGlobal.lpExclusiveOwner->hWnd);
+
+
+
   
 	return ret;
 }
@@ -446,11 +451,11 @@
     // FIXME free This->mDDrawGlobal.dsList  on release 
     This->mDDrawGlobal.dsList = (LPDDRAWI_DDRAWSURFACE_INT)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 
                                                                             sizeof(DDRAWI_DDRAWSURFACE_INT));        
-    That->owner = (IDirectDrawImpl *)This;
-    That->owner->mDDrawGlobal.dsList->dwIntRefCnt =1;
+    That->Owner = (IDirectDrawImpl *)This;
+    That->Owner->mDDrawGlobal.dsList->dwIntRefCnt =1;
 
     /* we alwasy set to use the DirectDrawSurface7_Vtable as internel */
-    That->owner->mDDrawGlobal.dsList->lpVtbl = (PVOID) &DirectDrawSurface7_Vtable;
+    That->Owner->mDDrawGlobal.dsList->lpVtbl = (PVOID) &DirectDrawSurface7_Vtable;
    
    
     That->Surf = surf;
@@ -465,11 +470,11 @@
           
     if (pDDSD->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
     {   
-           
-           memcpy(&That->Surf->mddsdPrimary,pDDSD,sizeof(DDSURFACEDESC));
-           That->Surf->mddsdPrimary.dwSize      = sizeof(DDSURFACEDESC);          
+           OutputDebugStringA("Create DDSCAPS_PRIMARYSURFACE\n");           
+           memcpy(&That->Owner->mddsdPrimary,pDDSD,sizeof(DDSURFACEDESC));
+           That->Owner->mddsdPrimary.dwSize      = sizeof(DDSURFACEDESC);          
            This->mDdCanCreateSurface.bIsDifferentPixelFormat = FALSE; 
-           This->mDdCanCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdPrimary; 
+           This->mDdCanCreateSurface.lpDDSurfaceDesc = &That->Owner->mddsdPrimary; 
 
            if (This->mDdCanCreateSurface.CanCreateSurface(&This->mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED) 
            {         
@@ -481,34 +486,34 @@
               return DDERR_NOTINITIALIZED;
            }
 
-           memset(&That->Surf->mPrimaryGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
-           That->Surf->mPrimaryGlobal.dwGlobalFlags = DDRAWISURFGBL_ISGDISURFACE;
-           That->Surf->mPrimaryGlobal.lpDD       = &This->mDDrawGlobal;
-           That->Surf->mPrimaryGlobal.lpDDHandle = &This->mDDrawGlobal;
-           That->Surf->mPrimaryGlobal.wWidth  = (WORD)This->mpModeInfos[0].dwWidth;
-           That->Surf->mPrimaryGlobal.wHeight = (WORD)This->mpModeInfos[0].dwHeight;
-           That->Surf->mPrimaryGlobal.lPitch  = This->mpModeInfos[0].lPitch;
-
-           memset(&That->Surf->mPrimaryMore,   0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
-           That->Surf->mPrimaryMore.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
-
-           memset(&That->Surf->mPrimaryLocal,  0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
-           That->Surf->mPrimaryLocal.lpGbl = &That->Surf->mPrimaryGlobal;
-           That->Surf->mPrimaryLocal.lpSurfMore = &That->Surf->mPrimaryMore;
-           That->Surf->mPrimaryLocal.dwProcessId = GetCurrentProcessId();
+           memset(&That->Owner->mPrimaryGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
+           That->Owner->mPrimaryGlobal.dwGlobalFlags = DDRAWISURFGBL_ISGDISURFACE;
+           That->Owner->mPrimaryGlobal.lpDD       = &This->mDDrawGlobal;
+           That->Owner->mPrimaryGlobal.lpDDHandle = &This->mDDrawGlobal;
+           That->Owner->mPrimaryGlobal.wWidth  = (WORD)This->mpModeInfos[0].dwWidth;
+           That->Owner->mPrimaryGlobal.wHeight = (WORD)This->mpModeInfos[0].dwHeight;
+           That->Owner->mPrimaryGlobal.lPitch  = This->mpModeInfos[0].lPitch;
+
+           memset(&That->Owner->mPrimaryMore,   0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
+           That->Owner->mPrimaryMore.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
+
+           memset(&That->Owner->mPrimaryLocal,  0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
+           That->Owner->mPrimaryLocal.lpGbl = &That->Owner->mPrimaryGlobal;
+           That->Owner->mPrimaryLocal.lpSurfMore = &That->Owner->mPrimaryMore;
+           That->Owner->mPrimaryLocal.dwProcessId = GetCurrentProcessId();
 	   
            /*
               FIXME Check the flags if we shall create a primaresurface for overlay or something else 
               Examine windows which flags are being set for we assume this is right unsue I think
            */
            //That->Surf->mPrimaryLocal.dwFlags = DDRAWISURF_PARTOFPRIMARYCHAIN|DDRAWISURF_HASOVERLAYDATA;
-           That->Surf->mPrimaryLocal.ddsCaps.dwCaps = That->Surf->mddsdPrimary.ddsCaps.dwCaps;
-           That->Surf->mpPrimaryLocals[0] = &That->Surf->mPrimaryLocal;
+           That->Owner->mPrimaryLocal.ddsCaps.dwCaps = That->Owner->mddsdPrimary.ddsCaps.dwCaps;
+           That->Owner->mpPrimaryLocals[0] = &That->Owner->mPrimaryLocal;
 
           
 
-           This->mDdCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdPrimary;
-           This->mDdCreateSurface.lplpSList = That->Surf->mpPrimaryLocals;
+           This->mDdCreateSurface.lpDDSurfaceDesc = &That->Owner->mddsdPrimary;
+           This->mDdCreateSurface.lplpSList = That->Owner->mpPrimaryLocals;
            This->mDdCreateSurface.dwSCnt = This->mDDrawGlobal.dsList->dwIntRefCnt ; 
 
             
@@ -535,41 +540,41 @@
               DDSD_ZBUFFERBITDEPTH
            */
 
-           That->Surf->mddsdPrimary.dwFlags = DDSD_CAPS + DDSD_PIXELFORMAT;
-           RtlCopyMemory(&That->Surf->mddsdPrimary.ddpfPixelFormat,&This->mDDrawGlobal.vmiData.ddpfDisplay,sizeof(DDPIXELFORMAT));
-           RtlCopyMemory(&That->Surf->mddsdPrimary.ddsCaps,&This->mDDrawGlobal.ddCaps,sizeof(DDCORECAPS));
+           That->Owner->mddsdPrimary.dwFlags = DDSD_CAPS + DDSD_PIXELFORMAT;
+           RtlCopyMemory(&That->Owner->mddsdPrimary.ddpfPixelFormat,&This->mDDrawGlobal.vmiData.ddpfDisplay,sizeof(DDPIXELFORMAT));
+           //RtlCopyMemory(&That->Surf->mddsdPrimary.ddsCaps,&This->mDDrawGlobal.ddCaps,sizeof(DDCORECAPS));
     
            //RtlCopyMemory(&pDDSD->ddckCKDestOverlay,&This->mDDrawGlobal.ddckCKDestOverlay,sizeof(DDCOLORKEY));
            //RtlCopyMemory(&pDDSD->ddckCKSrcOverlay,&This->mDDrawGlobal.ddckCKSrcOverlay,sizeof(DDCOLORKEY));
 
            if (This->mDDrawGlobal.vmiData.dwDisplayHeight != 0)
            {
-              That->Surf->mddsdPrimary.dwFlags += DDSD_HEIGHT ;
-              That->Surf->mddsdPrimary.dwHeight  = This->mDDrawGlobal.vmiData.dwDisplayHeight;
+              That->Owner->mddsdPrimary.dwFlags += DDSD_HEIGHT ;
+              That->Owner->mddsdPrimary.dwHeight  = This->mDDrawGlobal.vmiData.dwDisplayHeight;
            }
 
            if (This->mDDrawGlobal.vmiData.dwDisplayWidth != 0)
            {
-              That->Surf->mddsdPrimary.dwFlags += DDSD_WIDTH ;
-              That->Surf->mddsdPrimary.dwWidth = This->mDDrawGlobal.vmiData.dwDisplayWidth; 
+              That->Owner->mddsdPrimary.dwFlags += DDSD_WIDTH ;
+              That->Owner->mddsdPrimary.dwWidth = This->mDDrawGlobal.vmiData.dwDisplayWidth; 
            }
 
            if (This->mDDrawGlobal.vmiData.lDisplayPitch != 0)
            {
-              That->Surf->mddsdPrimary.dwFlags += DDSD_PITCH ;           
-              That->Surf->mddsdPrimary.lPitch  = This->mDDrawGlobal.vmiData.lDisplayPitch;
+              That->Owner->mddsdPrimary.dwFlags += DDSD_PITCH ;           
+              That->Owner->mddsdPrimary.lPitch  = This->mDDrawGlobal.vmiData.lDisplayPitch;
            }
 
            if ( This->mDDrawGlobal.dwMonitorFrequency != 0)
            {
-              That->Surf->mddsdPrimary.dwFlags += DDSD_REFRESHRATE ;           
-              That->Surf->mddsdPrimary.dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency;
+              That->Owner->mddsdPrimary.dwFlags += DDSD_REFRESHRATE ;           
+              That->Owner->mddsdPrimary.dwRefreshRate = This->mDDrawGlobal.dwMonitorFrequency;
            }
           
            if (This->mDDrawGlobal.vmiData.ddpfDisplay.dwAlphaBitDepth != 0)
            {
-             That->Surf->mddsdPrimary.dwFlags += DDSD_ALPHABITDEPTH ;
-             That->Surf->mddsdPrimary.dwAlphaBitDepth = This->mDDrawGlobal.vmiData.ddpfDisplay.dwAlphaBitDepth;
+             That->Owner->mddsdPrimary.dwFlags += DDSD_ALPHABITDEPTH ;
+             That->Owner->mddsdPrimary.dwAlphaBitDepth = This->mDDrawGlobal.vmiData.ddpfDisplay.dwAlphaBitDepth;
            }
 
            return DD_OK;
@@ -578,123 +583,136 @@
         else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
         {
            // 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 = &That->Surf->mddsdOverlay; // pDDSD;
-   
-   
-           //if (This->mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED) 
-           //{    
-           //   return DDERR_NOTINITIALIZED;
-           //}
-
-           //if (mDdCanCreateSurface.ddRVal != DD_OK)
-           //{
-           //   return DDERR_NOTINITIALIZED;
-           //}
-
-           //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 = That->Surf->mddsdOverlay.dwBackBufferCount + 1;
-           //for (i = 0; i < cSurfaces; i++)
-           //{
-           //   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);
-
-           //   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(That->Surf->mpOverlayLocals[i], That->Surf->mpOverlayLocals[j])) 
-           //   {
-           //      // derr(L"DirectDrawImpl[%08x]::__setupDevice DdAttachSurface(%d, %d) failed", this, i, j);
-           //     return DD_FALSE;
-           //   }	
-           //}
+            OutputDebugStringA("Create DDSCAPS_OVERLAY\n");
+
+            memset(&That->Surf->mddsdOverlay, 0, 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;
+//  
+//
+            DDHAL_CANCREATESURFACEDATA   mDdCanCreateSurface;
+            mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
+            mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface;
+            mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat;
+            mDdCanCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdOverlay; // pDDSD;
+
+           if (This->mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED) 
+           {
+                // derr(L"DirectDrawImpl[%08x]::__createPrimary Cannot create primary [%08x]", this, rv);
+            return DDERR_NOTINITIALIZED;
+           }
+
+           if (mDdCanCreateSurface.ddRVal != DD_OK)
+           {
+              return DDERR_NOTINITIALIZED;
+           }
+
+ 
+           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 = That->Surf->mddsdOverlay.dwBackBufferCount + 1;
+           UINT i;
+           for ( i = 0; i < cSurfaces; i++)
+           {
+             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);
+
+             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(That->Surf->mpOverlayLocals[i], That->Surf->mpOverlayLocals[j])) 
+	        {            
+                return DD_FALSE;
+            }
+	
+           }
+
+
+           DDHAL_CREATESURFACEDATA      mDdCreateSurface;
+           mDdCreateSurface.lpDD = &This->mDDrawGlobal;
+           mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;  
+           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)
+           {
+	            return DDERR_NOTINITIALIZED;
+            }
   
-           //mDdCreateSurface.lpDD = &This->mDDrawGlobal;
-           //mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;  
-           //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)
-           //{
-           //   return DDERR_NOTINITIALIZED;
-           //}
+
+            if (mDdCreateSurface.ddRVal != DD_OK) 
+            {   
+                return mDdCreateSurface.ddRVal;
+            }
+
+            DDHAL_UPDATEOVERLAYDATA      mDdUpdateOverlay;
+            mDdUpdateOverlay.lpDD = &This->mDDrawGlobal;
+            mDdUpdateOverlay.UpdateOverlay = This->mCallbacks.HALDDSurface.UpdateOverlay;
+            mDdUpdateOverlay.lpDDDestSurface = This->mpPrimaryLocals[0];
+            mDdUpdateOverlay.lpDDSrcSurface = That->Surf->mpOverlayLocals[0];//pDDSurface;
+            mDdUpdateOverlay.dwFlags = DDOVER_SHOW;
+
   
-           //if (mDdCreateSurface.ddRVal != DD_OK) 
-           //{   
-           //   return mDdCreateSurface.ddRVal;
-           //}
+            mDdUpdateOverlay.rDest.top = 0;
+            mDdUpdateOverlay.rDest.left = 0;
+            mDdUpdateOverlay.rDest.right = 50;
+            mDdUpdateOverlay.rDest.bottom = 50;
+
+            mDdUpdateOverlay.rSrc.top = 0;
+            mDdUpdateOverlay.rSrc.left = 0;
+            mDdUpdateOverlay.rSrc.right = 50;
+            mDdUpdateOverlay.rSrc.bottom = 50;
+
+            if ( mDdUpdateOverlay.UpdateOverlay(&mDdUpdateOverlay) == DDHAL_DRIVER_NOTHANDLED)
+            {
+	            return DDERR_NOTINITIALIZED;
+            }
   
-           //DDHAL_UPDATEOVERLAYDATA      mDdUpdateOverlay;
-           //mDdUpdateOverlay.lpDD = &This->mDDrawGlobal;
-           //mDdUpdateOverlay.UpdateOverlay = This->mCallbacks.HALDDSurface.UpdateOverlay;
-           //mDdUpdateOverlay.lpDDDestSurface = That->Surf->mpPrimaryLocals[0];
-           //mDdUpdateOverlay.lpDDSrcSurface = That->Surf->mpOverlayLocals[0];//pDDSurface;
-           //mDdUpdateOverlay.dwFlags = DDOVER_SHOW;
-  
-           //mDdUpdateOverlay.rDest.top = 0;
-           //mDdUpdateOverlay.rDest.left = 0;
-           //mDdUpdateOverlay.rDest.right = 50;
-           //mDdUpdateOverlay.rDest.bottom = 50;
-
-           //mDdUpdateOverlay.rSrc.top = 0;
-           //mDdUpdateOverlay.rSrc.left = 0;
-           //mDdUpdateOverlay.rSrc.right = 50;
-           //mDdUpdateOverlay.rSrc.bottom = 50;
-	 
-           //if (mDdUpdateOverlay.UpdateOverlay(&mDdUpdateOverlay) == DDHAL_DRIVER_NOTHANDLED)
-           //{
-           //   return DDERR_NOTINITIALIZED;
-           //}
-  
-           //if (mDdUpdateOverlay.ddRVal != DD_OK) 
-           //{   
-           //   return mDdUpdateOverlay.ddRVal;
-           //}
-
-           return DD_OK;
-           return DDERR_INVALIDSURFACETYPE;
- 
+            if (mDdUpdateOverlay.ddRVal != DD_OK) 
+            {   
+                return mDdUpdateOverlay.ddRVal;
+            }
+
+            return DD_OK;          
         }	
         else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_BACKBUFFER)
         {

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=21576&r1=21575&r2=21576&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/main/surface_main.c (original)
+++ trunk/reactos/dll/directx/ddraw/main/surface_main.c Thu Apr 13 13:14:32 2006
@@ -32,14 +32,14 @@
 
     DX_WINDBG_trace();
     	
-    return InterlockedIncrement((PLONG)&This->owner->mDDrawGlobal.dsList->dwIntRefCnt);
+    return InterlockedIncrement((PLONG)&This->Owner->mDDrawGlobal.dsList->dwIntRefCnt);
 }
 
 ULONG WINAPI Main_DDrawSurface_Release(LPDIRECTDRAWSURFACE7 iface)
 {
     IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
         
-    ULONG ref = InterlockedDecrement((PLONG)&This->owner->mDDrawGlobal.dsList->dwIntRefCnt);
+    ULONG ref = InterlockedDecrement((PLONG)&This->Owner->mDDrawGlobal.dsList->dwIntRefCnt);
     
     if (ref == 0)
 		HeapFree(GetProcessHeap(), 0, This);
@@ -66,7 +66,7 @@
 	 IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
 	
 
-	if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT) 
+	if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT) 
 	{
 		return Hal_DDrawSurface_Blt( iface,  rdst, src,  rsrc,  dwFlags,  lpbltfx);
 	}
@@ -87,7 +87,7 @@
         return DDERR_INVALIDPARAMS; 
     }
 
-	if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK) 
+	if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK) 
 	{
 		return Hal_DDrawSurface_Lock( iface, prect, pDDSD,  flags,  event);
 	}
@@ -101,7 +101,7 @@
 
 	IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
 
-	if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK) 
+	if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK) 
 	{
 		return Hal_DDrawSurface_Unlock( iface,  pRect);
 	}
@@ -125,7 +125,7 @@
    That = (IDirectDrawSurfaceImpl*)pAttach;
    
    //FIXME Have I put This and That in right order ?? DdAttachSurface(from, to) 
-   return DdAttachSurface( That->Surf->mpPrimaryLocals[0],This->Surf->mpPrimaryLocals[0]);
+   return DdAttachSurface( That->Owner->mpPrimaryLocals[0],This->Owner->mpPrimaryLocals[0]);
 }
 
 /* MSDN: "not currently implemented." */
@@ -213,7 +213,7 @@
     
     IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
 
-	if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP) 
+	if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP) 
 	{
 		return Hal_DDrawSurface_Flip(iface, override,  dwFlags);
 	}
@@ -246,7 +246,7 @@
     
     IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
 
-	if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP) 
+	if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_FLIP) 
 	{
 		return Hal_DDrawSurface_GetBltStatus( iface,  dwFlags);
 	}
@@ -274,7 +274,7 @@
     This = (IDirectDrawSurfaceImpl*)iface;        
      
     RtlZeroMemory(pCaps,sizeof(DDSCAPS2));
-    pCaps->dwCaps = This->Surf->mddsdPrimary.ddsCaps.dwCaps;
+    pCaps->dwCaps = This->Owner->mddsdPrimary.ddsCaps.dwCaps;
     
     return DD_OK;
 }
@@ -321,14 +321,14 @@
       for now we aussme the surface exits and create the hDC for it
     */
      
-    if ((HDC)This->Surf->mPrimaryLocal.hDC == NULL)
-    {
-         This->Surf->mPrimaryLocal.hDC = (ULONG_PTR)GetDC((HWND)This->owner->mDDrawGlobal.lpExclusiveOwner->hWnd);
-        *phDC = (HDC)This->Surf->mPrimaryLocal.hDC;
+    if ((HDC)This->Owner->mPrimaryLocal.hDC == NULL)
+    {
+         This->Owner->mPrimaryLocal.hDC = (ULONG_PTR)GetDC((HWND)This->Owner->mDDrawGlobal.lpExclusiveOwner->hWnd);
+        *phDC = (HDC)This->Owner->mPrimaryLocal.hDC;
     }
     else
     {
-       *phDC =  (HDC)This->Surf->mpPrimaryLocals[0]->hDC;
+       *phDC =  (HDC)This->Owner->mpPrimaryLocals[0]->hDC;
     }
 
     return DD_OK;
@@ -420,7 +420,7 @@
     }
     
     RtlZeroMemory(pDDSD,dwSize);
-    memcpy(pDDSD, &This->Surf->mddsdPrimary, sizeof(DDSURFACEDESC));
+    memcpy(pDDSD, &This->Owner->mddsdPrimary, sizeof(DDSURFACEDESC));
     pDDSD->dwSize = dwSize;
    
     return DD_OK;
@@ -480,12 +480,12 @@
    
     /* FIXME check if surface exits or not */
 
-    if ((HDC)This->Surf->mPrimaryLocal.hDC == NULL)
+    if ((HDC)This->Owner->mPrimaryLocal.hDC == NULL)
     {
         return DDERR_GENERIC;         
     }
 
-    ReleaseDC((HWND)This->owner->mDDrawGlobal.lpExclusiveOwner->hWnd,hDC);
+    ReleaseDC((HWND)This->Owner->mDDrawGlobal.lpExclusiveOwner->hWnd,hDC);
 
     return DD_OK;
 }
@@ -507,7 +507,7 @@
 
     IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
 
-	if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_SETCOLORKEY) 
+	if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_SETCOLORKEY) 
 	{
 		return Hal_DDrawSurface_SetColorKey (iface, dwFlags, pCKey);
 	}
@@ -575,7 +575,7 @@
 
     IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
 
-	if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY) 
+	if (This->Owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_UPDATEOVERLAY) 
 	{
 		return Hal_DDrawSurface_UpdateOverlayDisplay ( iface,  dwFlags);
 	}

Modified: trunk/reactos/dll/directx/ddraw/rosdraw.h
URL: http://svn.reactos.ru/svn/reactos/trunk/reactos/dll/directx/ddraw/rosdraw.h?rev=21576&r1=21575&r2=21576&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/rosdraw.h (original)
+++ trunk/reactos/dll/directx/ddraw/rosdraw.h Thu Apr 13 13:14:32 2006
@@ -82,20 +82,28 @@
     DDHAL_CREATESURFACEDATA      mDdCreateSurface;
     DDHAL_CANCREATESURFACEDATA   mDdCanCreateSurface;
 
-} IDirectDrawImpl; 
-
-/******** Surface Object ********/
-typedef struct 
-{    
+    /* Primarey surface we must reach it from every where */
     DDRAWI_DDRAWSURFACE_GBL mPrimaryGlobal;
     DDRAWI_DDRAWSURFACE_MORE mPrimaryMore;
     DDRAWI_DDRAWSURFACE_LCL mPrimaryLocal;
     DDRAWI_DDRAWSURFACE_LCL *mpPrimaryLocals[1];
-
     DDRAWI_DDRAWCLIPPER_LCL mPrimaryClipperLocal;
     DDRAWI_DDRAWCLIPPER_GBL mPrimaryClipperGlobal;
 
     DDSURFACEDESC mddsdPrimary;
+
+} IDirectDrawImpl; 
+
+/******** Surface Object ********/
+typedef struct 
+{    
+
+    DDRAWI_DDRAWSURFACE_GBL mSurfGlobal;
+    DDRAWI_DDRAWSURFACE_MORE mSurfMore;
+    DDRAWI_DDRAWSURFACE_LCL mSurfLocal;
+    DDRAWI_DDRAWSURFACE_LCL *mpSurfLocals[1];
+    DDRAWI_DDRAWCLIPPER_LCL mSurfClipperLocal;
+    DDRAWI_DDRAWCLIPPER_GBL mSurfClipperGlobal;
 
     DDRAWI_DDRAWSURFACE_GBL mOverlayGlobal;
     DDRAWI_DDRAWSURFACE_LCL mOverlayLocal[6];
@@ -111,7 +119,7 @@
 	IDirectDrawSurface7Vtbl* lpVtbl;
 	IDirectDrawSurface3Vtbl* lpVtbl_v3;
    
-    IDirectDrawImpl* owner;
+    IDirectDrawImpl* Owner;
 
 	DDRAWI_DDRAWSURFACE_GBL Global; 
 	DDRAWI_DDRAWSURFACE_MORE More; 
@@ -233,9 +241,9 @@
 		firstcall = FALSE; \
 	}
 
-#define DX_WINDBG_trace()  
-
-/*
+//#define DX_WINDBG_trace()  
+
+
 #define DX_WINDBG_trace() \
 	static BOOL firstcallx = TRUE; \
 	if (firstcallx) \
@@ -245,7 +253,7 @@
 		OutputDebugStringA(buffer); \
 		firstcallx = TRUE; \
 	}
-*/
+
 
 #define DX_WINDBG_trace_res(width,height,bpp) \
 	static BOOL firstcallxx = TRUE; \




More information about the Ros-diffs mailing list