directdraw overlay 和flip及blt的區別


 

(1)為什么需要overlay: 為什么需要overlay? overlay產生的原因是:1,避免在vertical blank時flip/blt surface造成的畫面"撕 裂"現象; 2,使硬件可以窗口模式下使用flip而不是blt,從而提高效率. 3D游戲里面它沒有什么用的上的地方, 因為一般硬件不支持 render to overlay surface, 2D游戲一般也不用它, 因為象素格式問題, 從RGB的surface blt到YUV的 surface時需要硬件花時間去轉換, 除非游戲里所有的其他surface也用YUV. 注: 一般硬件overlay surface只支持YUV和其他一些FOURCC的格式, RGB的一般不支持. "倘若要將一種YUV格式的圖象覆蓋顯示到一個自定義的窗口", 做到這個很容易的, 只需要創建一個和自定義窗口大小和位置都相同的overlay surface即可, 窗口的大小位置改變時, 此overlay也跟着改變. 一般視頻播放軟件就是這么做的. 但overlay是比較寶貴的資源, 如果僅僅是為了畫一個如"動畫按鈕"之類的東西就用它也太浪費了點, 一般的硬件只能同時顯示一個overlay surface, 多了也沒必要. (2)DirectDraw里面PrimarySurface的Blt方法和Flip方法有什么區別呢? blt 可以用於大小不相同的表面,可以使用 color key 等等。blt 是將一個表面的內容復制到另一個表面,相當與 memcpy,當然顯卡可能有硬件加速。 flip 只是交換了了指針,將當前顯示表面的指針指向flip鏈中的下一個表面。對於更新主顯示表面來說,flip應該比 blt要快 Blt適合全屏和窗口, Flip只能用全屏。 bltfast是在不需要做圖象翻轉,放大,縮小時用的,據說,比blt快10%。 flip 就是換頁。 blt和bltfast適合窗口和全屏。 flip 必須在全屏下使用。 如果,你做的是全屏游戲推薦用flip。 是基於窗口的游戲推薦bltfast。 其實這非常簡單。創建兩個表面,一個是主表面,一個是離屏表面(后台)。在表面上進行Blt。完了之后,用Flip翻轉到前台。然后繼續在后台表面畫圖。接着再翻轉。如此一直進行下去就OK了。 不過Flip只在全屏下有效,而如果你采用Clipper來剪切屏幕的話,就無法進行BltFast操作。所以建議自己編程進行剪切. 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM