?? topitem.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>高級DirectDraw主題</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>
<body>
<b><font FACE="黑體" SIZE="5">
<p align="center"></font><font size="6"><a name="目錄"><font color="#FF8000"><font
face="宋體">高級DirectDraw主題</font></font></a></p>
<p align="right" style="margin-top: -10; margin-bottom: -8"></font></b><a href="index.htm"
style="text-decoration: none"><font face="宋體" size="3"><span
style="text-decoration: none">返回上級</span></font></a><font FACE="黑體" size="3"></p>
<hr>
</font><div align="center"><center>
<table border="0" width="93%">
<tr>
<td width="48%" valign="top"><font face="宋體"><br>
1、<a href="#對Mode 13的支持">對Mode 13的支持</a><br>
<a href="#關于Mode 13">關于Mode 13</a><br>
<a href="#設置Mode 13">設置Mode 13</a><br>
<a href="#Mode 13與頁面特性">Mode 13與頁面特性</a><br>
<a href="#設置Mode 13">使用Mode 13模式</a></font><p><font
face="宋體">2、<a href="#從DMA中獲益">從DMA中獲益</a><br>
<a href="#關于DMA設備支持">關于DMA設備支持</a><br>
<a href="#對DMA支持的檢測">對DMA支持的檢測</a><br>
<a href="#典型的DMA方案">典型的DMA方案</a><br>
<a href="#利用DMA">利用DMA</a></font></p>
<p><font face="宋體">3、<a href="#在窗口模式下使用DirectDraw調色板">在窗口模式下使用調色板</a><br>
<a href="#窗口模式的調色板入口類型">窗口模式的調色板入口類型</a><br>
<a href="#在窗口模式下創建調色板">在窗口模式下創建調色板</a><br>
<a href="#在窗口模式下設置調色板入口">在窗口模式下設置調色板入口</a><br>
<br>
</font></td>
<td width="52%" valign="top"><font face="宋體"><br>
4、<a href="#獲得換頁和Blit操作的狀態">獲得換頁和Blit操作的狀態</a></font><p><font
face="宋體">5、<a href="#使用Blit進行單色填充">使用Blit進行單色填充</a></font></p>
<p><font face="宋體">6、<a href="#測定顯示硬件的能力">測定顯示硬件的能力</a></font></p>
<p><font face="宋體">7、<a href="#在視頻RAM中儲存位圖">在視頻<big>RAM中儲存位圖</big></a></font></p>
<p><font face="宋體">8、<a href="#Triple Buffering(三緩沖)">Triple Buffering(三緩沖)</a></font></p>
<p><font face="宋體">9、<a href="#DirectDraw應用程序和窗口風格">DirectDraw應用程序和窗口風格</a></font></p>
<p><font face="宋體">10、<a href="#將真彩色匹配到幀緩沖區的色彩空間">將真彩色匹配到幀緩沖區的色彩空間</a><br>
</font></td>
<b>
</tr>
</table>
</center></div>
<hr>
</b>
<blockquote>
<b><p><a name="對Mode 13的支持"><font color="#FF8000"><big><font FACE="黑體">對</font><font
FACE="Arial">Mode 13</font><font FACE="黑體">的支持</font></big></font></a></p>
</b><font size="4"><p align="right"></font><font face="宋體" size="3"><a href="#目錄">返回目錄</a></font></p>
</blockquote>
<blockquote>
<blockquote>
<font face="宋體" size="3"><p>關于</font><font FACE="Arial" SIZE="3">Mode 13<br>
</font><font SIZE="3">設置</font><font FACE="Arial" SIZE="3">Mode 13<br>
Mode 13</font><font SIZE="3">與頁面特性</font><font face="宋體" size="3"><br>
</font><font SIZE="3">使用</font><font face="宋體" size="3">Mode 13</font><font
SIZE="3">模式</font><font FACE="Arial" SIZE="3"></p>
</font>
</blockquote>
<b><font face="宋體" size="3"><font FACE="黑體" SIZE="3"><p><a name="關于Mode 13">關于</font><font
FACE="Arial" SIZE="3">Mode 13</a></p>
</font></font></b><font size="4"><p align="right"></font><font face="宋體" size="3"><a
href="#目錄">返回目錄</a></font></p>
</blockquote>
<blockquote>
<font face="宋體" size="3"><font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">DirectDraw</font>支持線性非換頁的<font
FACE="Arial" SIZE="3">320x200</font>的<font FACE="Arial" SIZE="3">8</font>位調色板顯示模式,人們對它使用更為廣泛的名稱是<font
FACE="Arial" SIZE="3">Mode 13</font>棗它的<font FACE="Arial" SIZE="3">16</font>進制<font
FACE="Arial" SIZE="3">BIOS</font>模式編號。<font FACE="Arial" SIZE="3">DirectDraw</font>將這種模式視為一種<font
FACE="Arial" SIZE="3">Mode X</font>模式,但是它們之間又有著重要的區別,這是由<font
FACE="Arial" SIZE="3">Mode 13</font>模式的物理性質所強加的。</p>
</font><b><font FACE="黑體" SIZE="3"><p></font><font SIZE="3"><font face="宋體"><a
name="設置Mode 13">設置Mode 13</a></font></p>
</font></b><font size="4"><p align="right"></font><font face="宋體" size="3"><a
href="#目錄">返回目錄</a></font></p>
</blockquote>
<blockquote>
<font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">Mode 13</font><font face="宋體" size="3">模式與</font><font
FACE="Arial" SIZE="3">Mode X</font><font face="宋體" size="3">模式擁有一樣的被列舉和模式設置的行為特性。如果</font><font
FACE="Arial" SIZE="3">DDSCL_ALLOWMODEX </font><font face="宋體" size="3">標志被傳給</font><font
FACE="Arial" SIZE="3">IDirectDraw2::SetCooperativeLevel </font><font face="宋體"
size="3">函數,</font><font FACE="Arial" SIZE="3">DirectDraw</font><font face="宋體"
size="3">將只會列舉出</font><font FACE="Arial" SIZE="3">Mode 13</font><font
face="宋體" size="3">模式。</p>
<p ALIGN="JUSTIFY">你可以象列舉其它顯示模式那樣列舉出</font><font
FACE="Arial" SIZE="3">Mode 13</font><font face="宋體" size="3">模式,但是你必須在調用</font><font
FACE="Arial" SIZE="3">IDirectDraw2::EnumDisplayModes</font><font face="宋體" size="3">函數之前做一次頁面能力的檢測。要完成這一步,調用</font><font
FACE="Arial" SIZE="3">IDirectDraw2::GetCaps</font><font face="宋體" size="3">函數,并且檢查</font><font
FACE="Arial" SIZE="3">DDSCAPS </font><font face="宋體" size="3">結構中的</font><font
FACE="Arial" SIZE="3">DDSCAPS_STANDARDVGAMODE</font><font face="宋體" size="3">標志。如果該標志不存在,表示不支持</font><font
FACE="Arial" SIZE="3">Mode 13</font><font face="宋體" size="3">模式,那么,試圖帶</font><font
FACE="Arial" SIZE="3">DDEDM_STANDARDVGAMODES</font><font face="宋體" size="3">標志的列舉將會失敗,返回一個</font><font
FACE="Arial" SIZE="3">DDERR_INVALIDPARAMS</font><font face="宋體" size="3">錯誤。</p>
</font><font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">EnumDisplayModes</font><font
face="宋體" size="3">函數現在支持一個新的列舉標志棗</font><font
FACE="Arial" SIZE="3">DDEDM_STANDARDVGAMODES</font><font face="宋體" size="3">,它會讓</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font face="宋體" size="3">除了列舉出</font><font
FACE="Arial" SIZE="3">320x200x8</font><font face="宋體" size="3">的</font><font
FACE="Arial" SIZE="3">Mode X</font><font face="宋體" size="3">模式外,還可以列舉出</font><font
FACE="Arial" SIZE="3">Mode 13</font><font face="宋體" size="3">模式。同樣,</font><font
FACE="Arial" SIZE="3">IDirectDraw2::SetDisplayMode</font><font face="宋體" size="3">函數也有一個新的標志棗</font><font
FACE="Arial" SIZE="3">DDSDM_STANDARDVGAMODE</font><font face="宋體" size="3">,為了將顯示模式設置成</font><font
FACE="Arial" SIZE="3">Mode 13</font><font face="宋體" size="3">模式而不是</font><font
FACE="Arial" SIZE="3">320x200x8</font><font face="宋體" size="3">的</font><font
FACE="Arial" SIZE="3">Mode X</font><font face="宋體" size="3">模式,你必須傳遞此標志。</p>
<p ALIGN="JUSTIFY">注意:有些顯示卡提供了線性加速的</font><font
FACE="Arial" SIZE="3">320x200x8</font><font face="宋體" size="3">模式。在這種顯示卡上,</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font face="宋體" size="3">將不會列舉出</font><font
FACE="Arial" SIZE="3">Mode 13</font><font face="宋體" size="3">模式,而列舉出線性模式。在這種情況下,如果你試圖通過將</font><font
FACE="Arial" SIZE="3">DDSDM_STANDARDVGAMODE</font><font face="宋體" size="3">標志傳遞給</font><font
FACE="Arial" SIZE="3">SetDisplayMode</font><font face="宋體" size="3">函數而設置顯示模式為</font><font
FACE="Arial" SIZE="3">Mode 13</font><font face="宋體" size="3">,函數會調用成功,但是使用了線性模式。這是低分辨率模式替換</font><font
FACE="Arial" SIZE="3">Mode X</font><font face="宋體" size="3">模式的一個相似的方式。</p>
</font>
</blockquote>
<blockquote>
<b><font FACE="Arial" SIZE="3"><p><a name="Mode 13與頁面特性">Mode 13</font><font
FACE="黑體" SIZE="3">與頁面特性</a></p>
</font></b><font size="4"><p align="right"></font><font face="宋體" size="3"><a
href="#目錄">返回目錄</a></font></p>
</blockquote>
<blockquote>
<font face="宋體" size="3"><p ALIGN="JUSTIFY">當</font><font FACE="Arial" SIZE="3">DirectDraw</font><font
face="宋體" size="3">調用一個應用程序定義的</font><font FACE="Arial" SIZE="3">EnumModesCallback</font><font
face="宋體" size="3">回調函數,相應</font><font FACE="Arial" SIZE="3">DDSURFACEDESC
</font><font face="宋體" size="3">結構的</font><font FACE="Arial" SIZE="3">ddsCaps</font><font
face="宋體" size="3">成員包含了反映正被列舉模式的標志。在</font><font
FACE="Arial" SIZE="3">Mode X</font><font face="宋體" size="3">模式中,它會是</font><font
FACE="Arial" SIZE="3">DDSCAPS_MODEX</font><font face="宋體" size="3">,在</font><font
FACE="Arial" SIZE="3">Mode 13</font><font face="宋體" size="3">模式中,它會是</font><font
FACE="Arial" SIZE="3">DDSCAPS_STANDARDVGAMODE</font><font face="宋體" size="3">。這些標志是相互排斥的。如果沒有任何一個標志被設置,那么,該模式是線性加速的。這些特征同樣可應用于由調用</font><font
FACE="Arial" SIZE="3">IDirectDraw2::GetDisplayMode</font><font face="宋體" size="3">函數獲得的標志。</p>
</font>
</blockquote>
<blockquote>
<b><font FACE="黑體" SIZE="3"><p><a name="使用Mode 13模式">使用</font><font
FACE="Arial" SIZE="3">Mode 13</font><font FACE="黑體" SIZE="3">模式</font></a></b></p>
<font size="4"><p align="right"></font><font face="宋體" size="3"><a href="#目錄">返回目錄</a></font></p>
</blockquote>
<blockquote>
<font face="宋體" size="3"><p ALIGN="JUSTIFY">因為</font><font FACE="Arial" SIZE="3">Mode
13</font><font face="宋體" size="3">是線性模式,</font><font FACE="Arial" SIZE="3">DirectDraw</font><font
face="宋體" size="3">可以給應用程序提供對幀緩沖區的直接訪問。與</font><font
FACE="Arial" SIZE="3">Mode X</font><font face="宋體" size="3">模式不一樣,你可以調用</font><font
FACE="Arial" SIZE="3">IDirectDrawSurface3::Lock</font><font face="宋體" size="3">、</font><font
FACE="Arial" SIZE="3">IDirectDrawSurface3::Blt</font><font face="宋體" size="3">、和</font><font
FACE="Arial" SIZE="3">IDirectDrawSurface3::BltFast</font><font face="宋體" size="3">函數直接訪問主頁面。</p>
<p ALIGN="JUSTIFY">當使用</font><font FACE="Arial" SIZE="3">Mode 13</font><font
face="宋體" size="3">模式時,</font><font FACE="Arial" SIZE="3">DirectDraw</font><font
face="宋體" size="3">支持一種模擬的</font><font FACE="Arial" SIZE="3">IDirectDrawSurface3::Flip</font><font
face="宋體" size="3">函數,這是通過將后臺緩存的內容直接復制到主頁面來實現的。你可以自己編寫這些代碼,使用</font><font
FACE="Arial" SIZE="3">Blt</font><font face="宋體" size="3">或</font><font FACE="Arial"
SIZE="3">BltFast</font><font face="宋體" size="3">函數復制一個后臺緩存中的矩形區域到主頁面上。</p>
<p ALIGN="JUSTIFY">有一個有關鎖定和</font><font FACE="Arial" SIZE="3">Mode 13</font><font
face="宋體" size="3">的誤解。盡管</font><font FACE="Arial" SIZE="3">DirectDraw</font><font
face="宋體" size="3">允許對</font><font FACE="Arial" SIZE="3">Mode 13 VGA</font><font
face="宋體" size="3">幀緩沖區的直接線性訪問,但絕不要認為該緩沖區的地址總是</font><font
FACE="Arial" SIZE="3">0xA0000</font><font face="宋體" size="3">,因為</font><font
FACE="Arial" SIZE="3">DirectDraw</font><font face="宋體" size="3">可以返回一個指向的地址并不是</font><font
FACE="Arial" SIZE="3">0xA0000</font><font face="宋體" size="3">的幀緩沖區的別名虛擬內存指針。同樣,絕不要認為</font><font
FACE="Arial" SIZE="3">Mode 13</font><font face="宋體" size="3">頁面的寬矩(</font><font
FACE="Arial" SIZE="3">Pitch</font><font face="宋體" size="3">)是</font><font
FACE="Arial" SIZE="3">320</font><font face="宋體" size="3">,因為支持</font><font
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -