⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddraw_main.c

📁 winNT技术操作系统,国外开放的原代码和LIUX一样
💻 C
📖 第 1 页 / 共 3 页
字号:

 //   IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
 //   DDSURFACEDESC2 desc_callback;
 //   DEVMODE DevMode;   
 //   int iMode=0;
	//
	//RtlZeroMemory(&desc_callback, sizeof(DDSURFACEDESC2));
	//		    	   
 //   desc_callback.dwSize = sizeof(DDSURFACEDESC2);	

 //   desc_callback.dwFlags = DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT|DDSD_PITCH;

 //   if (dwFlags & DDEDM_REFRESHRATES)
 //   {
	//    desc_callback.dwFlags |= DDSD_REFRESHRATE;
 //       desc_callback.dwRefreshRate = This->lpLcl->lpGbl->dwMonitorFrequency;
 //   }

 // 
 //    /* FIXME check if the mode are suppretd before sending it back  */

	//memset(&DevMode,0,sizeof(DEVMODE));
	//DevMode.dmSize = (WORD)sizeof(DEVMODE);
	//DevMode.dmDriverExtra = 0;

 //   while (EnumDisplaySettingsEx(NULL, iMode, &DevMode, 0))
 //   {
 //      
	//   if (pDDSD)
	//   {
	//       if ((pDDSD->dwFlags & DDSD_WIDTH) && (pDDSD->dwWidth != DevMode.dmPelsWidth))
	//       continue; 
	//       if ((pDDSD->dwFlags & DDSD_HEIGHT) && (pDDSD->dwHeight != DevMode.dmPelsHeight))
	//	   continue; 
	//       if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) &&
	//	   (pDDSD->ddpfPixelFormat.dwRGBBitCount != DevMode.dmBitsPerPel))
	//	    continue; 
 //      } 
	//
 //      desc_callback.dwHeight = DevMode.dmPelsHeight;
	//   desc_callback.dwWidth = DevMode.dmPelsWidth;
	//   
 //      if (DevMode.dmFields & DM_DISPLAYFREQUENCY)
 //      {
 //           desc_callback.dwRefreshRate = DevMode.dmDisplayFrequency;
 //      }

	//   if (desc_callback.dwRefreshRate == 0)
	//   {
	//	   DX_STUB_str("dwRefreshRate = 0, we hard code it to value 60");
 //          desc_callback.dwRefreshRate = 60; /* Maybe the valye should be biger */
	//   }

 //     /* above same as wine */
	//  if ((pDDSD->dwFlags & DDSD_PIXELFORMAT) && (pDDSD->ddpfPixelFormat.dwFlags & DDPF_RGB) )
	//  {         
	//		switch(DevMode.dmBitsPerPel)
	//		{
	//			case  8:
	//				 desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
	//				 desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
	//				 desc_callback.ddpfPixelFormat.dwFourCC = 0;
	//				 desc_callback.ddpfPixelFormat.dwRGBBitCount=8;
	//				 /* FIXME right value */
	//				 desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
	//				 desc_callback.ddpfPixelFormat.dwGBitMask = 0; /* Green bitmask */
	//				 desc_callback.ddpfPixelFormat.dwBBitMask = 0; /* Blue bitmask */
	//				break;

	//			case 15:
	//				desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
	//				 desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
	//				 desc_callback.ddpfPixelFormat.dwFourCC = 0;
	//				 desc_callback.ddpfPixelFormat.dwRGBBitCount=15;
	//				 /* FIXME right value */
	//				 desc_callback.ddpfPixelFormat.dwRBitMask = 0x7C00; /* red bitmask */
	//				 desc_callback.ddpfPixelFormat.dwGBitMask = 0x3E0; /* Green bitmask */
	//				 desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */
	//				break;

	//			case 16: 
	//				 desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
	//				 desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
	//				 desc_callback.ddpfPixelFormat.dwFourCC = 0;
	//				 desc_callback.ddpfPixelFormat.dwRGBBitCount=16;
	//				 /* FIXME right value */
	//				 desc_callback.ddpfPixelFormat.dwRBitMask = 0xF800; /* red bitmask */
	//				 desc_callback.ddpfPixelFormat.dwGBitMask = 0x7E0; /* Green bitmask */
	//				 desc_callback.ddpfPixelFormat.dwBBitMask = 0x1F; /* Blue bitmask */
	//				break;

	//			case 24: 
	//				 desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
	//				 desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
	//				 desc_callback.ddpfPixelFormat.dwFourCC = 0;
	//				 desc_callback.ddpfPixelFormat.dwRGBBitCount=24;
	//				 /* FIXME right value */
	//				 desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
	//				 desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */
	//				 desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */
	//				break;

	//			case 32: 
	//				 desc_callback.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
	//				 desc_callback.ddpfPixelFormat.dwFlags = DDPF_RGB;
	//				 desc_callback.ddpfPixelFormat.dwFourCC = 0;
	//				 desc_callback.ddpfPixelFormat.dwRGBBitCount=8;
	//				 /* FIXME right value */
	//				 desc_callback.ddpfPixelFormat.dwRBitMask = 0xFF0000; /* red bitmask */
	//				 desc_callback.ddpfPixelFormat.dwGBitMask = 0x00FF00; /* Green bitmask */
	//				 desc_callback.ddpfPixelFormat.dwBBitMask = 0x0000FF; /* Blue bitmask */
	//				break;

	//			default:
	//				break;          
	//		}
	//		desc_callback.ddsCaps.dwCaps = 0;
	//	    if (desc_callback.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) 
	//	    {
	//			/* FIXME srt DDCS Caps flag */
	//			desc_callback.ddsCaps.dwCaps |= DDSCAPS_PALETTE;
	//	    }    
	//  }
	//			  
	//  if (DevMode.dmBitsPerPel==15)
 //     {           
	//	  desc_callback.lPitch =  DevMode.dmPelsWidth + (8 - ( DevMode.dmPelsWidth % 8)) % 8;
	//  }
	//  else
	//  {
	//	  desc_callback.lPitch = DevMode.dmPelsWidth * (DevMode.dmBitsPerPel  / 8);
	//      desc_callback.lPitch = desc_callback.lPitch + (8 - (desc_callback.lPitch % 8)) % 8;
	//  }
	//  	 	  	                                                  
 //     if (callback(&desc_callback, context) == DDENUMRET_CANCEL)
 //     {
 //        return DD_OK;       
 //     }
 //      
 //     iMode++; 
 //   }

 //   return DD_OK;
}

