10

短的:

我可以定义一个每个着色器都可以使用的函数吗?或者我必须为每个着色器定义它?


整个故事:

因此,斜坡需要为每个着色器定义一次,并且应该一次性定义所有着色器可以安全使用的函数。

我有算法,问题是共享函数,并在 GLSL 中定义常量。

这可能吗?或者我必须将函数复制到每个着色器中?至少有一些预编译选项吗?

4

1 回答 1

16

您可以像在 C 中一样执行此操作 - 您在头文件中声明函数并在通用 C 文件中定义它。

在 GLSL 中,您需要执行以下操作:

  1. 在某些着色器(字符串)中定义函数(让我们称之为 COMMON):

    float getCommonValue() { return 42; }
    
  2. 在所有要使用此函数的着色器中,您只需声明并使用它(我们称之为 SHADER1):

    float getCommonValue();
    void main() { gl_Color = vec4(getCommonValue(), 0, 0, 0); }
    
  3. glCompileShader您一起编译着色器时,只编译一次 COMMON 着色器并将着色器 GLuint 存储在某处

  4. 当您将程序与glLinkProgramSHADER1 链接时,您将附加到带有glAttachShader两个着色器的程序 - COMMON 和 SHADER1。因此,您将能够getCommonValue从一个着色器调用函数到另一个着色器。

  5. 您可以为不同的 sahder 程序(SHADER1、SHADER2、...)多次重复使用 COMMON 着色器 GLuint 值。

于 2012-05-05T19:57:02.563 回答