OpenGL 4.1 程序流水线制服
Posted
技术标签:
【中文标题】OpenGL 4.1 程序流水线制服【英文标题】:OpenGL 4.1 Program Pipeline Uniforms 【发布时间】:2014-11-28 16:05:49 【问题描述】:在 OpenGL 4.1 中,separate_shader_objects
扩展使其成为核心。
我知道我可以使用glGen,BindProgramPipeline()
创建/使用程序管道对象。但是如何为这个管道设置 Uniforms?
我读过glProgramUniform()
,但不是很了解。
我认为glProgramUniform
需要一个(可分离的)程序对象。
当我现在使用以前创建的程序对象作为程序管道的阶段,然后在此程序对象上调用 glProgramUniform
时,这会影响整个管道吗?还是我必须再次为每个程序对象调用glProgramUniform
?
【问题讨论】:
【参考方案1】:您是在暗示您的流水线中的各个阶段都有同名的制服吗?例如,与顶点阶段关联的程序有一个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.
这意味着您必须为管道中的每个程序对象设置统一,即使阶段共享通用名称。
【讨论】:
以上是关于OpenGL 4.1 程序流水线制服的主要内容,如果未能解决你的问题,请参考以下文章