[ros-diffs] [greatlrd] 25136: now we are back in track, we are almost same state as we got with the old desgin of ddraw.dll bltblt working again for HAL

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Tue Dec 12 21:35:13 CET 2006


Author: greatlrd
Date: Tue Dec 12 23:35:12 2006
New Revision: 25136

URL: http://svn.reactos.org/svn/reactos?rev=25136&view=rev
Log:
now we are back in track, we are almost same state as we got with the old desgin of ddraw.dll
bltblt working again for HAL

Modified:
    trunk/reactos/dll/directx/ddraw/main/surface_main.c

Modified: trunk/reactos/dll/directx/ddraw/main/surface_main.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/directx/ddraw/main/surface_main.c?rev=25136&r1=25135&r2=25136&view=diff
==============================================================================
--- trunk/reactos/dll/directx/ddraw/main/surface_main.c (original)
+++ trunk/reactos/dll/directx/ddraw/main/surface_main.c Tue Dec 12 23:35:12 2006
@@ -77,43 +77,137 @@
 
 	 DX_WINDBG_trace();
 
-	 mDdBlt.lpDDDestSurface = ThisDest->lpLcl->lpSurfMore->slist[0];	   
+     if (( ThisDest->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.dwFlags 
+		   & DDHAL_SURFCB32_BLT) != DDHAL_SURFCB32_BLT)
+	 {
+		 return DDERR_GENERIC;
+	 }
+
+	 ZeroMemory(&mDdBlt, sizeof(DDHAL_BLTDATA));
+     ZeroMemory(&mDdBlt.bltFX, sizeof(DDBLTFX));
+	 
      if (!DdResetVisrgn( ThisDest->lpLcl->lpSurfMore->slist[0], NULL)) 
      {
-         // derr(L"DirectDrawImpl[%08x]::_clear DdResetVisrgn failed", this);
+		 DX_STUB_str("DdResetVisrgn failed");         
      }   
 
-     ZeroMemory(&mDdBlt, sizeof(DDHAL_BLTDATA));
-     ZeroMemory(&mDdBlt.bltFX, sizeof(DDBLTFX));
-     mDdBlt.bltFX.dwSize = sizeof(DDBLTFX);
-
-	 mDdBlt.lpDD =  ThisDest->lpLcl->lpSurfMore->lpDD_lcl->lpGbl;
+	 mDdBlt.lpDD = ThisDest->lpLcl->lpSurfMore->lpDD_lcl->lpGbl;
 	 mDdBlt.Blt = ThisDest->lpLcl->lpSurfMore->lpDD_lcl->lpDDCB->cbDDSurfaceCallbacks.Blt;
      mDdBlt.lpDDDestSurface = ThisDest->lpLcl->lpSurfMore->slist[0];
