一个glTexImage2D问题

时间:2011-07-16 20:30:56

标签: c opengl opengl-es

如果我使用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 */);

我可以修改缓冲区并期望纹理随之改变吗?

或者是在通话结束后纹理结束了吗?

2 个答案:

答案 0 :(得分:6)

不,OpenGL会创建它自己的纹理副本,因此你不能在不复制它的情况下修改它(但这也意味着你可以重用或释放缓冲区。

答案 1 :(得分:2)

如果要更改纹理的一部分,通常会使用glTexSubImage2D。请注意,此函数需要新数据是连续的;因此,如果您只在纹理中间更改了一个小方块,那么在原始缓冲区中进行更改并不是最佳选择,因为这样您就必须为您更改的行发送所有像素只受影响的列。