怎么建立多个overlay surface?
小叶 2007-12-05 08:12:02 我用DDCAPS.dwMaxVisibleOverlays查出我的显卡最多支持2个overlay surface.以下是我写的创建两个overlay surface的代码,创建第一个是S_OK,但创建第二个时就报错,返回的是一段这样的数字-2005532412不知道什么意思?请高手指教...代码如下,谢谢!!
HRESULT hr;
LPDIRECTDRAW lpDD;
DDSURFACEDESC ddsd;
DDSURFACEDESC ddsdOverlay;
IDirectDrawSurface *lpDDSPrimary,*lpDDSOverlay,*lpDDSOverlay2;
hr = DirectDrawCreate(NULL, &lpDD, NULL);
if(hr != DD_OK)
return false;
hr = lpDD->SetCooperativeLevel(NULL, DDSCL_NORMAL);
if (hr == DD_OK)
{
//创建带有一个后台缓冲区的主表面
ddsd.dwSize = sizeof( ddsd );
ddsd.dwFlags = DDSD_CAPS ;//| DDSD_BACKBUFFERCOUNT;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE ;// DDSCAPS_FLIP | DDSCAPS_COMPLEX;
ddsd.dwBackBufferCount = 1;
hr = lpDD->CreateSurface( &ddsd, &lpDDSPrimary, NULL );// 创建一个主表面
if (hr == DD_OK)
{
//创建第一个overlay surface
ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay));
ddsdOverlay.dwSize = sizeof(ddsdOverlay);
ddsdOverlay.dwFlags= DDSD_CAPS | DDSD_HEIGHT |DDSD_WIDTH |DDSD_PIXELFORMAT;
ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY;
ddsdOverlay.dwWidth =800;
ddsdOverlay.dwHeight =600;
ddsdOverlay.ddpfPixelFormat.dwSize = sizeof(ddsdOverlay.ddpfPixelFormat);
ddsdOverlay.ddpfPixelFormat.dwFlags = DDPF_FOURCC;
ddsdOverlay.ddpfPixelFormat.dwFourCC = 0x32595559; // yuy2
ddsdOverlay.dwBackBufferCount=1;
hr = lpDD->CreateSurface(&ddsdOverlay, &lpDDSOverlay, NULL);
//创建第二个overlay surface
ZeroMemory(&ddsdOverlay, sizeof(ddsdOverlay));
ddsdOverlay.dwSize = sizeof(ddsdOverlay);
ddsdOverlay.dwFlags= DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY ;
ddsdOverlay.dwWidth =800;
ddsdOverlay.dwHeight =600;
ddsdOverlay.ddpfPixelFormat.dwSize = sizeof(ddsdOverlay.ddpfPixelFormat);
ddsdOverlay.ddpfPixelFormat.dwFlags = DDPF_FOURCC;
ddsdOverlay.ddpfPixelFormat.dwFourCC = 0x32595559;
ddsdOverlay.dwBackBufferCount=1;
hr = lpDD->CreateSurface(&ddsdOverlay, &lpDDSOverlay2, NULL); //此处报错-2005532412
}
}