⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 topitem.htm

📁 DirectX 编程初级教程中文版。只要有C++基础和一点三维知识即可。
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<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>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#关于Mode 13">关于Mode 13</a><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#设置Mode 13">设置Mode 13</a><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#Mode 13与页面特性">Mode 13与页面特性</a><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#设置Mode 13">使用Mode 13模式</a></font><p><font
    face="宋体">2、<a href="#从DMA中获益">从DMA中获益</a><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#关于DMA设备支持">关于DMA设备支持</a><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#对DMA支持的检测">对DMA支持的检测</a><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#典型的DMA方案">典型的DMA方案</a><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#利用DMA">利用DMA</a></font></p>
    <p><font face="宋体">3、<a href="#在窗口模式下使用DirectDraw调色板">在窗口模式下使用调色板</a><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#窗口模式的调色板入口类型">窗口模式的调色板入口类型</a><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="#在窗口模式下创建调色板">在窗口模式下创建调色板</a><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <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 + -