假设以下着色器:
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;着色器将它们混合在一起。
所以,对"做东西"进行一些预处理。着色器我可以使用参数解决我的问题,但对我来说会更复杂一些(因为每个"做东西"着色器会有不同的函数签名)。如果我可以创建这些未定义的大小统一,那将更容易。
另外,我愿意接受建议......