在" uber着色器"有时需要排除一些计算来配置材料属性。例如,在phong照明着色器中,并不总是需要法线贴图,并且必须以某种方式排除所有相关代码。
对于glsl着色器预处理,可以使用#ifdef
指令并在着色器代码之上附加一些#define
指令,具体取决于必须排除着色器代码的哪个部分。这种代码风格看起来有点冗长,并引入了额外的复杂性和要求。
对于我的glsl程序,当解析glsl顶点和片段着色器源并使用依赖于它们的所有代码行从程序中删除一些指定的标识符(属性,统一,变量和局部变量名称)时,我使用另一种预处理方法。
我的方法可以接受吗,它有名字吗?或者有一些更正确的解决方法?