最近系统出现了一个问题:在VS2010中debug模式下纹理混合正常显示,在release模式下显示黑屏(无报错),单独运行release模式的程序仅能显示1层纹理(也无报错)。这真是个奇妙的世界啊!

经过一段时间调试,问题解决了,出在HLSL文件上。

总结一下DirectX10/11 出现这种情况的调试步骤:

  1. 首先在绘制层面对程序debug(即对HLSL(.fx文件)进行debug)。

工具自然是用PIX了,PIX(英语:Performance Investigator for Xbox)是微软的性能分析工具,它可以协助软件开发人员把Direct3D应用程序调整至最佳状态,换句话说,它是一套Direct3D 除错工具。这套工具原本是给Xbox电子游戏机使用的,后来微软把它移植到Windows操作系统上,类似于XNA,用来协助游戏开发人员。(来源:http://zh.wikipedia.org/wiki/PIX_(%E5%BE%AE%E8%BB%9F))

不过最好懂点HLSL的汇编语言,毕竟通过PIX对release版本的程序只能看到调用汇编语言的过程。如果debug版本运行正常的话,可以调整同样的参数进行参考。

参考文章:1. Direct3D程序调试利器 PIX Win 简介 http://www.cnblogs.com/Tue/archive/2009/06/08/Tools.html

2. [原创]使用Pix For Windows调试Shader傻瓜教程 http://hi.baidu.com/dbfr2011818/item/4432f9e93a74a3c1baf37d00

3. A painless introduction to PIX for Windows http://blogs.msdn.com/b/manders/archive/2006/12/15/a-painless-introduction-to-pix-for-windows.aspx

4. Asm Shader Reference(着色器汇编语言参考)http://msdn.microsoft.com/en-us/library/windows/desktop/bb219840(v=vs.85).aspx

2、如果确定HLSL文件无问题,考察D3D设备初始化、编译fx文件状态设置

重点考察以下几个结构:

  1. D3D_DRIVER_TYPE
  2. D3D_FEATURE_LEVEL
  3. D3DCOMPILE

3、最后的步骤就是常用的项目调试经验,一般的来说,Debug 和 Release 只是一组编译选项的差别,实际上并没有什么定义能区分二者。如果debug项目运行正常,release不正常而代码又挑不出来什么错的话,那十有八九是某一个项目设置的问题。

参考文章:release与debug http://blog.csdn.net/kuangfengwu/article/details/7355639

终于写完了(我能说我已经憋了三天了么),因为是用word2013写的,不知道排版怎么样,待发布后看看。

posted on 2013-08-26 13:11  colorzc  阅读(410)  评论(0编辑  收藏  举报