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