在DirectX 11中使用效果的优缺点

时间:2014-10-21 05:32:48

标签: c++ directx-11

我一直在使用ID3D11VertexShader和其他着色器,将它们与fx文件分开加载。我已经看到使用Effects来一次加载所有东西,它看起来更有条理,因为你可以简单地设置一个效果,可以根据fx文件中的技术设置所有着色器。这似乎更容易,但我听说使用效果时存在性能问题。这是真的?如果是这样,使用一个优于另一个有什么好处吗?

1 个答案:

答案 0 :(得分:2)

使用Effects 11的主要缺点是不推荐在HLSL编译器中对它的支持,并且很可能在将来的更新中将其删除。

效果11的最新版本位于CodePlex,此主题有discussion thread

与尝试使用“原始”着色器相比,历史上的效果一直是一种更容易学习和原型设计的工具。它使编写有趣的样本变得更容易,但它不是强制性技术。它使创建Direct3D着色器内容的某些方面更容易,使绑定动态和数据驱动,并且各种编辑器支持(现在有点过时)标准注释语法(SAS),以使“着色器可调整”可由艺术家在工具中调整他们熟悉。在同一文件中创建不同的硬件级别回退也是Effects的一个有用优势。

然而,大多数AAA游戏都发现难以获得良好的性能并且难以定制。 FX9和FX10都遭遇“黑匣子”,但FX11你有共享来源于运行时部分。

至于替代品,DirectX Tool Kit BasicEffect'stock'着色器是一种有用的学习和快速原型制作工具,对于熟悉XNA Game Studio 4的人来说,它是相同的着色器。您可以看到大多数Direct3D 11 Samples都不使用效果11。

不建议将效果11用于新应用程序,但它可用。 Windows 8.0和Windows Phone 8.0应用程序的Windows应用商店应用程序无法使用它,因为您必须在运行时提供D3DCompile API,FX11依赖它来进行元数据反射。它在技术上适用于Windows 8.1和Windows Phone 8.1应用程序的Windows应用商店应用程序,以及Win32桌面应用程序。有些人也设法将它用于Xbox One。

更新:效果现已托管在GitHub