c++ - 在 DirectX 11 中使用效果器的优点或缺点

标签 c++ directx-11

我一直在使用 ID3D11VertexShader 和其他着色器,方法是从 fx 文件中单独加载它们。我已经看到使用 Effects 一次加载所有内容,它看起来更有条理,因为您可以简单地设置一个效果,它可以根据 fx 文件中的技术设置所有着色器。这看起来容易多了,但我听说在使用 Effects 时存在性能问题。这是真的?如果是这样,使用一个比另一个有什么优势吗?

最佳答案

使用 Effects 11 的主要缺点是 HLSL 编译器中对它的支持已弃用,并且可能会在未来的更新中删除。

Effects 11 的最新版本在 CodePlex 上并且有一个 discussion thread关于这个话题。

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

然而,大多数 AAA 游戏都发现很难获得良好的性能并且难以定制。 FX9 和 FX10 都是“黑匣子”,但 FX11 您已将源代码共享到运行时部分。

至于替代品,DirectX Tool Kit BasicEffect 'stock' 着色器是一种有用的学习和快速原型(prototype)制作工具,对于那些熟悉 XNA Game Studio 4 的人来说,它是相同的着色器。你可以看到大部分 Direct3D 11 Samples不要使用 Effects 11。

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

更新:Effects 现在托管在 GitHub

关于c++ - 在 DirectX 11 中使用效果器的优点或缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26479513/

相关文章:

c++ - 段错误 : 11 when using dynamic 3D array parameter

c++ - 是否可以对 dll 进行更改,同时保持与预编译的可执行文件的兼容性?

directx - 如何在 DirectX11 中使用翻转模式消除锯齿?

c++ - 编译器不识别实现文件中的类成员函数类型,但在接口(interface)文件中识别

c++ - 我输出中的 D3D11 INFO 行是什么意思?

c++ - CMake编译项目具有多个主干和共享功能

c++ - 链接 : Static vs Dynamic

c++ - 苹果操作系统 : using detachNewThreadSelector method inside a C++ class method

c++ - rastertek 教程中初始化 Direct3D 失败

c# - 使用C#和EasyHook在DX11游戏(CryEngine)中绘制叠加图