如何编写可重用的glsl代码?

bob*_*uba 8 code-reuse preprocessor glsl include

我的着色器通常共享许多相同的功能.例如,漫反射/镜面反射照明的计算.我想写一次,然后在不同的着色器中重用代码.

Glsl不了解文件,也不支持类似c的#include预处理器指令.

我知道glsl支持从多个cstrings编译源代码,但是你怎么知道要包含哪些cstrings?你实现了自己的包含版本吗?或者你为每个着色器创建某种元文件?

JAr*_*Are 5

在大型项目中,着色器通常在第一次运行时组装(或者在更改图形选项时),因此它们将包括所有供应商特定的功能,并针对用户机器和设置进行了优化.不仅是着色器,还有渲染管道的某些阶段.
您可以将GLSL视为PHP脚本为响应请求而呕吐的HTML\CSS\JavaSript代码.并且您可以在循环中使用与抽样,代码注入(例如纹理查找量)相同的技术.它对平面设计师也有好处,因为它们通过参数化 - 支票簿,输入字段等对着色器源进行简单控制,并且可以为独特的情况生成独特的着色器.