Q100409:如何使用 MARI _VERSION 将旧版自定义着色器迁移到 Mari 4.1v1 或更高版本

关注

症状

Mari 3.4v1/4.1v1 及更高版本中,某些用户创建的自定义着色器可能会遇到以下编译错误:

0(2754) : error C7011: implicit cast from "uvec4" to "uvec2"

本文解释了您可能会看到该错误的原因,以及作为开发人员如何调整自定义着色器来解决此问题,并确保您的着色器文件可以跨Mari版本使用。

原因

从 3.4v1/4.1v1 开始,我们扩展了Mari中的纹理标记系统以使用uvec4。
Mari的早期版本使用uvec2 ,这意味着为uvec2编写的一些自定义 GLSL 着色器可能会由于纹理标记从uvec2更改为uvec4而失败。

不幸的是,我们没有办法定义Mari 3.3v1/3.4v1 和Mari 4.0x/4.1x(及更高版本)之间的纹理令牌版本更改,并且当此类着色器无法在较新的Mari版本。

解决

Mari 3.4v1/4.1v1 中,我们在 GLSL 代码中引入了新的MARI _VERSION 定义选项,以解决该问题。此更新允许用户为其自定义着色器维护单个代码库,而无需在Mari版本之间复制其着色器代码。

这可以在用户的Shader中实现,如下所示,其中:

- M代表主版本号
- mm - 次要版本号用 0 填充,以及
- RR——发行号用0填充


例如:

#if (MARI_VERSION >= MmmRR) 
// This code is compiled only on Mari M.mmvRR or newer.
...
#endif

要在Mari 3.4v1 中实际应用此功能,需要在 Shader 文件中定义代码,如下所示:

#if (MARI_VERSION >= 30401)
// This code is compiled only on Mari 3.4v1 or newer.
#endif


要在Mari 4.1v1 中实际应用此功能,需要在 Shader 文件中定义代码,如下所示:

#if (MARI_VERSION >= 40101)
// This code is compiled only on Mari 4.1v1 or newer.
#endif

    我们很遗憾听到

    请告诉我们