|

楼主 |
发表于 2003-10-31 09:35:00
|
显示全部楼层
Re:为什么FPS会慢?
主要代码如下,看不出为什么会慢哦
HRESULT Initialize()
{
// .........
// 初始化屏幕 800 * 600, 32BPP,略
// .........
HBITMAP hBmp = (HBITMAP)LoadImage(NULL, bmpfile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
if(hBmp == NULL)
{
TRACE("Load Resource Bitmap File Failed: %s\n", bmpfile);
MessageBox(NULL, "Load Resource Bitmap File Failed.", "Error", MB_OK);
return S_FALSE;
}
BITMAP bmpInfo;
GetObject(hBmp, sizeof(BITMAP), &bmpInfo);
// 创建的离屏表面与图片一样大
DDSURFACEDESC2 ddsd;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddsd.dwWidth = bmpInfo.bmWidth;
ddsd.dwHeight = bmpInfo.bmHeight;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;
HRESULT hRes = lpddsOffscreen->CreateSurface(&ddsd, lpdds, NULL);
if(FAILED(hRes))
{
TRACE("CREATE SURFACE FAILED WHEN LOADING BITMAP: %s\n", bmpfile);
return false;
}
// 将图片内容拷贝到表面
HDC hTmpDC, hDC;
if((hRes = lpddsOffscreen->GetDC(&hDC)) != DD_OK)
return S_FALSE;
hTmpDC = CreateCompatibleDC(hDC);
SelectObject(hTmpDC, hBmp);
BitBlt(hDC, 0, 0, bmpInfo.bmWidth, bmpInfo.bmHeight, hTmpDC, 0, 0, SRCCOPY);
lpddsOffscreen->ReleaseDC(hDC);
// 删除临时句柄
DeleteDC(hTmpDC);
DeleteObject(hBmp);
return S_OK;
}
HRESULT MainLoop()
{
static int xOffset = 0, yOffset = 0;
// 检验按键信息
if(KeyPressed())
{
DWORD Key = GetKey();
switch(Key)
{
case VK_UP:
yOffset -= 5;break;
case VK_DOWN:
yOffset += 5;break;
case VK_LEFT:
xOffset -= 5;break;
case VK_RIGHT:
xOffset += 5;break;
default:break;
}
}
// xOffset, yOffset 边界检验,略
// ... ...
// 拷屏
RECT rt = {xOffset, yOffset, xOffset+800, yOffset+600};
HRESULT hr = lpddsBack->BltFast(0, 0, lpddsOffscreen, &rt, DDBLT_WAIT);
if(FAILED(hr))
{
TRACE("BLTFAST CALLED FAILED. (lpddsOffscreen -> lpddsBack)\n");
return hr;
}
// 页面翻转
return lpddsFront->Flip();
} |
|