Opengl 统一行为

Posted

技术标签:

【中文标题】Opengl 统一行为【英文标题】:Opengl uniform behaviour 【发布时间】:2015-01-07 15:44:34 【问题描述】:

我注意到一些在 opengl 文档中没有很好解释的事情。如果我错了,请纠正我。

    如果程序不是当时 opengl 使用的程序,则无法设置制服的值。这会产生错误。

    如果您在程序 A 中设置了制服的值,然后切换到程序 B,然后再切换回程序 A,则该值保持不变。这个靠谱吗?

    无法为当时未使用的程序设置统一值。有解决办法吗?

【问题讨论】:

【参考方案1】:

    Direct State Access extension(包含在核心 4.5 中)允许您使用 glProgramUniform*EXT 将统一设置为非绑定程序,您需要指定该程序。

    制服按程序存储,

    见 1

【讨论】:

顺便说一下,glProgramUniform* 实际上是 OpenGL 4.1 中的核心(它是与GL_ARB_separate_shader_objects 一起引入的),并且在提供GL_EXT_direct_state_access 的旧实现中也可用。

以上是关于Opengl 统一行为的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL中的统一块

跨多个着色器的 OpenGL 统一

opengl:将数组类型加载到统一缓冲区对象

统一值和 OpenGL 着色器

Opengl 未定义行为

OpenGL / GLSL - 统一块数据值不正确