// 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 "黑色不要顯示":
這樣就OK啦!
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);
但是,有一天 Overlay 要顯示黑色怎麼辦?
沒有留言:
張貼留言