《Introduction to 3D Game Programming with DirectX 11》
以这本书的提示开始了尝试。。。(尝试内容是开篇的环境配置,DemoBox.cpp那个)
问题一: fxc.exe已退出 or 入口点问题
项目属性--HLSL编译器--常规--着色器类型设为fx,着色器模型设为fx 5.0,同时入口点改为WinMain。
同时检查下.fx文件的属性,配置属性--常规--从生成中排除---否,项类型---HLSL编译器,否则此fx文件会被跳过。
问题二:过时的Common文件夹
描述:作者给出的Common文件夹中的Effects11.lib和Effects11d.lib是为当时的Effect 11框架配套编译的(且适合vs2010来用),我所用的Win8.1(且IDE是vs2013)使用这两个lib有问题 (在于_MSC_VER_宏值为1800与1600不对应)
解决:http://download.csdn.net/download/u011873969/8032051,有好心人给出了vs2013配套可用更新过的lib,可以用这个Common文件夹成功编译。但是程序运行时出现问题三。
如果使用的非VS2013,请自行编译effect框架,具体方法很多blog都有写,这里不再指出。
问题三:CreateEffectFromMemory函数 // 问题一解决的话,问题三将不再出现
描述:难以下手的问题,需要大量补充dx的知识。经过调试,这个函数的参数上面不正常,指针居然成了空指针。。详见下图:
做个问题记录等以后懂dx再来研究。
另外有相同问题的朋友,提供给你们几个可能有帮助的链接:
https://msdn.microsoft.com/en-us/library/windows/desktop/ff476273(v=vs.85).aspx
http://xboxforums.create.msdn.com/forums/p/87793/526930.aspx
http://stackoverflow.com/questions/16642989/dx11-unresolved-externals
互相学习!
----------------------------------------------------------------------------------------------------------------
现在知道原因了,CreateEffectFromMemory函数填写的实参&mFX为空导致错误的原因是fx文件没调用成功fxc.exe对它编译。
当时我跳过了HLSL编译!!后来忘了这码事。。按问题一调试,问题三就不会出现了
根据CreateEffectFormFile函数的参数fx_5_0可知,项目属性--HLSL编译器--常规--着色器类型设为fx,着色器模型设为fx 5.0,同时入口点改为WinMain。 // vs2013下
同时检查下.fx文件的属性,配置属性--常规--从生成中排除---否,项类型---HLSL编译器,否则此fx文件会被跳过。
成功编译.fx文件后,实参&mFX就成功指向fx文件编译出的数据地址了:)
其他可能还有些小问题,但都不难分析,比如无法解析的外部符号肯定是这个库没加载成功,那么检查库有没有问题,路径对不对,link的输入里面有没有写对。。
共勉~