GLSL 中作为参数的函数

Ylf*_*aue 3 opengl glsl

是否可以在 OpenGL 着色语言中将一个函数作为其他函数的参数传递?如果是的话,那该怎么办呢?

Bad*_*Zen 5

简单地说:不。函数不是 GLSL/Cg 中的一流类型(或根本不是类型),并且您的硬件无法“透视”指针等 - 着色器的源代码作为文本传递到 OpenGL VM 并在那里进行编译。

(编辑以反映 @datenwolf 对我的错误的更正 - 他说 GL 虚拟机的驱动程序组件进行编译。)

  • 源文本**不**由 GPU 解析和编译。这一切都发生在驱动程序中。事实上,NVidia 驱动程序首先将 GLSL 源代码转换为 `ARB_..._program` 或 `NV_..._program` 伪汇编源代码(使用内置的、修改过的 Cg 编译器),然后该文本进行第二次编译首先将其转换为 IR 代码,最后将其转换为 GPU 二进制文件。然后仅将此二进制文件上传到 GPU。 (6认同)