怎么建立多个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
}
}
...全文
463 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xqhrs232 2012-06-14
  • 打赏
  • 举报
回复
我目前的情况是可以创建2个OVERLAY,但不能同时显示出来。系统最大可见OVERLAY是7个,硬件应该没有问题的。
pj0117 2008-01-21
  • 打赏
  • 举报
回复
-2005532412 is the error following,

/*
* Operation could not be carried out because there is no overlay hardware
* present or available.
*/
#define DDERR_NOOVERLAYHW MAKE_DDHRESULT( 260 )

and you might ask how to translatetthis this error code.

You can find all error code from microsoft, and
MAKE_DDHRESULT( X ) → X = error code + 2005532672

so -2005532412 + 2005532672 = 260.
小叶 2007-12-06
  • 打赏
  • 举报
回复
如果我将上面的代码build成两个不同名的EXE,分别执行。就可以将2个overlay都占用。但是,就不能在一个程序里连续创建两个overlay吗?
DentistryDoctor 2007-12-05
  • 打赏
  • 举报
回复
应该只能创建一个Overlay surfae吧。
至于错误代码,应该是个HRESULT, DXGetErrorString9/DXGetErrorDescription9

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