在OpenGL ES 2.0中仅更新纹理的水平子区域

时间:2013-08-09 15:10:10

标签: opengl-es opengl-es-2.0

此问题仅适用于Android上的OpenGL ES 2.0,但可能有使用常见GL功能的解决方法,因此我将其标记为“opengl”。

tl; dr:还有另一种在OpenGL ES 2.0中指定glPixelStorei(GL_UNPACK_ROW_LENGTH)的方法吗?因为根据spec,OpenGL ES 2.0中不存在GL_UNPACK_ROW_LENGTH

我有一个纹理,我经常通过调用glTexImage2D从一个独立更新的客户端内存的固定区域更新。在某些情况下,我知道只有图像的一个子区域发生了变化。我可以通过调用glTexSubImage2d并仅指定纹理的上半部分(例如)来限制更新的的数量。这可以显着提高性能。

但是当我试图限制更新的列数时(比如说我只想更新纹理的upper- left 象限),我注意到没有 stride < / strong> glTexSubImage2d的参数。因为对于我的应用程序,作为所有glTexImage2d / glTexSubImage2d的源的客户端内存区域具有图像的整个宽度,所以如果我调用glTexSubImage2d,我需要将其指定为步幅。

glPixelStorei(GL_UNPACK_ROW_LENGTH,stride)似乎是这样做的方法,但OpenGL 2.0 ES不支持GL_UNPACK_ROW_LENGTH。那么有没有办法在OpenGL ES 2.0中更新纹理的水平子区域?

1 个答案:

答案 0 :(得分:3)

在OpenGL ES 2.0中?不。但是它有an extension;我不知道它是如何广泛实施的。 ES 3.0完全支持它。