在OpenGL 4.1中,separate_shader_objects
扩展使其成为核心。
我知道我可以使用gl{Gen,Bind}ProgramPipeline()
创建/使用程序管道对象。但是如何为这条管道设置制服呢?
我已经阅读了glProgramUniform()
,但并不理解。
我认为glProgramUniform
采用(可分离的)程序对象。
当我现在使用先前创建的程序对象作为程序管道的阶段,然后在此程序对象上调用glProgramUniform
时,这会影响整个管道吗?或者我是否必须再次为每个程序对象调用glProgramUniform
?
答案 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.
这意味着您必须为管道中的每个程序对象设置制服,即使这些阶段共享通用名称。