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