start implement DrvGetDirectDrawInfo it is not complete only around 1/3 is done
authorMagnus Olsen <magnus@greatlord.com>
Mon, 17 Jul 2006 22:14:58 +0000 (22:14 +0000)
committerMagnus Olsen <magnus@greatlord.com>
Mon, 17 Jul 2006 22:14:58 +0000 (22:14 +0000)
svn path=/trunk/; revision=23130

reactos/drivers/video/displays/framebuf/ddenable.c
reactos/drivers/video/displays/framebuf/framebuf.h
reactos/drivers/video/displays/framebuf/screen.c
reactos/drivers/video/displays/framebuf/surface.c

index d384483..ec3a5eb 100644 (file)
@@ -51,16 +51,17 @@ DrvEnableDirectDraw(
      ppdev->ddpfDisplay.dwGBitMask = ppdev->GreenMask;
      ppdev->ddpfDisplay.dwBBitMask = ppdev->BlueMask;
 
-        switch(ppdev->BitsPerPixel)
+     ppdev->ddpfDisplay.dwRGBBitCount=ppdev->BitsPerPixel;
+        ppdev->ddpfDisplay.dwRGBAlphaBitMask = 0;
+        ppdev->ddpfDisplay.dwFlags = DDPF_RGB;
+
+        switch(ppdev->iDitherFormat)
         {
-               case BMF_8BPP:
-             ppdev->ddpfDisplay.dwRGBAlphaBitMask = 0;
-             ppdev->ddpfDisplay.dwRGBBitCount=8;
-             ppdev->ddpfDisplay.dwFlags = DDPF_RGB | DDPF_PALETTEINDEXED8;
+               case BMF_8BPP:             
+             ppdev->ddpfDisplay.dwFlags  |= DDPF_PALETTEINDEXED8;
              break;
         
-        case BMF_16BPP:
-             ppdev->ddpfDisplay.dwRGBBitCount=16;
+        case BMF_16BPP:             
              switch(ppdev->RedMask)
              {
                 case 0x7C00:
@@ -68,28 +69,23 @@ DrvEnableDirectDraw(
                      break;
 
                 default:
-                     ppdev->ddpfDisplay.dwRGBAlphaBitMask = 0;
+                     break;
                         }        
              break;
 
-        case BMF_24BPP:
-             ppdev->ddpfDisplay.dwRGBAlphaBitMask = 0;
-             ppdev->ddpfDisplay.dwRGBBitCount=24;
+        case BMF_24BPP:             
              break;
 
         case BMF_32BPP:
-             ppdev->ddpfDisplay.dwRGBAlphaBitMask = 0xff000000;
-             ppdev->ddpfDisplay.dwRGBBitCount=32;
+             ppdev->ddpfDisplay.dwRGBAlphaBitMask = 0xff000000;             
              break;
+
         default:
-           /* FIXME unknown pixelformat */
+           /* FIXME unknown pixel bits */
+                       ppdev->ddpfDisplay.dwRGBBitCount=0;
             break;
         }
-
-   
-    //InitDDHAL(ppdev);
-
-
+     
         if (pCallBacks !=NULL)
         {
                 memset(pCallBacks,0,sizeof(DD_CALLBACKS));
@@ -138,6 +134,52 @@ DrvGetDirectDrawInfo(
   OUT DWORD  *pdwNumFourCCCodes,
   OUT DWORD  *pdwFourCC)
 {      
-       return FALSE;
+       PPDEV ppdev = (PPDEV)dhpdev;
+
+       /* rest some data */
+    *pdwNumFourCCCodes = 0;
+    *pdwNumHeaps = 0;
+
+        
+
+       /* 
+          check see if pvmList and pdwFourCC are second call 
+          or frist. Secon call  we fill in pHalInfo info 
+    */
+
+       if(!(pvmList && pdwFourCC)) 
+       {
+
+               /* Calc how much memmory is left on the video cards memmory */
+               pHalInfo->ddCaps.dwVidMemTotal = (ppdev->MemHeight - ppdev->ScreenHeight) * ppdev->ScreenDelta;
+
+        /* fill in some basic info that we need */
+        pHalInfo->vmiData.pvPrimary                 = ppdev->ScreenPtr;
+        pHalInfo->vmiData.fpPrimary                 = 0;
+        pHalInfo->vmiData.dwDisplayWidth            = ppdev->ScreenWidth;
+        pHalInfo->vmiData.dwDisplayHeight           = ppdev->ScreenHeight;
+        pHalInfo->vmiData.lDisplayPitch             = ppdev->ScreenDelta;
+        pHalInfo->vmiData.ddpfDisplay.dwSize        = sizeof(DDPIXELFORMAT);
+        pHalInfo->vmiData.ddpfDisplay.dwFlags       = DDPF_RGB;
+        pHalInfo->vmiData.ddpfDisplay.dwRGBBitCount = ppdev->BitsPerPixel;
+               pHalInfo->vmiData.ddpfDisplay.dwRBitMask    = ppdev->RedMask;
+        pHalInfo->vmiData.ddpfDisplay.dwGBitMask    = ppdev->GreenMask;
+        pHalInfo->vmiData.ddpfDisplay.dwBBitMask    = ppdev->BlueMask; 
+        pHalInfo->vmiData.dwOffscreenAlign = 4;
+        pHalInfo->vmiData.dwZBufferAlign = 4;
+        pHalInfo->vmiData.dwTextureAlign = 4;
+
+               if ( ppdev->BitsPerPixel == 8 ) 
+               {        
+            pHalInfo->vmiData.ddpfDisplay.dwFlags |= DDPF_PALETTEINDEXED8;             
+        } 
+
+               
+               
+               
+
+       }
+
+       return TRUE;
 }
 
index bd69709..fa37a15 100644 (file)
@@ -63,6 +63,8 @@ typedef struct _PDEV
 #endif
 
    /* DirectX Support */   
+   DWORD iDitherFormat;
+   ULONG MemHeight;
    BOOL bDDInitialized;   
    DDPIXELFORMAT ddpfDisplay;
    DDHALINFO   dxHalInfo;
index 6b8557f..fe2e30c 100644 (file)
@@ -191,6 +191,8 @@ IntInitScreenInfo(
    ppdev->ScreenDelta = SelectedMode->ScreenStride;
    ppdev->BitsPerPixel = SelectedMode->BitsPerPlane * SelectedMode->NumberOfPlanes;
 
+   ppdev->MemHeight = SelectedMode->VideoMemoryBitmapHeight;
+
    ppdev->RedMask = SelectedMode->RedMask;
    ppdev->GreenMask = SelectedMode->GreenMask;
    ppdev->BlueMask = SelectedMode->BlueMask;
index c9cedf6..abcfb95 100644 (file)
@@ -91,6 +91,8 @@ DrvEnableSurface(
          return FALSE;
    }
 
+   ppdev->iDitherFormat = BitmapType;
+
    ScreenSize.cx = ppdev->ScreenWidth;
    ScreenSize.cy = ppdev->ScreenHeight;
 
@@ -181,8 +183,9 @@ DrvAssertMode(
                                   &ulTemp);
       if (ppdev->BitsPerPixel == 8)
       {
-        IntSetPalette(dhpdev, ppdev->PaletteEntries, 0, 256);
+            IntSetPalette(dhpdev, ppdev->PaletteEntries, 0, 256);
       }
+
       return Result;
 
    }