Opengl es GLSL uber着色器预处理

Opengl es GLSL uber着色器预处理,opengl-es,glsl,webgl,Opengl Es,Glsl,Webgl,在“uber着色器”中,有时需要排除某些计算以配置材质属性。例如,在phong lighting着色器中,法线贴图并不总是必需的,必须以某种方式排除所有相关代码 对于glsl着色器预处理,可以使用#ifdef指令,并根据必须排除的着色器代码部分,在着色器代码顶部附加一些#define指令。这样的代码风格看起来有点冗长,并引入了额外的复杂性和需求 对于我的glsl程序,当解析glsl顶点和片段着色器源并从程序中剪切一些指定的标识符(属性、统一、变化和局部变量名)以及依赖于它们的所有代码行时,我使用

在“uber着色器”中,有时需要排除某些计算以配置材质属性。例如,在phong lighting着色器中,法线贴图并不总是必需的,必须以某种方式排除所有相关代码

对于glsl着色器预处理,可以使用
#ifdef
指令,并根据必须排除的着色器代码部分,在着色器代码顶部附加一些
#define
指令。这样的代码风格看起来有点冗长,并引入了额外的复杂性和需求

对于我的glsl程序,当解析glsl顶点和片段着色器源并从程序中剪切一些指定的标识符(属性、统一、变化和局部变量名)以及依赖于它们的所有代码行时,我使用另一种预处理方法


我的方法可以接受吗?它有名字吗?或者有更正确的方法来解决这个问题?

没有“正确”的方法。你想要什么就有什么。许多程序从片段中汇编GLSL源代码,执行
source.replace(…)
,不管需要做什么。TL;DR:你的方法很好,你的方法是“自动代码生成”(“自动代码删除”)的一种变体,就我而言,这很好。继续努力!