《Introdution to 3D Game Programming With DirectX11》我是从这本书学习的directx,被称为“龙书”dx11版,由于是通过这本书学习的所以自己的代码也是按书上的套路来的,环境是directxSDK+vs2010。但是现在已经是VS2015了,然后就想换为win10sdk+vs2015,然而这么一换就开始各种报错了,然后网上搜解决办法,能搜到的都是老外遇到的各种问题,中文的东西一点没有,参照*和msdn上有关内容,弄了很久才能让代码在vs2015上编译连接通过。个人觉得对新手来说(如菜渣我)这个转移过程还是挺不容易搞定的,所以就想把这个过程写出来吧,当个傻瓜教程......
至于升级环境的目的,首先是得跟紧微软爸爸的脚步对吧,然后是VS2010对于C++11的特性很多都不支持,以及我的vs2010装不上shader编写的代码高亮的插件,写shader时候简直蛋疼死,并且directxSDK从2010版本开始就停止更新了,不支持dx11.1,11.2,和12的内容,所以升级了环境还是比较好的。
想转到vs2015,首先要安装windows的sdk,我用的是win10的。然后在vs2015中打开项目并且升级,这时如果直接build的话应该是有提示缺少‘main entry’的错误,这个需要点项目属性->HLSL编译器,其中着色器类型改为“效果”,着色器模型改为Shader Model 5.0。还需要将$(WindowsSDK_IncludePath)和$(WindowsSDK_LibraryPath_x86)加入项目包含目录和库目录并上移至顶,不然可能会有一些很奇怪的错误(应该是由于路径中有重复不同版本文件导致的)。再build的话应该是有关于effects11.lib的错误,这个是effects框架版本的问题,需要去https://fx11.codeplex.com/这里下载最新版的effects代码自己在vs2015中编译生成dubug和release版本的lib文件并替换之前的老文件(common文件夹中)。然后应该是关于dxerr.lib的错误,dxerr貌似也是在新版本dx中被去除了,本来和effects一样应该是有升级版的但现在貌似被整合到新版DXUT中去了,但实际上书中对dxerr的应用就是使用了一个dxtrace函数,dx的错误能够通过它显示出来,(但应该是程序规模较小的原因我至今也没见过它报出来的错)由于我也暂时没找到替代它的方法,所以就暂时简单的将HR宏里的内容去掉了。这时应该能在vs2015中运行了。
不过这只是暂时解决方案,因为还是要用到dxsdk,下一步的目标应该是换掉代码中Effects框架、D3DX有关的东西以及将xnamath用directxmath替换等等,彻底去掉对dxsdk的依赖,对于dxtrace的替代也要再找找。