Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenddenable.c
Go to the documentation of this file.
00001 /* 00002 * ReactOS Generic Framebuffer display driver directdraw interface 00003 * 00004 * Copyright (C) 2006 Magnus Olsen 00005 * 00006 * This program is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU General Public License 00008 * as published by the Free Software Foundation; either version 2 00009 * of the License, or (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License along 00017 * with this program; if not, write to the Free Software Foundation, Inc., 00018 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 00019 */ 00020 00021 #include "framebuf.h" 00022 00023 VOID APIENTRY 00024 DrvDisableDirectDraw( IN DHPDEV dhpdev) 00025 { 00026 PPDEV ppdev = (PPDEV)dhpdev; 00027 ppdev->bDDInitialized = FALSE; 00028 /* Add Clean up code here if we need it 00029 when we shout down directx interface */ 00030 } 00031 00032 BOOL APIENTRY 00033 DrvEnableDirectDraw( 00034 IN DHPDEV dhpdev, 00035 OUT DD_CALLBACKS *pCallBacks, 00036 OUT DD_SURFACECALLBACKS *pSurfaceCallBacks, 00037 OUT DD_PALETTECALLBACKS *pPaletteCallBacks) 00038 { 00039 PPDEV ppdev = (PPDEV)dhpdev; 00040 00041 if (ppdev->bDDInitialized == TRUE) 00042 { 00043 return TRUE; 00044 } 00045 00046 /* Setup pixel format */ 00047 ppdev->ddpfDisplay.dwSize = sizeof( DDPIXELFORMAT ); 00048 ppdev->ddpfDisplay.dwFourCC = 0; 00049 00050 ppdev->ddpfDisplay.dwRBitMask = ppdev->RedMask; 00051 ppdev->ddpfDisplay.dwGBitMask = ppdev->GreenMask; 00052 ppdev->ddpfDisplay.dwBBitMask = ppdev->BlueMask; 00053 00054 ppdev->ddpfDisplay.dwRGBBitCount=ppdev->BitsPerPixel; 00055 ppdev->ddpfDisplay.dwRGBAlphaBitMask = 0; 00056 ppdev->ddpfDisplay.dwFlags = DDPF_RGB; 00057 00058 ppdev->pvmList = NULL; 00059 00060 switch(ppdev->iDitherFormat) 00061 { 00062 case BMF_8BPP: 00063 ppdev->ddpfDisplay.dwFlags |= DDPF_PALETTEINDEXED8; 00064 break; 00065 00066 case BMF_16BPP: 00067 switch(ppdev->RedMask) 00068 { 00069 case 0x7C00: 00070 ppdev->ddpfDisplay.dwRGBAlphaBitMask = 0x8000; 00071 break; 00072 00073 default: 00074 break; 00075 } 00076 break; 00077 00078 case BMF_24BPP: 00079 break; 00080 00081 case BMF_32BPP: 00082 ppdev->ddpfDisplay.dwRGBAlphaBitMask = 0xff000000; 00083 break; 00084 00085 default: 00086 /* FIXME unknown pixel bits */ 00087 ppdev->ddpfDisplay.dwRGBBitCount=0; 00088 break; 00089 } 00090 00091 if (pCallBacks !=NULL) 00092 { 00093 memset(pCallBacks,0,sizeof(DD_CALLBACKS)); 00094 00095 /* FILL pCallBacks with hal stuff */ 00096 pCallBacks->dwSize = sizeof(DDHAL_DDCALLBACKS); 00097 pCallBacks->CanCreateSurface = (PDD_CANCREATESURFACE)DdCanCreateSurface; 00098 pCallBacks->CreateSurface = (PDD_CREATESURFACE)DdCreateSurface; 00099 00100 /* Fill in the HAL Callback flags */ 00101 pCallBacks->dwFlags = DDHAL_CB32_CANCREATESURFACE | DDHAL_CB32_CREATESURFACE; 00102 } 00103 00104 if (pSurfaceCallBacks !=NULL) 00105 { 00106 memset(pSurfaceCallBacks,0,sizeof(DD_SURFACECALLBACKS)); 00107 00108 /* FILL pSurfaceCallBacks with hal stuff */ 00109 // pSurfaceCallBacks.dwSize = sizeof(DDHAL_DDSURFACECALLBACKS); 00110 // pSurfaceCallBacks.DestroySurface = DdDestroySurface; 00111 // pSurfaceCallBacks.Lock = DdLock; 00112 // pSurfaceCallBacks.Blt = DdBlt; 00113 00114 // pSurfaceCallBacks->dwFlags = DDHAL_SURFCB32_DESTROYSURFACE | DDHAL_SURFCB32_LOCK | DDHAL_SURFCB32_BLT ; 00115 } 00116 00117 if (pPaletteCallBacks !=NULL) 00118 { 00119 memset(pPaletteCallBacks,0,sizeof(DD_PALETTECALLBACKS)); 00120 /* FILL pPaletteCallBacks with hal stuff */ 00121 /* We will not support this callback in the framebuf.dll */ 00122 } 00123 00124 00125 /* Fixme fill the ppdev->dxHalInfo with the info we need */ 00126 ppdev->bDDInitialized = TRUE; 00127 return ppdev->bDDInitialized; 00128 } 00129 00130 BOOL APIENTRY 00131 DrvGetDirectDrawInfo( 00132 IN DHPDEV dhpdev, 00133 OUT DD_HALINFO *pHalInfo, 00134 OUT DWORD *pdwNumHeaps, 00135 OUT VIDEOMEMORY *pvmList, 00136 OUT DWORD *pdwNumFourCCCodes, 00137 OUT DWORD *pdwFourCC) 00138 { 00139 PPDEV ppdev = (PPDEV)dhpdev; 00140 LONG i; 00141 DWORD heap = 1; /* we always alloc one heap */ 00142 BOOL bDDrawHeap = FALSE; 00143 00144 if (ppdev == NULL) 00145 return FALSE; 00146 00147 /* check so pHalInfo, pdwNumHeaps, pdwNumFourCCCodes is not NULL 00148 pdwFourCC and pvmList can be null 00149 */ 00150 00151 if (pHalInfo == NULL) 00152 return FALSE; 00153 00154 if (pdwNumHeaps == NULL) 00155 return FALSE; 00156 00157 if (pdwNumFourCCCodes == NULL) 00158 return FALSE; 00159 00160 /* Setup heap */ 00161 if ( (ppdev->ScreenWidth < ppdev->MemWidth) || (ppdev->ScreenHeight < ppdev->MemHeight)) 00162 { 00163 bDDrawHeap = TRUE; 00164 heap++; 00165 } 00166 00167 ppdev->dwHeap = heap; 00168 *pdwNumHeaps = heap; 00169 00170 /* We do not support other fourcc */ 00171 *pdwNumFourCCCodes = 0; 00172 00173 00174 /* 00175 check see if pvmList and pdwFourCC are frist call 00176 or frist. Secon call we fill in pHalInfo info 00177 */ 00178 00179 if(!(pvmList && pdwFourCC)) 00180 { 00181 00182 RtlZeroMemory(pHalInfo, sizeof(DD_HALINFO)); 00183 pHalInfo->dwSize = sizeof(DD_HALINFO); 00184 00185 pHalInfo->ddCaps.dwCaps = DDCAPS_BLT | DDCAPS_BLTQUEUE | DDCAPS_BLTCOLORFILL | DDCAPS_READSCANLINE | 00186 DDCAPS_BLTSTRETCH | DDCAPS_COLORKEY | DDCAPS_CANBLTSYSMEM; 00187 00188 pHalInfo->ddCaps.dwFXCaps = DDFXCAPS_BLTSTRETCHY | DDFXCAPS_BLTSTRETCHX | 00189 DDFXCAPS_BLTSTRETCHYN | DDFXCAPS_BLTSTRETCHXN | 00190 DDFXCAPS_BLTSHRINKY | DDFXCAPS_BLTSHRINKX | 00191 DDFXCAPS_BLTSHRINKYN | DDFXCAPS_BLTSHRINKXN | 00192 DDFXCAPS_BLTMIRRORUPDOWN | DDFXCAPS_BLTMIRRORLEFTRIGHT; 00193 00194 pHalInfo->ddCaps.dwCaps2 = DDCAPS2_NONLOCALVIDMEM | DDCAPS2_NONLOCALVIDMEMCAPS; 00195 00196 pHalInfo->ddCaps.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP; 00197 00198 pHalInfo->ddCaps.dwCKeyCaps = DDCKEYCAPS_SRCBLT | DDCKEYCAPS_SRCBLTCLRSPACE; 00199 00200 pHalInfo->ddCaps.dwSVBCaps = DDCAPS_BLT; 00201 pHalInfo->ddCaps.ddsCaps.dwCaps |= DDSCAPS_LOCALVIDMEM | DDSCAPS_NONLOCALVIDMEM; 00202 00203 /* Calc how much memmory is left on the video cards memmory */ 00204 pHalInfo->ddCaps.dwVidMemTotal = (ppdev->MemHeight - ppdev->ScreenHeight) * ppdev->ScreenDelta; 00205 00206 /* fill in some basic info that we need */ 00207 pHalInfo->vmiData.pvPrimary = ppdev->ScreenPtr; 00208 pHalInfo->vmiData.dwDisplayWidth = ppdev->ScreenWidth; 00209 pHalInfo->vmiData.dwDisplayHeight = ppdev->ScreenHeight; 00210 pHalInfo->vmiData.lDisplayPitch = ppdev->ScreenDelta; 00211 pHalInfo->vmiData.ddpfDisplay.dwSize = sizeof(DDPIXELFORMAT); 00212 pHalInfo->vmiData.ddpfDisplay.dwFlags = DDPF_RGB; 00213 pHalInfo->vmiData.ddpfDisplay.dwRGBBitCount = ppdev->BitsPerPixel; 00214 pHalInfo->vmiData.ddpfDisplay.dwRBitMask = ppdev->RedMask; 00215 pHalInfo->vmiData.ddpfDisplay.dwGBitMask = ppdev->GreenMask; 00216 pHalInfo->vmiData.ddpfDisplay.dwBBitMask = ppdev->BlueMask; 00217 pHalInfo->vmiData.dwOffscreenAlign = 4; 00218 00219 if ( ppdev->BitsPerPixel == 8 ) 00220 { 00221 pHalInfo->vmiData.ddpfDisplay.dwFlags |= DDPF_PALETTEINDEXED8; 00222 } 00223 00224 /* FIXME 00225 Config the rops we do not doing that yet 00226 for we need write the rops table 00227 */ 00228 for(i=0;i<DD_ROP_SPACE;i++ ) 00229 { 00230 // pHALInfo->ddCaps.dwSVBRops[i] = rops[i]; 00231 // pHALInfo->ddCaps.dwRops[i] = rops[i]; 00232 } 00233 } 00234 00235 /* Now build pvmList info */ 00236 if(pvmList) 00237 { 00238 ppdev->pvmList = pvmList; 00239 00240 if ( bDDrawHeap == TRUE) 00241 { 00242 pvmList->dwFlags = VIDMEM_ISLINEAR ; 00243 pvmList->fpStart = ppdev->ScreenHeight * ppdev->ScreenDelta; 00244 pvmList->fpEnd = ppdev->MemHeight * ppdev->ScreenDelta - 1; 00245 pvmList->ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; 00246 pvmList++; 00247 } 00248 00249 pvmList->fpStart = 0; 00250 pvmList->fpEnd = (ppdev->MemHeight * ppdev->ScreenDelta) - 1; 00251 pvmList->dwFlags = VIDMEM_ISNONLOCAL | VIDMEM_ISLINEAR | VIDMEM_ISWC; 00252 pvmList->ddsCaps.dwCaps = DDSCAPS_FRONTBUFFER | DDSCAPS_BACKBUFFER ; 00253 pvmList->ddsCapsAlt.dwCaps = DDSCAPS_FRONTBUFFER | DDSCAPS_BACKBUFFER; 00254 00255 pvmList = ppdev->pvmList; 00256 } 00257 00258 return TRUE; 00259 } 00260 Generated on Sun May 27 2012 04:38:06 for ReactOS by
1.7.6.1
|