GLSL中的二阶函数?

Ale*_*ain 6 struct glsl pass-by-reference higher-order-functions

我正在寻找一种方法来使用函数作为GLSL中另一个函数的参数.在常规C中,可以通过将函数指针作为函数参数传递来进行模拟.似乎其他语言(如HLSL)现在提供了处理高阶函数等高级构造的方法,或者可以通过巧妙地使用HLSL结构来模拟它们.不幸的是我现在一直坚持GLSL,我找不到任何方法来模拟高阶函数.目前(4.2)GLSL真的不可能吗?还是我错过了一些聪明的伎俩?

我正在努力实现的常见例子:

int f(someType f2, int i) {
    return f2(i);
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*las 5

我正在寻找一种将函数用作GLSL中另一个函数的参数的方法。

简短的答案:您不能。

在GLSL中,与这种功能最接近的是着色器子例程。而且这仅允许外部OpenGL API选择要使用的子例程,而不是着色器本身。

因此,只需要switch/case声明就可以了。