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

📄 halcaps.cpp

📁 AU1100嵌入式处理器lcd显示驱动程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:

		((Au1100LCD *)g_pGPE)->GetVirtualVideoMemory( &VirtVideoMemoryStart, &g_nVideoMemorySize );

		DEBUGMSG( GPE_ZONE_INIT,(TEXT("buildDDHALInfo: GetVirtualVideoMemory=0x%08x, size=%d\r\n"),
			VirtVideoMemoryStart, g_nVideoMemorySize));

		// Allocate some virtual memory space for video memory
		g_pVideoMemory = (BYTE*)VirtVideoMemoryStart;

		DEBUGMSG( GPE_ZONE_INIT,(TEXT("buildDDHALInfo: gpVidMem=%08x\r\n"), g_pVideoMemory ));
	}

	// Populate the rest of the DDHALINFO structure:
    lpddhi->dwSize = sizeof(DDHALINFO);
    lpddhi->lpDDCallbacks = &cbDDCallbacks;
    lpddhi->lpDDSurfaceCallbacks = &cbDDSurfaceCallbacks;
    lpddhi->lpDDPaletteCallbacks = &cbDDPaletteCallbacks;
	lpddhi->lpDDExeBufCallbacks = &cbDDExeBufCallbacks;
	lpddhi->GetDriverInfo = HalGetDriverInfo;

    lpddhi->vmiData.fpPrimary = (unsigned long)(g_pVideoMemory) + g_pDDrawPrimarySurface->OffsetInVideoMemory();	// pointer to primary surface

    lpddhi->vmiData.dwFlags = 0;				// flags
    lpddhi->vmiData.dwDisplayWidth = SCREEN_WIDTH;
											// current display width
    lpddhi->vmiData.dwDisplayHeight = SCREEN_HEIGHT;
											// current display height
    lpddhi->vmiData.lDisplayPitch = g_pDDrawPrimarySurface->Stride(); //ScreenBpp * ScreenWidth / 8

	DEBUGMSG( GPE_ZONE_INIT,(TEXT("stride: %d\r\n"), lpddhi->vmiData.lDisplayPitch ));
											// current display pitch
    lpddhi->vmiData.ddpfDisplay.dwSize = sizeof(DDPIXELFORMAT);
											// ... = 8bit/pixel palettized
    lpddhi->vmiData.ddpfDisplay.dwFourCC = 0;	// (FOURCC code)

	if (16 == ((Au1100LCD *)g_pGPE)->GetBpp())
	{
		lpddhi->vmiData.ddpfDisplay.dwFlags = DDPF_RGB;
		lpddhi->vmiData.ddpfDisplay.dwRBitMask = 0xF800;	// 5
		lpddhi->vmiData.ddpfDisplay.dwGBitMask = 0x07E0;	// 6
		lpddhi->vmiData.ddpfDisplay.dwBBitMask = 0x001F;	// 5
		lpddhi->vmiData.ddpfDisplay.dwRGBBitCount = 16;
	}
	else
	{
		lpddhi->vmiData.ddpfDisplay.dwFlags = DDPF_RGB | DDPF_PALETTEINDEXED8;
		lpddhi->vmiData.ddpfDisplay.dwRGBBitCount = 8;
	}

												// how many bits per pixel (BD_4,8,16,24,32)
    lpddhi->vmiData.dwOffscreenAlign = 32;		// byte alignment for offscreen surfaces
    lpddhi->vmiData.dwOverlayAlign = 4; 		// byte alignment for overlays
    lpddhi->vmiData.dwTextureAlign = 0; 		// byte alignment for textures
    lpddhi->vmiData.dwZBufferAlign = 0; 		// byte alignment for z buffers
    lpddhi->vmiData.dwAlphaAlign = 4;			// byte alignment for alpha
    lpddhi->vmiData.dwNumHeaps = 0;				// number of memory heaps in vmList
    lpddhi->vmiData.pvmList = (LPVIDMEM)NULL;	// array of heaps
    // hw specific caps:
	lpddhi->ddCaps.dwSize = sizeof(DDCAPS); 	// size of the DDDRIVERCAPS structure
	lpddhi->ddCaps.dwCaps = 					// driver specific capabilities
