DirectX5.0最新遊戲程式設計指南 DirectDraw篇 三、DirectDraw的要素(二) (轉)
4、表面(Surface)
一個表面或DirectDrawSurface表徵了一塊線性區域。表面通常都駐留在顯示記憶體中,當然也可以存在於記憶體中。除非明確指定,在建立DirectDrawSurface物件時,DirectDraw會把DirectDrawSurface物件放置於能夠獲得最佳的位置。DirectDrawSurface物件還能利用顯示卡上的特殊,不僅可以加快任務的速度,還可以同系統並行處理一些任務。
使用IDirectDraw2::CreateSurface方法,你可以建立單一的表面物件,複雜的表面翻轉鏈和三維的表面。使用CreateSurface方法建立要求的表面或翻轉鏈並且獲得主表面的IDirectDrawSurface介面的指標。
IDirectDrawSurface3介面使你能夠用位塊傳輸方法直接訪問記憶體,如 IDirectDrawSurface3::BltFast方法等。表面物件能提高一個裝置上下文,它可以讓你使用GDI。另外,你可以使用IDirectDrawSurface3方法之間訪問顯示記憶體。例如,你可以使用IDirectDrawSurface3::Lock方法鎖定顯示記憶體並獲取相關表面的地址。顯示記憶體的地址可能指向可見緩衝區記憶體(主表面)或不可見緩衝區(屏外表面或覆蓋表面)。
不可見緩衝區通常駐留在顯示記憶體中,但可在系統記憶體這建立,如果允許或DirectDraw使用了模擬功能的話。另外,IDirectDrawSurface3介面擴充套件了一些方法。利用這些方法,能夠放置或獲取調色盤工作於指定型別表面。
4.1、表面介面(Surface Interface)
DirectDrawSurface物件透過IDirectDrawSurface、 IDirectDrawSurface2,和IDirectDrawSurface3介面來表現其功能。每一個新版本的介面都提高了同以前版本同樣的功能,並且透過新的方法提供了舊版本中不曾具有的功能。
IDirectDrawSurface介面上該類介面中最老的版本,當你使用IDirectDraw2::CreateSurface方法建立一個表面時,預設提供的就是這一介面。
要利用另一版本的介面提供的新的功能,你還必須用QueryInterface方法查詢新版本的介面。下面的程式碼顯示瞭如何完成這一工作的:
LPDIRECTDRAWSURFACE lpSurf;
LPDIRECTDRAWSURFACE2 lpSurf2;
// Create surfaces.
memset(&ddsd, 0, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN |
DDSCAPS_SYSTEMMEMORY;
ddsd.dwWidth = 10;
ddsd.dwHeight = 10;
ddrval = lpDD2->CreateSurface(&ddsd, &lpSurf, NULL);
if(ddrval != DD_OK)
return;
ddrval = lpSurf->QueryInterface(
IID_IDirectDrawSurface2, (LPVOID *)&lpSurf2);
if(ddrval != DD_OK)
return;
ddrval = lpSurf2->PageLock(0);
if(ddrval != DD_OK)
return;
ddrval = lpSurf2->PageUnlock(0);
if(ddrval != DD_OK)
return;
上面的例子在QueryInterface方法時透過指定IID_IDirectDraw2標誌獲得了DirectDrawSurface物件的IDirectDrawSurface2介面。要想得到 IDirectDrawSurface3介面,用IID_IDirectDrawSurface3標誌代替IID_IDirectDraw2即可。
4.2、Color Key
DirectDraw支援位塊傳輸和覆蓋表面方式下的源Color Key和目的Color Key。透過呼叫IDirectDrawSurface3::SetColorKey方法來設定表面的Color Key。當使用位塊傳輸時,源Color Key指明瞭不被複製的顏色或顏色範圍,目的Color Key指明瞭被替換的顏色或顏色範圍。
一些硬體只支援YUV畫素格式的顏色範圍。YUV資料通常是影片資料,透明背景由於轉換中的量化誤差可能不是一種單一的顏色。
Color Key用表面的畫素格式來指定。如果表面是調色格式的,Color Key就被指定為或索引的範圍。如果表面的畫素格式由描述YUV格式的FOURCC程式碼指定,YUV的Color Key就由三個DDCOLORKEY結構中的兩個成員dwColorSpaceLowValue和dwColorSpaceHighValue三個位元組指定,三個位元組分別是V、U、Y資料。IDirectDrawSurface3::SetColorKey方法中的dwFlags引數指明瞭Color Key是否用於覆蓋或
位塊傳輸操作,是否是一個源Color Key或目的Color Key。下面的程式碼是有效的Color Key的一些例項:
// 8位調色
// 調色盤實體26是 color key.
dwColorSpaceLowValue = 26;
dwColorSpaceHighValue = 26;
// 24位真彩模式
// 顏色255、128、128是color key.
dwColorSpaceLowValue = RGBQUAD(255,128,128);
dwColorSpaceHighValue = RGBQUAD(255,128,128);
// FourCC YUV模式
// Any YUV color where Y is between 100 and 110
// and U or V is between 50 and 55 is transparent.
dwColorSpaceLowValue = YUVQUAD(100,50,50);
dwColorSpaceHighValue = YUVQUAD(110,55,55);
4.3、畫素格式(Pixel Format)
畫素格式指出了任何對錶面記憶體中每個畫素資料作出解釋。DirectDraw使用DDPIXELFORMAT結構描述各種畫素資訊。
DDPIXELFORMAT結構的成員描述了畫素格式的下述特性:
.調色或非調色畫素格式
.如果是非調色格式,畫素格式是RGB還是YUV格式
.位深度
.畫素格式組成部分的位遮蔽
你可以呼叫IDirectDrawSurface3::GetPixelFormat方法來獲取存在的表面的畫素格式。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987879/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 三、DirectDraw的要素(三) (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 三、DirectDraw的要素(四) (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 三、DirectDraw的要素(一) (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 二、DirectDraw的體系 (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 四、DirectDraw高階特性 (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 五、DirectDraw中其它的DirectDraw範例 (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 二、第一個DirectDraw例項 (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw篇 一、DirectDraw的基本圖象概念 (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 三、建立動畫 (轉)遊戲程式設計動畫
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 一、配置DirectX SDK (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 DirectDraw教程篇 四、使用覆蓋表面 (轉)遊戲程式設計
- DirectX5.0最新遊戲程式設計指南 (轉)遊戲程式設計
- 詳細講解DirectDraw程式設計基礎(轉)程式設計
- 動畫程式編寫——DirectDraw之旅(3)(轉)動畫
- 藉助DirectDraw實現對水波的計算機模擬(轉)計算機
- DirectDraw6的初級程式設計應用 —— 配合例項講解,讓你迅速入門 (轉)程式設計
- 載入點陣圖檔案到DirectDraw的方法(轉)
- 基於DirectDraw的Gamma calibrator機制之探討 (轉)GAM
- 載入JPGE圖象檔案到DirectDraw的表面中(轉)
- windows10系統無法禁用DirectDraw的解決方法Windows
- 高質量程式碼的三要素(二)
- 程式設計師學習能力提升三要素程式設計師
- bash 程式設計指南(轉)程式設計
- shell程式設計(轉三呼的一篇文章)程式設計
- 遊戲程式設計入門指南遊戲程式設計
- 網路程式設計-計算機網路三要素程式設計計算機網路
- 獨立遊戲程式設計師生存指南遊戲程式設計師
- 精細原型設計三要素原型
- 程式設計師生存指南讀書筆記-第三篇(學習)程式設計師筆記
- Delphi之快速設計(程式設計篇) (轉)程式設計
- 魔方遊戲程式設計 (轉)遊戲程式設計
- Win10系統下DirectDraw導致閃屏怎麼解決Win10
- 好程式設計師web前端精講 web前端三要素程式設計師Web前端
- VB的API程式設計精粹(二) (轉)API程式設計
- Linux的shell程式設計(二)(轉)Linux程式設計
- 程式設計修養(二) (轉)程式設計
- Linux的shell程式設計(三)(轉)Linux程式設計
- 程式設計修養(三) (轉)程式設計