我刚刚开始使用C ++学习HLSL的基础知识,我按照书上的教程,第一个基本着色器是:
float4 VS_Main( float4 pos:POSITION):SV_POSITION
{
return pos;
}
但是我在编译时遇到了很多错误:
错误C2146:语法错误:';'在标识符'VS_Main'
之前丢失错误C4430:缺少类型说明符,假设为int。注意:不再支持default-int
错误C2146:语法错误:')'在标识符'pos'
之前丢失错误C2059:语法错误看起来像函数定义,但没有正式的参数列表。
错误C2059:语法错误:'{'
它真的看起来编译器根本无法处理HLSL ...也许VS2012 express不支持HLSL?
提前致谢
答案 0 :(得分:1)
HLSL不是C ++。您应该使用着色器编译器编译着色器,使用C ++编译器编译C ++ - 不要混用。编译HLSL有两种选择。
fxc.exe
(文档和用法here at MSDN)。它会生成一个文件,您应该通过here。每种变体都有利弊。简而言之,在构建时进行预编译可以在运行时获得一些时间,而在运行时编译在开发阶段更灵活,更舒适(无需记住重新编译或使用构建后脚本)但更多错误 - 易于。自己选择。
答案 1 :(得分:1)
代码看起来很适合HLSL。如果要从VS2012中编译它,请使用HLSL着色器编译器将“.fx”文件设置为构建。右键单击文件选择属性。然后选择General和Item Type应设置为HLSL编译器。
如果您真的想使用C ++制作着色器,可以查看C ++ AMP,看它是否适合您的需求。
答案 2 :(得分:0)
它真的看起来编译器根本无法处理HLSL ...也许VS2012 express不支持HLSL?
没有C ++编译器。它不应该由编译器处理。
您需要将其转换为资源并使用构建后脚本将其复制到bin目录中,并在运行时加载HLSL。
另请参阅:http://www.directxtutorial.com/Lesson.aspx?lessonid=11-4-5