最近系统出现了一个问题:在VS2010中debug模式下纹理混合正常显示,在release模式下显示黑屏(无报错),单独运行release模式的程序仅能显示1层纹理(也无报错)。这真是个奇妙的世界啊!
经过一段时间调试,问题解决了,出在HLSL文件上。
总结一下DirectX10/11 出现这种情况的调试步骤:
- 首先在绘制层面对程序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文件状态设置
重点考察以下几个结构:
- D3D_DRIVER_TYPE
- D3D_FEATURE_LEVEL
- D3DCOMPILE
3、最后的步骤就是常用的项目调试经验,一般的来说,Debug 和 Release 只是一组编译选项的差别,实际上并没有什么定义能区分二者。如果debug项目运行正常,release不正常而代码又挑不出来什么错的话,那十有八九是某一个项目设置的问题。
参考文章:release与debug http://blog.csdn.net/kuangfengwu/article/details/7355639
终于写完了(我能说我已经憋了三天了么),因为是用word2013写的,不知道排版怎么样,待发布后看看。