传递具有多个大小的GLSL数组参数

传递具有多个大小的GLSL数组参数,glsl,Glsl,我定义了一个GLSL函数来计算一个数字数组的平均值,但是这个函数“重载”了,无法处理多个大小的数组。在这里,同一个函数用不同的参数定义了两次: float average(float[4] array) { float sum = 0.0; for(int i = 0; i < array.length(); i++){ sum += array[i]; } return sum/float(array.length()); } //this is red

我定义了一个GLSL函数来计算一个数字数组的平均值,但是这个函数“重载”了,无法处理多个大小的数组。在这里,同一个函数用不同的参数定义了两次:

float average(float[4] array) {
   float sum = 0.0;
   for(int i = 0; i < array.length(); i++){
    sum += array[i];
   }
   return sum/float(array.length());
}

//this is redundant: the same function is defined with a different size parameter
float average(float[5] array) {
   float sum = 0.0;
   for(int i = 0; i < array.length(); i++){
    sum += array[i];
   }
    return sum/float(array.length());
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    float a1[] = float[](1.0, 1.0, 1.0, 1.2, 1.1);
    float a2[] = float[](1.0, 1.0, 1.0, 1.2);
    float av = average(a1)+average(a2);
    fragColor = vec4(av,0.0,0.0,0.0);
}
浮点平均值(浮点[4]数组){
浮动总和=0.0;
对于(int i=0;i

是否可以定义一个接受任意大小数组参数的函数,而不是为每个大小定义不同的函数?

Related:@3Dave它不需要是动态的。它只需要接受任意大小的固定大小的参数。想到的最简单的事情是选择一个上界并传入数组以及长度。我没有办法在手机上测试,但很简单。我不确定编译器是否允许它。相关:@3Dave它不需要是动态的。它只需要接受任意大小的固定大小的参数。想到的最简单的事情是选择一个上界并传入数组以及长度。我没有办法在手机上测试,但很简单。我不确定编译器是否会允许它。