我想声明一个统一数组而不在一个着色器对象中指定它的大小,而在另一个着色器对象中声明它

时间:2013-01-31 23:35:46

标签: opengl glsl shader

假设以下着色器:

uniform float input[]
float do_stuff(int index) {
    return input[index];
}

此代码使用某些数据执行某些操作,而不考虑input的大小。 但是,该程序将与另一个着色器链接,该着色器将知道大小并调用它:

void do_stuff(int);

uniform float input[3];
void main() {
    gl_FragColor = vec4(do_stuff(input[0]),
                        do_stuff(input[1]),
                        do_stuff(input[2]),
                        1);
}

显然,这段代码很愚蠢,我只是创建它演示了我需要的东西。我的真实情况是:"做东西的数据"着色器访问不是预定义的,每个"做东西"着色器将拥有它拥有的数据。此外,"做东西"着色器无法知道它将被调用多少次,因此它的输入是具有未定义大小的数组。另一方面,"来电者" shader将在运行时生成,它确切地知道" do_stuff"着色器将使用和使用多少。

实际上,"做东西"着色器是用户提供的,而"来电者是#34;着色器将它们混合在一起。

所以,对"做东西"进行一些预处理。着色器我可以使用参数解决我的问题,但对我来说会更复杂一些(因为每个"做东西"着色器会有不同的函数签名)。如果我可以创建这些未定义的大小统一,那将更容易。

另外,我愿意接受建议......

0 个答案:

没有答案