DirectDraw的学习笔记(5)

下面进入我们的整体,overlay 
// create overlay
memset(&m_ddsd, 0, sizeof(m_ddsd));
m_ddsd.dwSize = sizeof(m_ddsd);
m_ddsd.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_FLIP | DDSCAPS_COMPLEX |
DDSCAPS_VIDEOMEMORY;
m_ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_BACKBUFFERCOUNT;
m_ddsd.dwWidth = 480;
m_ddsd.dwHeight = 272;
m_ddsd.dwBackBufferCount = 1;
hr=m_pdd->CreateSurface(&m_ddsd,&m_osurf,NULL);


然後就依照慣例,Lock surface 取出 surface address 後就開始畫圖..
但是..顯示不出來..

是忘了要 Overlay SHOW 出來,要 ..


m_osurf->UpdateOverlay(NULL, m_psurf, NULL, DDOVER_SHOW,NULL);


但是...Show 出來後,整個畫面都是Overlay 的圖呀!我沒畫的部份也show出來,是黑的..

這是因為surface 是 RGB656,沒有 alpha 資料,所以不知道黑色是不是"穿透"色。

所以要設 ColorKey,告訴DirectDraw "黑色不要顯示":


DDOVERLAYFX ovfx;

memset(&ovfx,0,sizeof(ovfx));
ovfx.dwSize = sizeof(ovfx);
ovfx.dckSrcColorkey.dwColorSpaceLowValue=0; // black as the color key
ovfx.dckSrcColorkey.dwColorSpaceHighValue=0;
m_osurf->UpdateOverlay(NULL, m_psurf, NULL, DDOVER_SHOW | DDOVER_KEYSRCOVERRIDE | DDOVER_DDFX, &ovfx);

這樣就OK啦!

你可能感兴趣的:(null)