I’m looking for a way to use a function as an argument to another function in GLSL. In regular C, it can be simulated by passing a function pointer as a function argument. It also seems that other languages (like HLSL) now provide ways to deal with high-level constructs like higher-order functions, or can simulate them with clever use of HLSL structures. unfortunately I’m stuck with GLSL for now, and I can’t find any way to simulate higher-order functions. Is it really impossible in current (4.2) GLSL ? Or am I missing some clever trick ?
common example of what I’m trying to achieve :
int f(someType f2, int i) {
return f2(i);
}
Short answer: you can’t.
The closest thing to this kind of functionality you’ll get in GLSL is shader subroutines. And that only allows the external OpenGL API to select which subroutine to use, not the shader itself.
So just do the
switch/casestatement and get it over with.