在早期的GLSL里面,要实现函数分支选择,一般是使用if-else分支选择,虽然简单但也显得有些粗暴。
从GL 4.0开始,内核支持着色器子程序(subroutine)功能,这个功能有点类似函数指针,需要先顶一一个函数类型,然后实现N个这个类型的函数对象,最后使用Uniform的方式让用户指定运行时调用的函数。
#version 430 core
out vec4 fColor;
subroutine vec4 userColor();
subroutine (userColor) vec4 Red()
{
return vec4(1.0, 0.0, 0.0, 1.0);
}
subroutine (userColor) vec4 Green()
{