修改于2015年9月6日:

去年写这篇解决方案的时候其实对着色器编程还一知半解,摸索了一个治标不治本的方法解决问题,结果被一个CSDN的博主原封不动抄了去,还打上个原创的标签= =,简直无语。。。

最近重新开始深入学习DX,对这个问题摸索到了更合理的解决办法,在此重新记录一下。

本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/3696949.html


2014年4月的解决方案:

这个问题出现的原因是将.fx文件(着色器文件)导入自己新建的工程以后,VS2013会默认使用HLSL编译器对其进行编译,而.fx文件中并未定义main函数,所以会导致编译出错。

解决方法是:

右键.fx文件,“属性->配置属性->常规->项类型”,将“HLSL编译器”改为“不参与生成”


2015年9月的解决方案:

按照正常的DirectX程序执行流程来说,着色器文件是在程序启动的时候才被编译与执行,但如此一来,当着色器程序出现语法错误时Debug便变成了一个噩梦。

因此,VS2013为大家提供了一个人性化的功能,那便是在程序编译时加入了对着色器代码的语法检查。去年写这篇博文时提供的解决方法便是让编译器跳过了对着色器的语法检查,从而让程序能够正常运行。

本人博客地址,防止无脑抄袭,影响阅读见谅:http://www.cnblogs.com/dbylk

那么问题来了:

为什么在着色器代码在能够正常执行的情况下编译器还会对着色器文件报“entrypoint not found”的错误呢?

这个问题的答案如下:

不同于C/C++程序,着色器程序的入口函数名是可以由用户自己定义的,而VS2013将着色器程序的默认入口函数名与C/C++一样设为了“main”,而DirectX Tutorial中的着色器代码并不不是以“main”作为程序入口点,所以才会报出上述的错误。

新的解决方法如下:

1. 右键.fx文件,“属性->配置属性->常规->项类型”,将它的值改为“HLSL编译器”

2. 点击右下角的“应用”按钮,会发现左边的“配置属性”菜单中多了一个“HLSL编译器”的菜单,点开后选择“常规”

3. “入口点名称”改为着色器文件中对应的函数名

4. “着色器类型”改为对应的着色器类型(一般为顶点 or 像素着色器)

5. “着色器模型”改为对应的着色器版本

使用这个方法就可以在解决问题的同时使用VS2013对着色器代码进行语法检查了,OVER!

【VS2013编译DirectX Tutorials时遇到的错误】FXC : error X3501: 'main': entrypoint not found的更多相关文章

  1. 【VS2013编译DirectX Tutorials时遇到的错误】"const wchar_t *" 类型的实参与 "LPCSTR" 类型的形参不兼容

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/3696367.html 通过查看LPCSTR的定义: typedef _Null_te ...

  2. 【VS2013生成DirectX Tutorials时遇到的错误】无法解析的外部符号 _D3D10CreateDeviceAndSwapChain@32

     本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/3696472.html 今天尝试编译DirectX10中的一个Turorials时, ...

  3. Linux:编译动态库时遇到的错误relocation R_X86_64_32 against `a local symbol'

    编译动态库时遇到如下错误: ... ... relocation R_X86_64_32 against `a local symbol' can not be used when making a ...

  4. VS2008项目使用VS2015打开时,出现错误: error CS1012: Too many characters in character literal

    VS2008项目使用VS2015打开时,出现错误: error CS1012: Too many characters in character literal ------------------- ...

  5. 启动webpack-dev-server错误,ERROR in main.js from UglifyJs Unexpected token: name «element», expected: punc «;»

    启动webpack-dev-server出现以下错误 ERROR in main.js from UglifyJsUnexpected token: name «element», expected: ...

  6. 解决 Maven项目进行编译( mvn compile )时出现的错误

    错误信息: 在 pom.xml 文件 设置一下Maven的属性 <!--Maven 属性--> <properties> <!--项目的编码格式--> <pr ...

  7. 编译Cython代码时遇到的问题: fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'

    使用python setup.py build_ext --inplace命令编译cython代码, 出现以下错误: Compiling cython_example.pyx because it c ...

  8. 编译php5.4的时候出现错误----configure: error: in `/usr/local/src/php540/php-5.4.0':

    错误如下:checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep - ...

  9. 编译android程序时DEX过程出现错误

    今天编译高级设置时出现了错误,这好坑爹啊~ 于是我开始检查代码,发现代码没有错误啊,然后观察MAKE的步骤才发现是DEX时出现了问题!! 下面是错误的LOG: Information:Using ja ...

随机推荐

  1. 人工智能-baidu-aip语音合成(文字转语音)

    from aip import AipSpeech APP_ID = ' APP_KEY = 'DhXGtWHYMujMVZZGRI3a7rzb' SECRET_KEY = 'PbyUvTL31fIm ...

  2. 20170520 BADI增强学习

    一.要求:Tcode:FF_5 导入数据运行时,产生财务凭证之前修改某些字段值.Exmp:FEBRE-VWEZWBKPF-XBLNRFEBEP-CHECTBSEG-ZUONR there is a b ...

  3. C/C++ 关键字的使用方法详解

    cppreference.com -> C/C++ 关键字 -> 细节 C/C++ 关键字 asm 语法: asm( "instruction" ); asm允许你在你 ...

  4. 【整理学习Hadoop】Hadoop学习基础之二:分布式

      分布式系统就是将系统的应用层,数据层或其它部分构架成分布(物理和逻辑上的都可以)状(通常是网状).分布式系统通常是为了增强系统的可扩展性.稳定性和执行效率.比如在线游戏通常就是分布系统,里面所谓的 ...

  5. python调用php函数

    由于php不支持多线程,所以想借助python搞一个.1.import subprocessimport time#Simple caller, disguard outputmethod=" ...

  6. Array排序方法sort()中的大坑

    sort() 方法用于对数组的元素进行排序. 但是排序结果就有点坑了,都不按常规出牌的: // 看上去正常的结果: ['Google', 'Apple', 'Microsoft'].sort(); / ...

  7. 5.4WEB服务器、应用程序服务器、HTTP服务器区别

    WEB服务器.应用程序服务器.HTTP服务器有何区别?IIS.Apache.Tomcat.Weblogic.WebSphere都各属于哪种服务器,这些问题困惑了很久,今天终于梳理清楚了:   Web服 ...

  8. css异步加载

    <link rel="preload" href="mystyles.css" as="style" onload="thi ...

  9. 大话设计模式之PHP篇 - 简单工厂模式

    假设有一道编程题:输入两个数字和运算符,然后得到运算结果.非常简单的一道题目,通常的实现代码如下: <?php Function Operation($val1, $val2, $operate ...

  10. NSCoder

    person.h头文件内容 #import <Foundation/Foundation.h> @interface Person : NSObject { NSString *name; ...