【问题标题】:OpenGL 4.1 Program Pipeline UniformsOpenGL 4.1 程序流水线制服
【发布时间】:2014-11-28 16:05:49
【问题描述】:

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

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

我读过glProgramUniform(),但不是很了解。

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

【问题讨论】:

    标签: opengl glsl shader


    【解决方案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.
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-31
      • 2012-07-14
      • 2011-12-13
      • 1970-01-01
      • 2012-06-04
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多