/*
 * stub
 * Status not done
 */
HRESULT WINAPI 
Main_DirectDraw_EnumSurfaces(LPDIRECTDRAW7 iface, DWORD dwFlags,
                 LPDDSURFACEDESC2 lpDDSD2, LPVOID context,
                 LPDDENUMSURFACESCALLBACK7 callback) 
{
    DX_WINDBG_trace();
    DX_STUB;
}

/*
 * IMPLEMENT
 * Status ok
 */
HRESULT WINAPI 
Main_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface) 
{
    LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
    DDHAL_FLIPTOGDISURFACEDATA mDdFlipToGDISurface;

    DX_WINDBG_trace();

    mDdFlipToGDISurface.ddRVal = DDERR_NOTINITIALIZED;
    mDdFlipToGDISurface.dwReserved = 0;
    mDdFlipToGDISurface.dwToGDI = TRUE;
    mDdFlipToGDISurface.FlipToGDISurface = This->lpLcl->lpDDCB->cbDDCallbacks.FlipToGDISurface;

    if (mDdFlipToGDISurface.FlipToGDISurface == NULL)
    {
        return  DDERR_NODRIVERSUPPORT;
    }

    if (mDdFlipToGDISurface.FlipToGDISurface(&mDdFlipToGDISurface)==DDHAL_DRIVER_HANDLED);
    {
        return mDdFlipToGDISurface.ddRVal;
    }

    return  DDERR_NODRIVERSUPPORT;
}
 
/*
 * IMPLEMENT
 * Status ok
 */
HRESULT WINAPI 
Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps,
            LPDDCAPS pHELCaps) 
{

    DDSCAPS2 ddscaps = {0};
    DWORD status = DD_FALSE;	
    LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;

    DX_WINDBG_trace();

    if (pDriverCaps != NULL)
    {
        Main_DirectDraw_GetAvailableVidMem(iface,
                                         &ddscaps,
                                         &This->lpLcl->lpGbl->ddCaps.dwVidMemTotal,
                                         &This->lpLcl->lpGbl->ddCaps.dwVidMemFree);

        RtlCopyMemory(pDriverCaps,&This->lpLcl->lpGbl->ddCaps,sizeof(DDCORECAPS));
        pDriverCaps->dwSize=sizeof(DDCAPS);

        status = DD_OK;
    }

    if (pHELCaps != NULL) 
    {
        Main_DirectDraw_GetAvailableVidMem(iface, 
                                         &ddscaps,
                                         &This->lpLcl->lpGbl->ddHELCaps.dwVidMemTotal,
                                         &This->lpLcl->lpGbl->ddHELCaps.dwVidMemFree);

        RtlCopyMemory(pDriverCaps,&This->lpLcl->lpGbl->ddHELCaps,sizeof(DDCORECAPS));
        status = DD_OK;
    }
    return status;
}


/*
 * IMPLEMENT
 * Status ok
 */
