glTexSubImage2D 严重影响 gles 3.0 的帧率

glTexSubImage2D deeply affects frame rate on gles 3.0

我有一个图形引擎,它为每一帧写入大约 300 字节的数据 大约有六次 glTexSubImage2D 调用纹理(包括写入 mipmap)。 纹理是使用 GL_REDGL_R8 作为 format\internal 格式的未签名字节的纹理。 上传是通过像素缓冲区执行的,像素缓冲区本身已提前写入一帧。

无论 gles 正在绘制什么,这个相当小的操作都会对帧率产生深远的影响。

任何人都知道是什么导致了帧率下降,我该如何克服它?

更新: Solidpixels 的回答表明这是一个同步问题。在这种情况下,即使纹理修改与渲染完全不同步,我也会完全没问题。如果新数据只有一半,我可以告诉 gles 直接将数据写入纹理内存而不用关心吗?

注: 只有glTexSubImage2D影响帧率,glSubBufferData上传根本不影响。 在某些设备上,当我实际执行 glTexSubImage2D 关于我使用纹理绘制的时间时,似乎是数学,但不是所有设备。

我猜想在减慢速度的设备上,您仍然对飞行中的纹理有出色的参考,因此您迫使驱动程序创建幽灵分配。深度解释在这里:

https://community.arm.com/graphics/b/blog/posts/mali-performance-6-efficiently-updating-dynamic-resources