//		DDCAPS_3D |						// Display hardware has 3D acceleration
		DDCAPS_BLT |					// Display hardware is capable of blt operations
//		DDCAPS_BLTQUEUE |				// Display hardware is capable of asynchronous blt operations
//		DDCAPS_BLTFOURCC |				// Display hardware is capable of color space conversions during the blt operation
//		DDCAPS_BLTSTRETCH |				// Display hardware is capable of stretching during blt operations
//		DDCAPS_GDI |					// Display hardware is shared with GDI
//		DDCAPS_OVERLAY |				// Display hardware can overlay
//		DDCAPS_OVERLAYCANTCLIP |		// Set if display hardware supports overlays but can not clip them
//		DDCAPS_OVERLAYFOURCC |			// overlay hardware is capable of color space conversions
//		DDCAPS_OVERLAYSTRETCH | 		// Indicates that stretching can be done by the overlay hardware
//		DDCAPS_PALETTE |				// unique DirectDrawPalettes can be created for DirectDrawSurfaces
//		DDCAPS_PALETTEVSYNC |			// palette changes can be syncd with the vertical
//		DDCAPS_READSCANLINE |			// Display hardware can return the current scan line
//		DDCAPS_STEREOVIEW |				// Display hardware has stereo vision capabilities
//		DDCAPS_VBI |					// Display hardware is capable of generating a vertical blank interrupt
//		DDCAPS_ZBLTS |					// Supports the use of z buffers with blt operations
//		DDCAPS_ZOVERLAYS |				// Supports Z Ordering of overlays
//		DDCAPS_COLORKEY |				// Supports color key
//		DDCAPS_ALPHA |					// Supports alpha surfaces
//		DDCAPS_COLORKEYHWASSIST |		// colorkey is hardware assisted
//		DDCAPS_NOHARDWARE |				// no hardware support at all
		DDCAPS_BLTCOLORFILL |			// Display hardware is capable of color fill with bltter
//		DDCAPS_BANKSWITCHED |			// Display hardware is bank switched
//		DDCAPS_BLTDEPTHFILL |			// Display hardware is capable of depth filling Z-buffers with bltter
//		DDCAPS_CANCLIP |				// Display hardware is capable of clipping while bltting
//		DDCAPS_CANCLIPSTRETCHED |		// Display hardware is capable of clipping while stretch bltting
		DDCAPS_CANBLTSYSMEM |			// Display hardware is capable of bltting to or from system memory
		0;

    lpddhi->ddCaps.dwCaps2 =			// more driver specific capabilities
//		DDCAPS2_CERTIFIED				// Display hardware is certified
		DDCAPS2_NO2DDURING3DSCENE |		// Driver cannot interleave 2D & 3D operations
//		DDCAPS2_AUTOFLIPOVERLAY |		// automatic doubled buffered display of video port
//		DDCAPS2_CANBOBINTERLEAVED |		// Overlay can display each field of interlaced data
//		DDCAPS2_CANBOBNONINTERLEAVED | 	// As above but for non-interleaved data
//		DDCAPS2_COLORCONTROLOVERLAY |	// The overlay surface contains color controls
//		DDCAPS2_COLORCONTROLPRIMARY |	// The primary surface contains color controls
//		DDCAPS2_CANDROPZ16BIT |			// RGBZ -> RGB supported for 16:16 RGB:Z
//		DDCAPS2_NONLOCALVIDMEM |		// Driver supports non-local video memory
//		DDCAPS2_NONLOCALVIDMEMCAPS | 	// Dirver supports non-local video memory but has different capabilities
//		DDCAPS2_NOPAGELOCKREQUIRED | 	// Driver neither requires nor prefers surfaces to be pagelocked
		DDCAPS2_WIDESURFACES |			// Driver can create surfaces which are wider than the primary surface
