首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试在C++中编译基本HLSL着色器时出现错误C2146

尝试在C++中编译基本HLSL着色器时出现错误C2146
EN

Stack Overflow用户
提问于 2013-02-03 01:37:19
回答 3查看 404关注 0票数 0

我刚刚开始学习使用C++的HLSL的基础知识,按照书中的教程,第一个基本着色器是:

代码语言:javascript
复制
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?

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-03 01:41:27

all...maybe VS2012

看起来编译器不能处理HLSL不支持HLSL?

没有C++编译器会这样做。它不应该由编译器处理。

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

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

票数 0
EN

Stack Overflow用户

发布于 2013-02-03 01:52:19

HLSL不是C++。应使用着色器编译器编译着色器,并使用C++编译器编译C++ -请勿混合。编译HLSL有两个选项。

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

每一种变体都有其优缺点。简而言之,在构建时预编译可以在运行时获得一些时间,而在运行时编译在开发阶段更灵活、更舒适(不需要记住重新编译或使用构建后脚本),但更容易出错。你自己选吧。

票数 2
EN

Stack Overflow用户

发布于 2013-02-03 06:18:32

代码看起来很适合HLSL。如果要从VS2012内部编译它,请将".fx“文件设置为使用HLSL着色器编译器进行构建。右键单击文件,选择属性。然后选择General并将Item Type设置为HLSL编译器。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14664562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档