OpenGL / OpenGL ES更新纹理

时间:2013-06-06 14:00:17

标签: opengl opengl-es opengl-es-2.0

我需要从纹理中更改部件,但要注意当前的纹理数据,而不是仅仅替换它。

我尝试使用glTexSubImage2D,但它取代了当前的数据,却没有让我能够在当前数据和新数据之间指定某种操作。

一种解决方案是在内存中缓存纹理数据并在使用glTexSubImage2D之前进行混合操作并使用glTexSubImage2D结果,但这只会浪费内存......

桌面OpenGL和OpenGL ES 2.0是否有任何共同的功能可以让我这样做?

1 个答案:

答案 0 :(得分:2)

当然glTexSubImage2D会覆盖以前的所有数据并且在CPU上执行它根本不是一个选项(它不会浪费内存,但更重要的是时间)。

你可以做的是使用framebuffer object (FBO)。将目标纹理作为FBO的颜色渲染目标附加,然后通过渲染纹理四边形在其上方渲染新数据。可以通过视口设置或四边形大小和位置来调整子区域。对于实际操作,您可以使用现有的OpenGL混合功能(如果足够的话),或者为其使用自定义片段着色器(但在这种情况下,您不能只在旧的数据上呈现新数据,但是将新旧数据用作纹理并将其渲染为全新的纹理,否则您无法访问着色器内的旧数据。