1.08.2009

用 DriectDraw 取出 video frame buffer address 直接畫圖


LPDIRECTDRAWSURFACE4 m_pSurface; // Primary Surface.
LPDIRECTDRAW4 m_pDD = NULL; // DirectDraw object
DDSURFACEDESC2 m_ddsd;



// 取得 DirectDraw4 的 interace
DirectDrawCreate(NULL, &pDD, NULL);
pDD->QueryInterface(IID_IDirectDraw4, (LPVOID *) & m_pDD);
pDD->Release();
m_pDD->SetCooperativeLevel(hWnd, DDSCL_NORMAL);

// Create 一個Surface,主Surface - 一寫就直接顯示
memset(&m_ddsd, 0, sizeof(m_ddsd));
m_ddsd.dwSize = sizeof(m_ddsd);
m_ddsd.dwFlags = DDSD_CAPS;
m_ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
m_pDD->CreateSurface(&m_ddsd, &m_pSurface, NULL);

// Lock 這個 Surface,並且取得 surface ram 的 start address
m_pSurface->Lock(NULL, &m_ddsd,DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL);

// 將 surface ram 的 start address 傳入 自己的 pain function - 開始畫圖
Paint((unsigned short*)m_ddsd.lpSurface);

// 畫完,unlock
m_pSurface->Unlock(NULL);

沒有留言: