glTexImage2D和glTexSubImage2D是将像素缓冲区传递给纹理的唯一方法吗?
目前,我在设置函数glTexImage2D中使用,将 null 作为缓冲区传递,然后在渲染循环中,我在每次迭代时使用新的缓冲区数据调用glTexSubImage2D 。
但是知道纹理不会改变任何属性(例如尺寸),有没有更有效的方法将实际像素数据传递给渲染纹理?
glTexImage2D和glTexSubImage2D是将像素缓冲区传递给纹理的唯一方法吗?
目前,我在设置函数glTexImage2D中使用,将 null 作为缓冲区传递,然后在渲染循环中,我在每次迭代时使用新的缓冲区数据调用glTexSubImage2D 。
但是知道纹理不会改变任何属性(例如尺寸),有没有更有效的方法将实际像素数据传递给渲染纹理?
在现代OpenGL
有 4 种不同的方法来更新 2D 纹理:
glTexImage2D
- 最慢的一个,重新创建内部数据结构。
glTexSubImage2D
- 快一点,但不能改变图像的参数(大小,像素格式)。
渲染到纹理FBO
- 完全在 GPU 上更新纹理,非常快。有关更多详细信息,请参阅此答案:https ://stackoverflow.com/a/10702468/1065190
像素缓冲区对象PBO
- 用于从 CPU 到 GPU 的快速上传,在 OpenGL ES 上(尚不支持)。