0

我在主代码(Android)和着色器中都使用了一个常量:

// Main code
private static final int XSIZE=16;
private float[] sinusoida = new float[XSIZE];

// shader
const int XSIZE = 16;
uniform float u_SinArray[XSIZE];

这两个常量指的是同一个东西,所以很明显,最好共享它们并在你更改第一个常量时自动更改一个常量。那可能吗?

4

1 回答 1

1

如果您询问 Java 代码和着色器代码是否可以从字面上访问同一个变量,那么不能。特别是如果您使用的是预编译着色器,答案是否定的。如果您在 Java 代码中编译着色器,那么您可以简单地使用 Java 常量来构建着色器脚本(但这似乎不是您正在做的事情)。另一种方法是将另一个统一传递给着色器,而不是使用常量。假设它不会让你超过着色器中制服的最大数量,这可能是去 IMO 最安全的方法。

编辑:对于未来的读者,不要介意统一的建议。Uniforms 在执行期间是隐式常量,但在编译时不是,这对于数组声明是必需的。

于 2013-09-06T03:16:56.630 回答