使用glTexImage2D更新OpenGL中的纹理



将像素缓冲区传递到纹理的唯一方法是glTexImage2DglTexSubImage2D吗?

目前,我在设置函数中使用了传递null作为缓冲区的glTexImage2D,然后在渲染循环中,我在每次迭代中使用新的缓冲区数据调用glTexSubImage2D

但是,知道纹理不会改变任何属性(如尺寸),是否有更有效的方法将实际像素数据传递给渲染纹理?

在现代OpenGL中,有4种不同的方法来更新2D纹理:

  1. glTexImage2D——速度最慢的一个,重新创建内部数据结构。

  2. glTexSubImage2D-速度稍快,但无法更改图像的参数(大小、像素格式)。

  3. 使用FBO渲染到纹理-完全在GPU上更新纹理,非常快。有关更多详细信息,请参阅此答案:https://stackoverflow.com/a/10702468/1065190

  4. 像素缓冲区对象PBO-用于从CPU到GPU的快速上传,OpenGL ES.不支持(目前)

最新更新