我有一块GLvoid* data
,其中包含整个图像,该图像会在整个程序中定期更新。我使用glTexImage2D
使用此数据初始化GPU上的纹理。
我想使用glTexSubImage2D
根据需要更新部分纹理。 documentation for glTexSubImage2D描述了GLvoid* pixels
参数:
指定指向内存中图像数据的指针。
什么"图像数据"这是期待的吗?我可以提供整个GLvoid* data
,还是期望仅包含要复制的数据的缓冲区?
如果它需要部分数据,是否有替代方法来提供整个缓冲区?
答案 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