//		DDCAPS2_CANFLIPODDEVEN |		// Driver supports bob without using a video port
//		DDCAPS2_CANBOBHARDWARE |		// Driver supports bob using hardware
//		DDCAPS2_COPYFOURCC |			// Driver supports bltting any FOURCC surface to another surface of the same FOURCC
//      DDCAPS2_FLIPNOVSYNC |			// Driver supports flipping while not in vsync.
		0 ;

	lpddhi->ddCaps.dwCKeyCaps =			// color key capabilities of the surface
//		DDCKEYCAPS_DESTOVERLAY			|
//		DDCKEYCAPS_DESTOVERLAYYUV		|
//		DDCKEYCAPS_DESTOVERLAYONEACTIVE |

//		DDCKEYCAPS_SRCBLT |				// Hardware can use colorkey (cf source only)
										//   ..for transparent blts

//		DDCKEYCAPS_SRCOVERLAY	       |
//		DDCKEYCAPS_SRCOVERLAYCLRSPACE  |
//		DDCKEYCAPS_SRCOVERLAYYUV       |
//		DDCKEYCAPS_SRCOVERLAYONEACTIVE |
//		DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV|
		0;
	lpddhi->ddCaps.dwFXCaps=			// driver specific stretching and effects capabilites
		DDFXCAPS_BLTMIRRORUPDOWN |		// Supports vertical inversion Blts
		DDFXCAPS_BLTSTRETCHY |			// Supports stretch blts in the Y-direction
		DDFXCAPS_BLTSHRINKY | 			// Supports shrink blts in the Y-direction
		DDFXCAPS_BLTSTRETCHX |			// Supports stretch blts in the X-direction
		DDFXCAPS_BLTSHRINKX | 			// Supports shrink blts in the X-direction
//		DDFXCAPS_OVERLAYSTRETCHX	|
//		DDFXCAPS_OVERLAYSTRETCHXN	|
//		DDFXCAPS_OVERLAYSTRETCHY	|
//		DDFXCAPS_OVERLAYARITHSTRETCHYN	|
//		DDFXCAPS_OVERLAYARITHSTRETCHY	|
//		DDFXCAPS_OVERLAYALPHA			|
		0;
	lpddhi->ddCaps.dwPalCaps;			// palette capabilities
//		DDPCAPS_1BIT |					// Simple 1-bit palette
//		DDPCAPS_2BIT |					// Simple 2-bit palette
//		DDPCAPS_4BIT |					// Simple 4-bit palette
//		DDPCAPS_8BITENTRIES |			// Palette indexes into 8 bit target
		DDPCAPS_8BIT |					// Simple 8-bit palette
		DDPCAPS_INITIALIZE |			// DDraw should initalize palette
										//   ..from lpDDColorArray
		DDPCAPS_PRIMARYSURFACE |		// Palette is attached to primary surface
