OpenGL ES 2:制服和属性

dem*_*emi 8 opengl-es

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

kus*_*sma 17

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

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

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