我有一个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