如果我使用glTexImage2D
调用来创建具有如下缓冲区的纹理:
glTexImage2D(GL_TEXTURE_2D /* target*/,
0 /* level */,
GL_RGBA /* internal format */,
width /* w */,
height /* h */,
0 /* border */,
GL_RGBA /* format (RGBA 4)*/,
GL_UNSIGNED_BYTE /* type */,
buffer /* pixel buffer */);
我可以修改缓冲区并期望纹理随之改变吗?
或者是在通话结束后纹理结束了吗?
答案 0 :(得分:6)
不,OpenGL会创建它自己的纹理副本,因此你不能在不复制它的情况下修改它(但这也意味着你可以重用或释放缓冲区。
答案 1 :(得分:2)
如果要更改纹理的一部分,通常会使用glTexSubImage2D
。请注意,此函数需要新数据是连续的;因此,如果您只在纹理中间更改了一个小方块,那么在原始缓冲区中进行更改并不是最佳选择,因为这样您就必须为您更改的行发送所有像素只受影响的列。