2012-05-05 62 views
5

简称:GLSL可重用/共享函数,共享常量(OpenGL ES 2.0)?

我可以定义每个着色器可以使用的功能? 或者我必须定义每个着色器?


原委:

所以坡道需要为每着色器定义一次和功能应该是定义一下子,每个着色器可以放心地使用。

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

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

回答

9

您可以像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. 当你与glLinkProgram链接程序SHADER1您将与glAttachShader两个着色器编程 - COMMON和SHADER1。因此,您可以从一个着色器调用getCommonValue函数。

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

+0

哇,听起来不错,我会试试看。 – Geri