📄 halcaps.cpp
字号:
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
// -----------------------------------------------------------------------------
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// -----------------------------------------------------------------------------
#include "precomp.h"
// callbacks from the DIRECTDRAW object
DDHAL_DDCALLBACKS cbDDCallbacks =
{
sizeof( DDHAL_DDCALLBACKS ),
DDHAL_CB32_CREATESURFACE |
// DDHAL_CB32_WAITFORVERTICALBLANK |
DDHAL_CB32_CANCREATESURFACE |
// DDHAL_CB32_CREATEPALETTE |
// DDHAL_CB32_GETSCANLINE |
0,
DDGPECreateSurface,
NULL,
DDGPECanCreateSurface,
NULL,
NULL
};
// callbacks from the DIRECTDRAWSURFACE object
DDHAL_DDSURFACECALLBACKS cbDDSurfaceCallbacks =
{
sizeof( DDHAL_DDSURFACECALLBACKS ),
DDHAL_SURFCB32_DESTROYSURFACE |
// DDHAL_SURFCB32_FLIP |
DDHAL_SURFCB32_LOCK |
DDHAL_SURFCB32_UNLOCK |
DDHAL_SURFCB32_SETCOLORKEY |
DDHAL_SURFCB32_GETBLTSTATUS |
// DDHAL_SURFCB32_GETFLIPSTATUS |
// DDHAL_SURFCB32_UPDATEOVERLAY |
// DDHAL_SURFCB32_SETOVERLAYPOSITION |
// DDHAL_SURFCB32_SETPALETTE |
0,
DDGPEDestroySurface,
NULL,
DDGPELock,
DDGPEUnlock,
DDGPESetColorKey,
HalGetBltStatus,
NULL,
NULL,
NULL,
NULL
};
// InitDDHALInfo must set up this information
unsigned long g_nVideoMemorySize = 0L;
unsigned char * g_pVideoMemory = NULL; // virtual address of video memory from client's side
DWORD g_nTransparentColor = 0L;
DWORD WINAPI
HalGetDriverInfo(
LPDDHAL_GETDRIVERINFODATA lpInput
)
{
DEBUGENTER(HalGetDriverInfo);
// The flat driver does not implement any of the exteneded DirectDraw
// caps or callbacks.
lpInput->ddRVal = DDERR_CURRENTLYNOTAVAIL;
DEBUGLEAVE(HalGetDriverInfo);
return DDHAL_DRIVER_HANDLED;
}
DWORD WINAPI
HalGetBltStatus(
LPDDHAL_GETBLTSTATUSDATA pd
)
{
DEBUGENTER(HalGetBltStatus);
// The flat driver always completes blts immidiately.
pd->ddRVal = DD_OK;
DEBUGLEAVE(HalGetBltStatus);
return DDHAL_DRIVER_HANDLED;
}
EXTERN_C void
buildDDHALInfo(
LPDDHALINFO lpddhi,
DWORD modeidx
)
{
S3C2410DISP * pGPEFlat = static_cast<S3C2410DISP *>(GetDDGPE());
if( !g_pVideoMemory ) // in case this is called more than once...
{
unsigned long VideoMemoryStart;
pGPEFlat->GetVirtualVideoMemory( &VideoMemoryStart, &g_nVideoMemorySize );
DEBUGMSG( GPE_ZONE_INIT,(TEXT("GetVirtualVideoMemory returned addr=0x%08x size=%d\r\n"), VideoMemoryStart, g_nVideoMemorySize));
g_pVideoMemory = (BYTE*)VideoMemoryStart;
DEBUGMSG( GPE_ZONE_INIT,(TEXT("gpVidMem=%08x\r\n"), g_pVideoMemory ));
}
memset( lpddhi, 0, sizeof(DDHALINFO) ); // Clear the DDHALINFO structure
lpddhi->dwSize = sizeof(DDHALINFO);
lpddhi->lpDDCallbacks = &cbDDCallbacks;
lpddhi->lpDDSurfaceCallbacks = &cbDDSurfaceCallbacks;
lpddhi->GetDriverInfo = HalGetDriverInfo;
lpddhi->lpdwFourCC = 0;
// Capability bits.
lpddhi->ddCaps.dwSize = sizeof(DDCAPS);
lpddhi->ddCaps.dwVidMemTotal = g_nVideoMemorySize;
lpddhi->ddCaps.dwVidMemFree = g_nVideoMemorySize;
lpddhi->ddCaps.dwVidMemStride = 0;
lpddhi->ddCaps.ddsCaps.dwCaps =
DDSCAPS_FRONTBUFFER |
DDSCAPS_PRIMARYSURFACE |
DDSCAPS_SYSTEMMEMORY |
0;
lpddhi->ddCaps.dwNumFourCCCodes = 0;
lpddhi->ddCaps.dwPalCaps = 0;
lpddhi->ddCaps.dwMiscCaps = 0;
// DirectDraw Blttting caps refer to hardware blitting support only.
lpddhi->ddCaps.dwBltCaps = 0;
lpddhi->ddCaps.dwCKeyCaps = 0;
lpddhi->ddCaps.dwAlphaCaps = 0;
// Overlay caps.
lpddhi->ddCaps.dwOverlayCaps = 0;
lpddhi->ddCaps.dwMaxVisibleOverlays = 0;
lpddhi->ddCaps.dwCurrVisibleOverlays = 0;
lpddhi->ddCaps.dwAlignBoundarySrc = 0;
lpddhi->ddCaps.dwAlignSizeSrc = 0;
lpddhi->ddCaps.dwAlignBoundaryDest = 0;
lpddhi->ddCaps.dwAlignSizeDest = 0;
lpddhi->ddCaps.dwMinOverlayStretch = 0;
lpddhi->ddCaps.dwMaxOverlayStretch = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -