我应该向glTexSubImage2D提供完整或部分图像吗?

时间:2017-02-22 08:11:19

标签: c++ opengl

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

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

  

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

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

如果它需要部分数据,是否有替代方法来提供整个缓冲区?

1 个答案:

答案 0 :(得分:1)

您可以通过电话

提供整个图像数据
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 < W和offset_y + y < Y.像素是w * h数组。

编辑:

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