OpenGl4.3中切换shader中的子程序的方法
在OpenGl编程宝典第二章中,讲解了如何生成一个完整的shader程序并加载到显卡的方法,这方面的资料网上非常多,就不赘述了。
在书中提到了一种如何切换多个子程序的方法,下面就来分析一下如何使用这个功能:
1 定义同类型的多路子程序的关键字
subroutine returnType subroutineType(type param, …);
这里返回值和函数名称可以使任何合法的名字,只有函数参数类型要求严格一致2 使用刚才定义的subroutineType作为想要实现的动态调用函数的子集名称,类似的语句如下:
subroutine (subroutineType) returnType functionName(…)
这里的returnType应与subroutineType定义时一致,functionName为程序中定义的子程序名称,而参数的类型应与之前定义一致- 3 指定一个uniform的变量来作为控制选择函数的”指针“:
subroutine uniform subroutineType variableName;
此后的此子集的函数将会依照variableName指定的函数工作
下面是书上的示例:
subroutine vec4 LightFunc(vec3); // Step