📄 设备.htm
字号:
<UL type=disc>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l60 level1 lfo8"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">调用失败,返回值为<SPAN
lang=EN-US>D3DERR_DEVICELOST –
这意味着应用程序必须发现设备已经丢失,从而知道一些事情没有按照预期进行。<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: l60 level1 lfo8"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">悄然失败,返回值为<SPAN
lang=EN-US>S_OK或其它值 –
若函数调用悄然失败,则应用程序一般无法区分出“调用成功”或“悄然失败”。<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: l60 level1 lfo8"><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">函数返回一个返回值。<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN> </LI></UL>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-outline-level: 2"><B><SPAN
style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">对丢失的设备作出响应<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></B></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>
<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">如果设备可以被恢复,那么应用程序应该销毁所有显存资源和交换链,并准备恢复。然后,应用程序调用<B
style="mso-bidi-font-weight: normal"><SPAN
lang=EN-US>IDirect3DDevice9::Reset</SPAN></B>方法。<B
style="mso-bidi-font-weight: normal"><SPAN
lang=EN-US>Reset</SPAN></B>方法是当设备丢失时唯一有效的方法,并且是应用程序可用来把设备从丢失状态恢复到操作状态的唯一方法。除非应用程序释放所有在<SPAN
lang=EN-US>D3DPOOL_DEFAULT中分配的资源,包括用<U>IDirect3DDevice9::CreateRenderTarget</U>和<U>IDirect3DDevice9::CreateDepthSstencilSurface</U>方法创建的资源,否则<B
style="mso-bidi-font-weight: normal">Reset</B>将会失败。<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中大部分被频繁调用的方法不返回任何关于设备是否已丢失的信息。应用程序可以继续调用渲染方法,如<U>IDirect3DDevice9::DrawPrimitive</U>,而不会收到设备丢失的通知。在Direct3D内部,这些操作被抛弃,直到设备被重置为操作状态为止。<o:p></o:p></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">通过查询<U><SPAN
lang=EN-US>IDirect3DDevice9::TestCooperativeLevel</SPAN></U>方法的返回值,应用程序可以决定在遇到设备丢失时如何处理。<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; mso-outline-level: 2"><B><SPAN
style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">锁定操作<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></B></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>Direct3D在内部做了很多工作,但是,它并不保证在锁定操作时显存资源中的数据是正确的,Direct3D只保证不返回错误代码。这使得在编写应用程序时,不必关心在锁定操作时设备丢失与否。<o:p></o:p></SPAN></SPAN></P>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-outline-level: 2"><B><SPAN
style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">资源<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></B></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>D3D_OK,而实际上只分配假的系统内存。因为在调整设备的大小之前任何显存资源必须被销毁,所有不会存在显存被过度分配的问题。这些假的表面使锁定和复制操作看起来运行正常,直到应用程序调用<B
style="mso-bidi-font-weight: normal">IDirect3DDevice9::Present</B>并发现设备已经丢失。<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">在可以把设备从丢失状态重置为操作状态前,所有显存必须被释放。这意味着应用程序应该释放所有用<U><SPAN
lang=EN-US>IDirect3DDevice9::CreateAdditionalSwapChain</SPAN></U>创建的交换链和所有放在<SPAN
lang=EN-US>D3DPOOL_DEFAULT内存类型中的资源。应用程序无需释放在D3DPOOL_MANAGED或D3DPOOL_SYSTEMMEM内存类型中的资源。其余状态数据在改变到操作状态时会被自动销毁(译注:如后缓存)。<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鼓励在开发应用程序时用同一部分代码对设备丢失做出响应。这部分代码和启动应用程序时用于初始化设备的那部分代码即使不完全相同,也应该差不多。<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-outline-level: 2"><B><SPAN
style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">取回的数据<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></B></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允许应用程序通过<U>IDirect3DDevice9::ValidateDevice</U>对照单次渲染用硬件验证纹理和渲染状态。这种方法一般在应用程序初始化时调用,如果设备已经丢失,那么该方法将返回D3DERR_DEVICELOST。<o:p></o:p></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也允许应用程序把生成的(译注:即渲染得到的)或以前写入到显存中的图像从显存资源中复制到非易失性的(nonvolatile)内存资源中。因为这类传输中的源图像可能在任何时候丢失,所以当设备丢失时Direct3D允许这类操作失败。<o:p></o:p></SPAN></P>
<P>关于异步查询,如果使用了<SPAN
lang=EN-US>FLUSH标志,那么<U>IDirect3DQuery9::GetData</U>将返回D3DERR_DEVICELOST,这是为了告诉应用程序<B
style="mso-bidi-font-weight: normal">IDirect3DQuery9::GetData</B>方法根本不会返回S_OK,。<o:p></o:p></SPAN></P>
<P>当设备丢失时,因为不存在主表面,所以复制操作<U><SPAN
lang=EN-US>IDirect3DDevice9::GetFrontBufferData</SPAN></U>会失败,返回值为<SPAN
lang=EN-US>D3DERR_DEVICELOST。当设备丢失时,<U>IDirect3DDevice9::CreateAdditionalSwapChain</U>也会因为无法创建后缓存而失败,并返回D3DERR_DEVICELOST。注意除了<U>IDirect3DDevice9::Present</U>,<U>IDirect3DDevice9::TestCooperativeLevel</U>和<U>IDirect3DDevice9::Reset</U>方法之外,
D3DERR_DEVICELOST返回值只可能出现在以上两种情况中。<o:p></o:p></SPAN></P>
<P class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-outline-level: 2"><B><SPAN
style="FONT-SIZE: 18pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">可编程着色器<SPAN
lang=EN-US><o:p></o:p></SPAN></SPAN></B></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>Microsoft DirectX® 9.0中,<U>Vertex Shader 1_1</U>和<U>Pixel Shader
1_X</U>在<B
style="mso-bidi-font-weight: normal">Reset</B>后不需要被重置,它们会被记住。在DirectX的前一个版本中,设备丢失后需要重新创建着色器。<o:p></o:p></SPAN></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 lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">Microsoft®
Direct3D®为检测硬件支持提供了以下函数。<o:p></o:p></SPAN></P>
<UL type=disc>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l39 level1 lfo4"><U><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">IDirect3D9::CheckDeviceFormat</SPAN></U><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
<o:p></o:p></SPAN></LI></UL>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; 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>
<UL type=disc>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l39 level1 lfo4"><U><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">IDirect3D9::CheckDeviceType</SPAN></U><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
<o:p></o:p></SPAN></LI></UL>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; 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>presentation交换链的能力,或设备渲染到当前显示格式的能力。<o:p></o:p></SPAN></SPAN></P>
<UL type=disc>
<LI class=MsoNormal
style="mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; tab-stops: list 36.0pt; mso-list: l39 level1 lfo4"><U><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">IDirect3D9::CheckDepthStencilMatch</SPAN></U><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">
<o:p></o:p></SPAN></LI></UL>
<P class=MsoNormal
style="MARGIN-LEFT: 36pt; 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>/模板缓存格式与某个渲染目标格式相兼容。注意在调用此方法前,应用程序应该同时对深度/模板格式和渲染目标格式调用<B
style="mso-bidi-font-weight: normal">IDirect3D9::CheckDeviceFormat</B>。<o:p></o:p></SPAN></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"><U><SPAN
lang=EN-US
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">IDirect3DDevice9</SPAN></U><SPAN
style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-fareast-language: ZH-CN">接口同时支持软件和硬件顶点处理。一般来说,设备的软件和硬件顶点处理能力是不完全一样的。硬件能力是可变的,取决于显示适配器和驱动程序,而软件能力则
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -