我刚刚开始学习使用C++的HLSL的基础知识,按照书中的教程,第一个基本着色器是:
float4 VS_Main( float4 pos:POSITION):SV_POSITION
{
return pos;
}但我在编译时遇到了很多错误:
错误C2146:标识符'VS_Main‘前缺少语法错误:';’
错误C4430:缺少类型说明符,假定为int。注意:不再支持default-int
错误C2146:标识符'pos‘前缺少语法错误:')’
error C2059:语法错误看起来像函数定义,但没有正式的参数列表。
错误C2059:语法错误:'{‘
看起来编译器在all...maybe VS2012 express上不能处理HLSL不支持HLSL?
提前感谢
发布于 2013-02-03 01:41:27
all...maybe VS2012
看起来编译器不能处理HLSL不支持HLSL?
没有C++编译器会这样做。它不应该由编译器处理。
您需要将其转换为资源,并使用构建后脚本将其复制到bin目录中,然后在运行时加载HLSL。
另请参阅:http://www.directxtutorial.com/Lesson.aspx?lessonid=11-4-5
发布于 2013-02-03 01:52:19
HLSL不是C++。应使用着色器编译器编译着色器,并使用C++编译器编译C++ -请勿混合。编译HLSL有两个选项。
fxc.exe (文档和用法here at MSDN)。它生成一个文件,您应该通过使用D3DCompileFromFile函数在运行时使用here.每一种变体都有其优缺点。简而言之,在构建时预编译可以在运行时获得一些时间,而在运行时编译在开发阶段更灵活、更舒适(不需要记住重新编译或使用构建后脚本),但更容易出错。你自己选吧。
发布于 2013-02-03 06:18:32
代码看起来很适合HLSL。如果要从VS2012内部编译它,请将".fx“文件设置为使用HLSL着色器编译器进行构建。右键单击文件,选择属性。然后选择General并将Item Type设置为HLSL编译器。
如果你真的想使用C++制作着色器,你可以查看C++AMP,看看它是否适合你的需要。
https://stackoverflow.com/questions/14664562
复制相似问题