0

我刚刚开始使用 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?

提前致谢

4

3 回答 3

2

HLSL 不是 C++。你应该用着色器编译器编译着色器,用 C++ 编译器编译 C++——不要混用。编译 HLSL 有两种选择。

  1. fxc.exe使用DirectX SDK 中包含的命令行实用程序(文档和用法见 MSDN)。它会生成一个文件,您应该通过此处描述的某些方式在运行时加载该文件。
  2. 使用 D3DCompileFromFile函数在运行时编译着色器。

每个变体都有优点和缺点。简而言之,在构建时进行预编译可以让您在运行时获得一些时间,而在运行时编译在开发阶段更加灵活和舒适(无需记住重新编译或使用构建后脚本),但更容易出错 -易于。自己选择。

于 2013-02-02T17:52:19.377 回答
1

HLSL 的代码看起来不错。如果您想从 VS2012 中编译它,请将“.fx”文件设置为使用 HLSL 着色器编译器进行构建。右键单击文件选择属性。然后选择 General 和 Item Type 应该设置为 HLSL 编译器。

如果您真的想使用 C++ 制作着色器,您可以查看 C++AMP 以查看它是否适合您的需求。

于 2013-02-02T22:18:32.270 回答
0

看起来编译器根本无法处理 HLSL……也许 VS2012 express 不支持 HLSL?

没有 C++ 编译器可以。它不应该由编译器处理。

您需要将其转换为资源并使用构建后脚本将其复制到 bin 目录中,并在运行时加载 HLSL。

另见:http ://www.directxtutorial.com/Lesson.aspx?lessonid=11-4-5

于 2013-02-02T17:41:27.403 回答