我最近一直在玩Direct3D 11并且由于缺乏关于API基础知识的文档(例如简单的几何渲染)而感到沮丧。稀疏文档带来的混淆之一是(明显的)远离着色器效果的使用。
在D3D11中,所有效果(.fx)支持已从D3DX库中删除,并被埋没在难以找到(当然稀疏文档)共享源库中。所包含的示例都不使用它,而是直接编译HLSL文件。所有这一切都告诉我,微软正试图让人们停止使用效果文件格式。真的吗?是否有任何类型的文件说明了这一点?我很好,无论哪种方式,但多年来他们一直在推广.fx格式,所以他们突然决定放弃它似乎很奇怪。
答案 0 :(得分:5)
许多专业游戏和图形开发人员不使用Direct3D中的效果界面,许多领先的游戏引擎也不使用它们。相反,自定义材质/效果子系统构建在较低级别的着色器和图形状态管理工具之上。这允许开发人员通过公共资产管理管道来执行诸如Direct3D和OpenGL的目标。
答案 1 :(得分:4)
我处于完全相同的位置,即使是使用D3DX11CreateEffectFromMemory的最简单的样本,Googling就像疯了一样,我也得出结论:.fx文件支持不是他们的最高prio。虽然奇怪的是他们已经添加了EffectGroup概念,如果他们不希望我们使用它,那么这是11的新概念。
我使用新的反射API玩了一点,所以看起来很容易将你自己的函数组合起来设置变量等,本质上是创建你自己的Effect-class,下一步就是要看看他们通过API创建渲染状态块有什么支持。能够直接在.fx文件中编辑它们是非常好的,所以希望这样的东西仍然存在(或者,在最坏的情况下,我可以从Effect11代码中删除该部分)。
答案 2 :(得分:3)
主要问题是HLSL编译器团队不推荐使用所需元数据编译Effects 11着色器所需的fx_5_0配置文件。运行时为shared-source,但编译器不是。在最新的D3DCompiler(#47)中,它会发出警告。对于DirectX 11.1和11.2中的某些较新的语言方面,fx_5_0从未更新,但对Direct3D 11“按原样”工作。
第二个问题是您需要在运行时使用D3DCompile API来使用Effects 11.由于D3DCompile对于Windows 8.0和Windows Phone 8.0的Windows应用商店应用来说是“仅开发”,因此它不是一个选项。从技术上来说 可以在今天使用Windows 11和Windows 8.1的Windows应用商店应用,因为D3DCompile#47是操作系统的一部分,包括对fx_5_0的'不赞成/原样'编译器支持,但不鼓励这种用途。
大部分DirectX SDK示例和所有Windows应用商店示例都避免使用效果11.我发布了一些使用它的Win32桌面示例GitHub。
所以简而言之,是的,你不鼓励使用它,但如果你能与免责声明一起生活,你现在还可以。
答案 3 :(得分:1)
在DirectX SDK中提供了一个效果运行时作为示例,它应该能够帮助您使用.fx文件。 查看目录:%DXSDK_DIR%\ Samples \ C ++ \ Effects11
答案 4 :(得分:0)
http://msdn.microsoft.com/en-us/library/ff476261(v=VS.85).aspx
这表明它可以采用着色器或效果。
http://msdn.microsoft.com/en-us/library/ff476190(v=VS.85).aspx
另外,着色器和效果有什么区别?