-	
-	 ThisDest->lpLcl->lpSurfMore->slist[0]->hDC = ThisDest->lpLcl->lpSurfMore->lpDD_lcl->hDC; // This->lpLcl->hWnd;
-     mDdBlt.rDest.top = 50;
-     mDdBlt.rDest.bottom = 100;
-     mDdBlt.rDest.left = 0;
-     mDdBlt.rDest.right = 100;
-     mDdBlt.lpDDSrcSurface = NULL;
-     mDdBlt.IsClipped = FALSE;    
-     mDdBlt.bltFX.dwFillColor = 0xFFFF00;
-     mDdBlt.dwFlags = DDBLT_COLORFILL | DDBLT_WAIT;
-    
+
+	 ThisDest->lpLcl->lpSurfMore->slist[0]->hDC = 
+		       ThisDest->lpLcl->lpSurfMore->lpDD_lcl->hDC;
+
+     /* Setup Src */
+	 if (ThisSrc != NULL)
+	 {
+		 mDdBlt.lpDDSrcSurface = ThisSrc->lpLcl->lpSurfMore->slist[0];
+
+		 ThisSrc->lpLcl->lpSurfMore->slist[0]->hDC = 
+			      ThisSrc->lpLcl->lpSurfMore->lpDD_lcl->hDC;
+
+		 if (rsrc != NULL)
+		 {
+			 memmove(&mDdBlt.rSrc, rsrc, sizeof (RECTL));
+		 }
+		 else
+		 {
+			 if ( ThisSrc->lpLcl->lpSurfMore->lpDD_lcl->dwLocalFlags &
+				  DDRAWILCL_ISFULLSCREEN)
+			 {
+				  mDdBlt.rSrc.top = 0;
+				  mDdBlt.rSrc.left = 0;
+				  mDdBlt.rSrc.right = ThisSrc->lpLcl->lpSurfMore->lpDD_lcl->lpGbl->
+				                       vmiData.dwDisplayWidth;
+
+			      mDdBlt.rSrc.bottom = ThisSrc->lpLcl->lpSurfMore->lpDD_lcl->lpGbl->
+				                        vmiData.lDisplayPitch;
+	         }
+	         else
+			 {		    			 
+				 if(!GetWindowRect((HWND)ThisSrc->lpLcl->lpSurfMore->lpDD_lcl->hWnd, 
+				     (RECT *)&mDdBlt.rSrc))
+				 {			   
+					  DX_STUB_str("GetWindowRect failed");      
+				 }			
+			 }
+		 }
+
+	 /* FIXME 
+	  *  compare so we do not write to far 
+	  *  ThisDest->lpLcl->lpGbl->wWidth; <- surface max width
+	  *  ThisDest->lpLcl->lpGbl->wHeight <- surface max heght
+	  *  ThisDest->lpLcl->lpGbl->lPitch  <- surface bpp
+	  */
+		 
+	 }
+     
+	 /* Setup dest */
+	 if (rdst != NULL)
+	 {
+         memmove(&mDdBlt.rDest, rdst, sizeof (RECTL));
+	 }
+	 else
+	 {
+		 if ( ThisDest->lpLcl->lpSurfMore->lpDD_lcl->dwLocalFlags &
+			  DDRAWILCL_ISFULLSCREEN)
+	     {
+			 mDdBlt.rDest.top = 0;
+             mDdBlt.rDest.left = 0;
+			 mDdBlt.rDest.right = ThisDest->lpLcl->lpSurfMore->lpDD_lcl->lpGbl->
+				                  vmiData.dwDisplayWidth;
+
+			 mDdBlt.rDest.bottom = ThisDest->lpLcl->lpSurfMore->lpDD_lcl->lpGbl->
+				                   vmiData.lDisplayPitch;
+	     }
+	     else
+	     {		    
+			 
+			if(!GetWindowRect((HWND)ThisDest->lpLcl->lpSurfMore->lpDD_lcl->hWnd, 
+				(RECT *)&mDdBlt.rDest))
+			{			   
+               DX_STUB_str("GetWindowRect failed");      
+			}			
+	     }
+	 }
+
+	 /* FIXME 
+	  *  compare so we do not write to far 
+	  *  ThisDest->lpLcl->lpGbl->wWidth; <- surface max width
+	  *  ThisDest->lpLcl->lpGbl->wHeight <- surface max heght
+	  *  ThisDest->lpLcl->lpGbl->lPitch  <- surface bpp
+	  */
+
+	 
+	 /* setup bltFX */
+	 if (lpbltfx != NULL)
+	 {
+		 memmove(&mDdBlt.bltFX, lpbltfx, sizeof (DDBLTFX));
+	 }
+
+	 /* setup value that are not config yet */
+	 mDdBlt.dwFlags = dwFlags;
+	 mDdBlt.IsClipped = FALSE;
+	 mDdBlt.bltFX.dwSize = sizeof(DDBLTFX);   
+
+
+     /* FIXME 
+		BltData.dwRectCnt
+	    BltData.dwROPFlags
+	    BltData.IsClipped	 	 
+	    BltData.prDestRects	 
+	    BltData.rOrigDest
+	    BltData.rOrigSrc			
+		BltData.ddRVal		
+	*/
+              
      if (mDdBlt.Blt(&mDdBlt) != DDHAL_DRIVER_HANDLED)
 	 {
-        //printf("Fail to mDdBlt = DDHAL_DRIVER_HANDLED\n");
-	    return DDHAL_DRIVER_HANDLED;
+        DX_STUB_str("mDdBlt DDHAL_DRIVER_HANDLED");      
+		return DDERR_NOBLTHW;
      }
 
-     if (mDdBlt.ddRVal!=DD_OK) 
-	 {      
-		  //printf("Fail to mDdBlt mDdBlt.ddRVal = %d:%s\n",(int)mDdBlt.ddRVal,DDErrorString(mDdBlt.ddRVal)); 
-	    return mDdBlt.ddRVal;
-     }
-
-     return DDERR_GENERIC;	 	
+	 return mDdBlt.ddRVal;	 	
 }
 
 




More information about the Ros-diffs mailing list