glTexSubImage2D 严重影响 gles 3.0 的帧率
glTexSubImage2D deeply affects frame rate on gles 3.0
我有一个图形引擎,它为每一帧写入大约 300 字节的数据
大约有六次 glTexSubImage2D
调用纹理(包括写入 mipmap)。
纹理是使用 GL_RED
和 GL_R8
作为 format\internal 格式的未签名字节的纹理。
上传是通过像素缓冲区执行的,像素缓冲区本身已提前写入一帧。
无论 gles 正在绘制什么,这个相当小的操作都会对帧率产生深远的影响。
任何人都知道是什么导致了帧率下降,我该如何克服它?
更新:
Solidpixels 的回答表明这是一个同步问题。在这种情况下,即使纹理修改与渲染完全不同步,我也会完全没问题。如果新数据只有一半,我可以告诉 gles 直接将数据写入纹理内存而不用关心吗?
注:
只有glTexSubImage2D
影响帧率,glSubBufferData
上传根本不影响。
在某些设备上,当我实际执行 glTexSubImage2D
关于我使用纹理绘制的时间时,似乎是数学,但不是所有设备。
我猜想在减慢速度的设备上,您仍然对飞行中的纹理有出色的参考,因此您迫使驱动程序创建幽灵分配。深度解释在这里:
我有一个图形引擎,它为每一帧写入大约 300 字节的数据
大约有六次 glTexSubImage2D
调用纹理(包括写入 mipmap)。
纹理是使用 GL_RED
和 GL_R8
作为 format\internal 格式的未签名字节的纹理。
上传是通过像素缓冲区执行的,像素缓冲区本身已提前写入一帧。
无论 gles 正在绘制什么,这个相当小的操作都会对帧率产生深远的影响。
任何人都知道是什么导致了帧率下降,我该如何克服它?
更新: Solidpixels 的回答表明这是一个同步问题。在这种情况下,即使纹理修改与渲染完全不同步,我也会完全没问题。如果新数据只有一半,我可以告诉 gles 直接将数据写入纹理内存而不用关心吗?
注:
只有glTexSubImage2D
影响帧率,glSubBufferData
上传根本不影响。
在某些设备上,当我实际执行 glTexSubImage2D
关于我使用纹理绘制的时间时,似乎是数学,但不是所有设备。
我猜想在减慢速度的设备上,您仍然对飞行中的纹理有出色的参考,因此您迫使驱动程序创建幽灵分配。深度解释在这里: