Direct3D的一些小技巧.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Direct3D的一些小技巧

Direct3D的一些小技巧GPU性能调试:通常来说,使用CPU时间事件来调试GPU是低效并且是不准确的。D3D API在多数命令下会阻塞,甚至是Draw函数。它会在一些时间片上做一些真正的工作,而这往往是不可预知的。因此,GPU的性能调试只能用PIX或者是其他专用产品,例如NVIDIA’s NVPerfHUD来进行。显卡所用的内存:显卡所用的内存可以分为两大类:本地的和非本地的(相对于显卡来说)。在显卡处理的某些数据类型的时候,需要本地内存,例如帧缓冲。 非本地内存,有时也成为AGP卡槽内存(AGP aperture),可以被显卡访问的某些数据类型所在的系统内存,例如顶点缓冲。本地内存要比非本地内存快。本地内存通常是在显卡内的,但是有些显卡可以共享系统内存,这通常是平衡速度和价格之间的选择。在这种情况下,帧缓存可以存在于系统内存中,而不是在本地内存中。这种技术下,显卡处理某些数据的速度比不使用共享内存的要慢,因为数据必须从I/O Bus(例如PCI-Express)上传输过来。但是这可以使显卡成本大大降低。在NVIDIA,这种技术被称为TurboCache,而ATI称之为HyperMemory。着色器和着色模型:Shader是运行在GPU上的,处理一些D3D流水管线上一些任务的程序。有三种类型的shader,他们分别对应三种可编程的stage:Vertex shader (顶点着色器VS) stage, geometry shader (几何着色器GS) stage, 还有pixel shader(像素着色器PS) stage。其中几何着色器只能在DX10平台上使用。着色模型(shader model)是在GPU上运行的虚拟机。每个虚拟机定义被称为一种shader profile。并且包含了特定的汇编语言。着色器的职责:着色器通常是流水管线中描述物体表面的部分。例如,一种看起来像木头的材质被称为木头着色器(wood shader)。而在D3D中,这些着色语言指令集可以做的事情远不止描述物体表面。他们可以用来计算光照,矩阵转换,顶点动画,进行裁切,动态生成新的几何物体,等等。在Mental ray中,shader按照职责可以划分为surface shader, light shader, shader shader, output shader等等。在D3D中,这三种着色器的职责划分并不是很明确。例如,光照计算过可以在顶点着色器,或者是像素着色器中完成,这取决于应用程序的需求。因此,包含各种着色器的着色器集合应运而生。他们链接起来定义了一个工作流水线。关于Direct3D 9 资源和内存类型:D3D支持下列类型的资源:纹理(包括常规的和渲染目标render target),顶点缓冲,索引缓冲,字体,交换链(swap chain),状态组,深度模板缓冲,特效等等。有四种内存类型(池),资源可以在这里分配:·默认Default:在显卡内存中,包括AGP卡槽内存和本地显存。在设备丢失之后,必须被释放,重构。·托管Managed:存在于系统内存中,按需拷贝到显存。·系统SystemMem:永远存在于系统内存中,并且不能直接用于渲染。可以当作源或者目标拷贝。例如UpdateSurface和UpdateTexture。·Scrach: 永远存在于系统内存中,并且不会被设备大小或格式限制,例如纹理的2的幂限制。不能把它放到显存中。查找资源泄露:在关闭一个基于D3D的应用程序时,D3D调试运行库会报告内存泄露。按照以下步骤定位泄漏点。1.在DirectX Control Panel中(通常在DXSDK安装目录中可以找到),启用“Use Debug Version of Direct3D 9”并且将Debug Output Level设置为”More”。确保Break on Memory Leaks被禁用。点击Apply。2.在VS中调试运行应用程序。在关闭应用程序之后,查看VS的输出窗口Direct 3D9: (WARN) : Memory Address:? 00xxxxxx,? IAllocID= xx dwSize = xxxxxxxx;(pid = xxxxx)3.每条记录对应了一个资源泄漏,查看并记住ID,然后在DirectX Control Panel中输入ID并且点击Apply。4.再次运行程序,重复以上步骤。程序会在分配点中断,你可以检查哪里遗忘释放。5.当你调试完成之后,别忘了将Break On AllocID设置为0。处理设备丢失(Device Lost)一个D3D设备可以在很多情况下丢失,例如从全屏向窗口转换,一个电源管理事件,按CTRL+DEL+ALT返回Windows Security Dialog。必须采取措施去检

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档