OpenGL ES 2:制服和属性

时间:2010-02-24 11:17:47

标签: opengl-es

众所周知,统一和属性是GPU中的寄存器。我的问题是当不同的程序绑定时会发生什么?先前设置的制服和/或属性指针的标准保证是否会被重新加载,或者我是否需要手动重新加载它们?我想创建缓存系统。对我来说,当程序反弹时,属性不会重新加载(是吗?),制服呢? GL ES驱动程序是否为我重新加载它们的值?

1 个答案:

答案 0 :(得分:17)

不,众所周知,制服和属性是GPU中的寄存器。事实上,至少在一个广泛部署的OpenGL ES 2.0 GPU中是错误的。

除非明确初始化,否则均匀为零。统一值是程序对象之后的状态。换句话说,如果在给定程序对象上设置制服,则可以依赖于使用相同程序对象时保留的值,但是您不能依赖于给定位置的制服被保留在多个程序对象中。实际上,执行此操作的OpenGL ES实现将违反规范。这不是未定义的行为。

属性指针是全局上下文状态,您可以依赖于这些在同一OpenGL ES上下文的调用之间保留。当前属性值(通过glVertexAttribute * -functions设置)

也是如此