0

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

我尝试使用glTexSubImage2D,但它替换了当前数据,而没有给我指定当前数据和新数据之间某种操作的可能性。

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

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

4

1 回答 1

2

当然,glTexSubImage2D覆盖任何以前的数据并在 CPU 上执行它根本不是一种选择(它不仅会浪费内存,而且更重要的是,时间)。

您可以做的是使用帧缓冲区对象 (FBO)。您将目标纹理附加为 FBO 的颜色渲染目标,然后通过渲染带纹理的四边形在其上渲染新数据。子区域可以通过视口设置或四边形大小和位置进行调整。对于实际操作,您可以使用现有的 OpenGL 混合功能(如果足够),或者使用自定义片段着色器(但在这种情况下,您不能只在旧数据之上渲染新数据,而是必须使用新旧数据都作为纹理并将这些东西渲染成一个全新的纹理,否则您无法访问着色器内的旧数据)。

于 2013-06-06T15:22:56.443 回答