HRESULT WINAPI Main_DirectDraw_GetDisplayMode(LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD) 
{       
    LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;

	DX_WINDBG_trace();

    if (pDDSD == NULL)
    {
      return DD_FALSE;
    }
        
    pDDSD->dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_PITCH | DDSD_PIXELFORMAT | DDSD_REFRESHRATE | DDSD_WIDTH; 
	pDDSD->dwHeight  = This->lpLcl->lpGbl->vmiData.dwDisplayHeight;
    pDDSD->dwWidth = This->lpLcl->lpGbl->vmiData.dwDisplayWidth; 
    pDDSD->lPitch  = This->lpLcl->lpGbl->vmiData.lDisplayPitch;
    pDDSD->dwRefreshRate = This->lpLcl->lpGbl->dwMonitorFrequency;
    pDDSD->dwAlphaBitDepth = This->lpLcl->lpGbl->vmiData.ddpfDisplay.dwAlphaBitDepth;

    RtlCopyMemory(&pDDSD->ddpfPixelFormat,&This->lpLcl->lpGbl->vmiData.ddpfDisplay,sizeof(DDPIXELFORMAT));
    RtlCopyMemory(&pDDSD->ddsCaps,&This->lpLcl->lpGbl->ddCaps,sizeof(DDCORECAPS));
    
    RtlCopyMemory(&pDDSD->ddckCKDestOverlay,&This->lpLcl->lpGbl->ddckCKDestOverlay,sizeof(DDCOLORKEY));
    RtlCopyMemory(&pDDSD->ddckCKSrcOverlay,&This->lpLcl->lpGbl->ddckCKSrcOverlay,sizeof(DDCOLORKEY));

    /* have not check where I should get hold of this info yet
	DWORD  dwBackBufferCount;    
    DWORD  dwReserved;
    LPVOID lpSurface;    
    DDCOLORKEY    ddckCKDestBlt;    
    DDCOLORKEY    ddckCKSrcBlt;  
    DWORD         dwTextureStage;
    */
  
    return DD_OK;
}

/*
 * Stub
 * Status todo
 */
HRESULT WINAPI 
Main_DirectDraw_GetFourCCCodes(LPDIRECTDRAW7 iface, LPDWORD pNumCodes, LPDWORD pCodes)
{
    DX_WINDBG_trace();
    DX_STUB;
}

/*
 * Stub
 * Status todo
 */
HRESULT WINAPI 
Main_DirectDraw_GetGDISurface(LPDIRECTDRAW7 iface, 
                                             LPDIRECTDRAWSURFACE7 *lplpGDIDDSSurface)
{
    DX_WINDBG_trace();
    DX_STUB;
}

/*
 * IMPLEMENT
 * Status ok
 */
HRESULT WINAPI 
Main_DirectDraw_GetMonitorFrequency(LPDIRECTDRAW7 iface,LPDWORD freq)
{      
    LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;

    DX_WINDBG_trace();

    if (freq == NULL)
    {
        return DD_FALSE;
    }

	*freq = This->lpLcl->lpGbl->dwMonitorFrequency;
    return DD_OK;
}

/*
 * IMPLEMENT
 * Status ok
 */
HRESULT WINAPI 
Main_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine)
{    		
    LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
    DDHAL_GETSCANLINEDATA mDdGetScanLine;

    DX_WINDBG_trace();

    *lpdwScanLine = 0;

    mDdGetScanLine.ddRVal = DDERR_NOTINITIALIZED;
    mDdGetScanLine.dwScanLine = 0;
    mDdGetScanLine.GetScanLine = This->lpLcl->lpDDCB->cbDDCallbacks.GetScanLine;
    mDdGetScanLine.lpDD = This->lpLcl->lpGbl;

    if (mDdGetScanLine.GetScanLine == NULL)
    {
        return  DDERR_NODRIVERSUPPORT;
    }

    mDdGetScanLine.ddRVal = DDERR_NOTPALETTIZED;
    mDdGetScanLine.dwScanLine = 0;

    if (mDdGetScanLine.GetScanLine(&mDdGetScanLine)==DDHAL_DRIVER_HANDLED);
    {
        *lpdwScanLine = mDdGetScanLine.dwScanLine;
        return mDdGetScanLine.ddRVal;
    }

    return DDERR_NODRIVERSUPPORT;
}

/*
 * Stub
 * Status todo
 */
HRESULT WINAPI 
Main_DirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW7 iface, LPBOOL lpbIsInVB)
{
    DX_WINDBG_trace();
    DX_STUB;
}

/*
 * IMPLEMENT
 * Status ok
 */
HRESULT 
WINAPI 
Main_DirectDraw_Initialize (LPDIRECTDRAW7 iface, LPGUID lpGUID)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -