我使用多个绘制调用,着色器和UBO渲染多个对象。目前,我正在努力将所有不需要的UBO与glBindBufferBase和bufferId = 0解除绑定,就像人们对glBindBuffer(target,0)
所做的那样现在我的问题是,这真的值得付出努力吗?无论如何,所有需要的UBO都会在调用调用之前反弹,并且着色器仅使用所需的UBO。是否会出现稳定性或性能方面的问题,或者一旦UBO被破坏等?
问候
现在我的问题是,这真的值得努力吗?
在发行版中,否;它纯粹是忙碌的工作,将浪费CPU性能和电池寿命,而没有任何功能上的好处。直接将状态从“旧状态”更改为“新状态”,而无需先通过零反弹。同样适用于其他事物(采样器,启用等)。
但是,如果要调试渲染错误以控制绘制之间的状态泄漏,通常在开发版本中使用强制为零的调试选项通常会很有用。
是否会出现稳定性或性能方面的问题,或者一旦UBO被破坏等?
仅在没有剩余绑定处于活动状态时才释放资源,因此您确实需要记住在删除资源时清除绑定(但希望您已经有了一些明智的资源跟踪,因此您应该在引擎中“知道”该信息) 。