我有一个GLvoid* data,其中包含整个图像,该图像在我的程序中会定期更新。我使用glTexImage2D使用此数据在GPU上初始化纹理。

我想根据需要使用glTexSubImage2D更新部分纹理。 documentation for glTexSubImage2D这样描述GLvoid* pixels参数:


  指定指向内存中图像数据的指针。


期望什么“图像数据”?我可以提供整个GLvoid* data,还是期望缓冲区仅包含要复制的数据?

如果期望部分数据,是否有替代方法提供整个缓冲区?

最佳答案

您可以通过电话提供整个图像数据

glTexSubImage2D( target, level, 0, 0, W, H, format, type, pixels);


W和H是纹理的宽度和高度,整个纹理将被复制,像素为W * H数组。或者您只能在通话中提供修改后的数据

glTexSubImage2D( target, level, offset_x, offset_y, w, h, format, type, pixels);


其中w和h是修改数据的高度和高度,因此offset_x + w
编辑:

glPixelStorei( GL_UNPACK_ROW_LENGTH, W);
glPixelStorei( GL_UNPACK_SKIP_PIXELS, offset_x);
glPixelStorei( GL_UNPACK_SKIP_ROWS, offset_y);

glTexSubImage2D( target, level, offset_x, offset_y, w, h, format, type, pixels);


像素为W * H

08-04 22:21