📄 设备.htm
字号:
</SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>Device.m_DevType,
<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 18pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><SPAN
style="mso-spacerun: yes">
</SPAN>Params.BackBufferFormat, Params.BackBufferFormat, <o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 18pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><SPAN
style="mso-spacerun: yes">
</SPAN>FALSE))) <o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><SPAN
style="mso-spacerun: yes">
</SPAN>return E_FAIL;<o:p></o:p></SPAN></P>
<OL type=1 start=4>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l37 level1 lfo2"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">应用程序通过调用<U><SPAN
lang=EN-US>IDirect3D9::GetDeviceCaps</SPAN></U>方法检查此适配器上的设备对希望使用的功能的支持度。此方法会过滤掉不支持所需的功能的设备。对经由<B
style="mso-bidi-font-weight: normal"><SPAN
lang=EN-US>IDirect3D9::CheckDeviceType</SPAN></B>验证过所有显示模式的设备,可以保证<B
style="mso-bidi-font-weight: normal"><SPAN
lang=EN-US>IDirect3D9::GetDeviceCaps</SPAN></B>返回的设备能力是不变的。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l37 level1 lfo2"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">若设备支持被枚举的显示模式,则设备总是可以渲染到这些格式的表面。若应用程序需要渲染到不同格式的表面,则可以调用<U><SPAN
lang=EN-US>IDirect3D9::CheckDeviceFormat</SPAN></U>。若设备可以渲染到这种格式的表面,则可以保证所有<B
style="mso-bidi-font-weight: normal"><SPAN
lang=EN-US>IDirect3D9::GetDeviceCaps</SPAN></B>返回的能力都是可用的。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l37 level1 lfo2"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">最后,应用程序可以使用<U><SPAN
lang=EN-US>IDirect3D9::CheckDeviceMultiSampleType</SPAN></U>方法检测设备是否支持多重取样技术,如全屏抗锯齿。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN> </LI></OL>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">完成以上步骤后,应用程序应该有一个可用的显示模式列表。最后一步是验证有足够的设备可存取内存可供使用,以容纳所需数量的缓存和抗锯齿所需的内存。这个测试是必需的,因为不同显示模式和多重取样的组合所消耗的内存不通过验证是无法预测的。此外,有些显示适配器的体系结构可能无法保证设备可存取内存的数量保持不变。这意味着当切换到全屏模式时,应用程序应该有能力报告视频内存(此后简称为显存)用尽的错误。一般来说,应用程序应该在提供给用户的模式列表中移除全屏模式,或者应该通过减少后缓存的数量或使用不太复杂的多重取样技术以试图消耗较少的内存。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">窗口应用程序执行一系列类似的操作。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></P>
<OL type=1>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l6 level1 lfo3"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">检测被窗口的客户区覆盖的桌面矩形。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l6 level1 lfo3"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">枚举适配器,找到覆盖该客户区的相应适配器。如果客户区被一个以上适配器拥有,那么应用程序可以选择单独处理每个适配器,或仅处理单个适配器,并由<SPAN
lang=EN-US>Direct3D在presentation时把像素从一个设备上传送到另一设备上。应用程序也可以忽略以上两步并使用D3DADAPTER_DEFAULT。注意当窗口被放置在第二个显示器上时,运行速度可能会比较慢。<o:p></o:p></SPAN></SPAN>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l6 level1 lfo3"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">应用程序应该调用<B
style="mso-bidi-font-weight: normal"><SPAN
lang=EN-US>IDirect3D9::CheckDeviceType</SPAN></B>检测在桌面模式下设备是否支持渲染到指定格式的后缓存。<U><SPAN
lang=EN-US>IDirect3D9::GetAdapterDisplayMode</SPAN></U>可用于检测桌面显示格式,如以下示例代码所示。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN> </LI></OL>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DPRESENT_PARAMETERS
Params;<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">//</SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
初始化D3DPRESENT_PARAMETERS成员的值。</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p> </o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">//</SPAN><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
使用当前的显示模式。</SPAN><SPAN lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">D3DDISPLAYMODE
mode;<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p> </o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">if(FAILED(m_pD3D->GetAdapterDisplayMode(Device.m_uAdapter
, &mode)))<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><SPAN
style="mso-spacerun: yes">
</SPAN>return E_FAIL;<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p> </o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">Params.BackBufferFormat
= mode.Format;<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><o:p> </o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">if(FAILED(m_pD3D->CheckDeviceType(Device.m_uAdapter,
Device.m_DevType, <o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">Params.BackBufferFormat,
Params.BackBufferFormat, FALSE)))<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; tab-stops: 45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt"><SPAN
lang=EN-US
style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN"><SPAN
style="mso-spacerun: yes"> </SPAN><SPAN
style="mso-spacerun: yes"> </SPAN>return E_FAIL;<o:p></o:p></SPAN></P>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
<HR align=center width="100%" SIZE=1>
</SPAN></DIV>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-outline-level: 1"><A
name=丢失的设备><B><SPAN
style="FONT-SIZE: 24pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 18.0pt; mso-fareast-language: ZH-CN">丢失的设备<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></B></A></P><SPAN
style="mso-bookmark: 丢失的设备"></SPAN>
<DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
<HR align=center width="100%" SIZE=1>
</SPAN></DIV>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">一个<SPAN
lang=EN-US>Microsoft®
Direct3D®可以处于操作状态或丢失状态。操作状态是设备的正常状态,设备按预期运行并present所有渲染结果。当事件发生时,如全屏应用程序失去键盘输入焦点,设备就转变到丢失状态,这会导致渲染无法进行。丢失状态表现为所有渲染操作的悄然失败,这意味着即使渲染操作失败所有的渲染方法仍可以返回成功码。在这种情况下,<U>IDirect3DDevice9::Present</U>返回错误码D3DERR_DEVICELOST。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><SPAN lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">Direct3D有意没有对可能导致设备丢失的所有情况进行详细说明。一些典型的例子包括窗口失去焦点,例如用户按下了ALT+TAB或弹出了一个系统对话框。设备也会因为电源管理事件而丢失,或者另一个应用程序进行全屏操作。另外,任何对<U>IDirect3DDevice9::Reset</U>调用的失败会把设备置为丢失状态。<o:p></o:p></SPAN></P>
<P><B style="mso-bidi-font-weight: normal">注意</B><SPAN lang=EN-US><SPAN
style="mso-tab-count: 1">
</SPAN>可以保证所有继承自IUnknown的方法在设备丢失后仍能正常工作。设备丢失后,每个函数一般有三种可能:<o:p></o:p></SPAN></P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -