OpenGL 4.1程序管道制服

时间:2014-11-28 16:05:49

标签: opengl glsl shader

在OpenGL 4.1中,separate_shader_objects扩展使其成为核心。

我知道我可以使用gl{Gen,Bind}ProgramPipeline()创建/使用程序管道对象。但是如何为这条管道设置制服呢?

我已经阅读了glProgramUniform(),但并不理解。

我认为glProgramUniform采用(可分离的)程序对象。 当我现在使用先前创建的程序对象作为程序管道的阶段,然后在此程序对象上调用glProgramUniform时,这会影响整个管道吗?或者我是否必须再次为每个程序对象调用glProgramUniform

1 个答案:

答案 0 :(得分:3)

您是否暗示管道中的各个阶段都有同名的制服?例如,与顶点阶段关联的程序具有uniform float time,与片段阶段关联的程序具有uniform float time

考虑到可分离着色器的重点是 将各个阶段连接在一起,没有共享制服的概念。每个阶段都有自己的离散命名空间。

当您提到的扩展程序首次提出时,已解决此问题:

3.  Do different program objects currently used by different shader
    types share a single name space for uniforms?

    RESOLVED:  No, different program objects have their own separate
    name space for uniforms and each has locations specific to its
    unique program object.

这意味着您必须为管道中的每个程序对象设置制服,即使这些阶段共享通用名称。