症状
在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
我们很遗憾听到
请告诉我们