首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

directdraw创办离屏表面失败

2013-01-04 
directdraw创建离屏表面失败我用directdraw来显示yuv的视频图像,只运行一个应用程序的话都很ok,如果同样再

directdraw创建离屏表面失败
我用directdraw来显示yuv的视频图像,只运行一个应用程序的话都很ok,如果同样再打开同样的应用程序就会提示“创建离屏表面失败”,不明白这是为什么,难道离屏表面只能创建一个吗?
以下是我的directdraw的初始化代码
  HRESULT hr;
  
  LPDIRECTDRAWCLIPPER dcClipper =NULL;
  if(lpDD != NULL) 
  { 
    if(lpDDSPrimary != NULL) 
    { 
      lpDDSPrimary->Release(); 
      lpDDSPrimary = NULL; 
    } 
    if (lpDDSBack!=NULL)
    {
      lpDDSBack->Release();
      lpDDSBack=NULL;
    }
    lpDD->Release(); 
    lpDD = NULL; 
  } 
   if (DirectDrawCreate(NULL,&lpDD,NULL)!=DD_OK)
  {
    MessageBox(0,("创建ddraw失败"),(""),0);
  }
  if (lpDD->SetCooperativeLevel(hwnd,DDSCL_NORMAL)!=DD_OK)
  {
    MessageBox(0,("协作层设置失败"),(""),0);
  }
  
  //创建主表面
  ZeroMemory(&ddsd,sizeof(ddsd));
  ddsd.dwSize=sizeof(ddsd);
  ddsd.dwFlags=DDSD_CAPS;
  ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
  ddsd.dwBackBufferCount=1;
  if (lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL)!=DD_OK)
  {
    lpDDSBack->Release();
    MessageBox(0,("创建主表面失败"),(""),0);
    return(0);
  }

  //创建离屏表面
  ZeroMemory(&ddsd,sizeof(ddsd));
  ddsd.dwSize = sizeof(ddsd) ;
  ddsd.ddsCaps.dwCaps =DDSCAPS_OVERLAY;
  ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT ;
  ddsd.dwWidth = play_width;
  ddsd.dwHeight= play_height;
  ddsd.ddpfPixelFormat.dwSize=sizeof(DDPIXELFORMAT);
  ddsd.ddpfPixelFormat.dwFlags = DDPF_FOURCC | DDPF_YUV ;
  ddsd.ddpfPixelFormat.dwFourCC = MAKEFOURCC('Y', 'V', '1', '2') ;
  ddsd.ddpfPixelFormat.dwYUVBitCount = 8 ;
  hr = lpDD->CreateSurface(&ddsd, &lpDDSBack, NULL) ; 
  if(hr != DD_OK)
  {
    MessageBox(0,("创建离屏表面失败"),(""),0);//如果打开第二个应用程序就会在这里出错
    lpDDSBack->Release();
    lpDD->Release() ;
    return(0);
  }
  //创建裁剪区
  hr=lpDD->CreateClipper(0,&dcClipper,NULL);
  if (FAILED(hr))
  {
    lpDD->Release();
    lpDDSBack->Release();
    lpDDSBack->Release();
    MessageBox(0,("创建裁剪区失败"),(""),0);
    return(0);
  }
  dcClipper->SetHWnd(0,hwnd);
  lpDDSPrimary->SetClipper(dcClipper);
[解决办法]
你可以去 http://robertbaker.download.csdn.net/ 看看,有个简单封了 DirectDraw 的 dll 
[解决办法]
这个我没有试过,但是我在yuv overlay的时候,发现yuv overlay一直显示在最上层。

热点排行