【问题标题】:Updating only a horizontal subregion of a texture in OpenGL ES 2.0在 OpenGL ES 2.0 中仅更新纹理的水平子区域
【发布时间】:2013-08-12 16:11:04
【问题描述】:

这个问题是针对 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 并仅指定纹理的上半部分(例如)来限制更新的行数。这会显着提高性能。

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

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

【问题讨论】:

  • 顺便说一句,即使更新整个纹理,您仍然应该使用glTexSubImage2D 而不是glTexImage2D(前提是您的纹理已经正确调整大小),因为后者将重新分配整个纹理,而前者只会更新其数据。使用glTexSubImage2D 时,您的性能提升可能部分来自这一事实,而不是您仅更新子区域这一事实。

标签: opengl-es opengl-es-2.0


【解决方案1】:

在 OpenGL ES 2.0 中?没有。不过有an extension;我不知道它的实施范围有多广。并且 ES 3.0 完全支持它。

【讨论】:

  • 好的,谢谢尼科尔。我只是想确保我没有错过任何东西,因为我是 OpenGL 的新手。
猜你喜欢
  • 2011-05-19
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 2012-04-08
相关资源
最近更新 更多