//		DDPCAPS_PRIMARYSURFACELEFT | 	// Palette is attached to left-eye primary surface
		DDPCAPS_ALLOW256 |				// All 256 entries may be set
		0;
	lpddhi->ddCaps.dwSVCaps=0;			// Stereo vision capabilities (none)
	lpddhi->ddCaps.dwAlphaBltConstBitDepths = 0;// Alpha Blt's
	lpddhi->ddCaps.dwAlphaBltPixelBitDepths = 0;
	lpddhi->ddCaps.dwAlphaBltSurfaceBitDepths = 0;
    lpddhi->ddCaps.dwAlphaOverlayConstBitDepths=0;

	lpddhi->ddCaps.dwZBufferBitDepths=0;		// No z buffer
	lpddhi->ddCaps.dwVidMemTotal = g_nVideoMemorySize; // total amount of video memory
	lpddhi->ddCaps.dwVidMemFree = g_nVideoMemorySize;  // amount of free video memory

												// maximum number of visible overlays
	lpddhi->ddCaps.dwMaxVisibleOverlays = 0;
	lpddhi->ddCaps.dwCurrVisibleOverlays = 0;	// current number of visible overlays
	lpddhi->ddCaps.dwMinOverlayStretch=1000;
	lpddhi->ddCaps.dwMaxOverlayStretch=9999;
	lpddhi->ddCaps.dwNumFourCCCodes = 0;		// number of four cc codes
	lpddhi->ddCaps.dwAlignBoundarySrc = 4;		// source rectangle alignment
	lpddhi->ddCaps.dwAlignSizeSrc = 8;			// source rectangle byte size
	lpddhi->ddCaps.dwAlignStrideAlign = 8;		// stride alignment
	lpddhi->ddCaps.ddsCaps.dwCaps=				// DDSCAPS structure has all the general capabilities
//		DDSCAPS_ALPHA |							// Can create alpha-only surfaces
		DDSCAPS_BACKBUFFER |					// Can create backbuffer surfaces
//		DDSCAPS_COMPLEX |						// Can create complex surfaces
		DDSCAPS_FLIP |							// Can flip between surfaces
//		DDSCAPS_VIDEOPORT |
		DDSCAPS_FRONTBUFFER |					// Can create front-buffer surfaces
		DDSCAPS_OFFSCREENPLAIN |				// Can create off-screen bitmaps
//		DDSCAPS_OVERLAY |						// Can create overlay surfaces
		DDSCAPS_PALETTE |						// Has one palette ???
		DDSCAPS_PRIMARYSURFACE |				// Has a primary surface
//		DDSCAPS_PRIMARYSURFACELEFT | 			// Has a left-eye primary surface
//		DDSCAPS_TEXTURE |						// Supports texture surrfaces
//      DDSCAPS_SYSTEMMEMORY |					// Surfaces are in system memory
		DDSCAPS_VIDEOMEMORY |					// Surfaces are in video memory
		DDSCAPS_VISIBLE |						// Changes are instant ???
//		DDSCAPS_ZBUFFER |						// Can create (pseudo) Z buffer
//		DDSCAPS_EXECUTEBUFFER |					// Can create execute buffer
//		DDSCAPS_3DDEVICE |						// Surfaces can be 3d targets
//		DDSCAPS_WRITEONLY |						// Can create write-only surfaces
//		DDSCAPS_ALLOCONLOAD |					// Can create alloconload surfaces
//		DDSCAPS_MIPMAP |						// Can create mipmap
		0;

	SETROPBIT(lpddhi->ddCaps.dwRops,SRCCOPY);	// Set bits for ROPS supported
	SETROPBIT(lpddhi->ddCaps.dwRops,PATCOPY);
	SETROPBIT(lpddhi->ddCaps.dwRops,BLACKNESS);
	SETROPBIT(lpddhi->ddCaps.dwRops,WHITENESS);
    lpddhi->dwMonitorFrequency = 60;//modeInfo[modeidx].wRefreshRate;	// monitor frequency in current mode (60 field/sec)
    lpddhi->dwModeIndex = 0;					// current mode: index into array
    lpddhi->lpdwFourCC = 0;						// fourcc codes supported
    lpddhi->dwNumModes = sizeof(modeInfo)/sizeof(DDHALMODEINFO);
												// number of modes supported
	lpddhi->lpModeInfo = modeInfo;				// mode information
    lpddhi->dwFlags =
					DDHALINFO_MODEXILLEGAL |	// create flags
					DDHALINFO_GETDRIVERINFOSET |
					0;
    lpddhi->lpPDevice = (LPVOID)0;				// physical device ptr
    lpddhi->hInstance = (DWORD)0;				// instance handle of driver

}

#endif DDRAW_ENABLE


⌨️ 快捷键说明

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