iOS上的快速纹理数据更新

时间:2013-03-02 17:12:14

标签: iphone opengl-es-2.0

我需要在每一帧更新一个纹理的纹理数据。有没有办法快速做到这一点?对我来说最好的选择与GL_APPLE_client_storage类似,但iOS不支持。显而易见的解决方案是每帧调用glTexImage2D,但这会复制数据,而且我必须在内存中保留2次相同的纹理。

2 个答案:

答案 0 :(得分:0)

纹理缓存(在iOS 5.0中添加)提供与iOS上GL_APPLE_client_storage相同的功能。在初始创建时,它们确实会触发glTexImage2D(),但我相信后续更新的行为与Mac的GL_APPLE_client_storage相同。

它们在处理相机帧时提供了特别的性能提升,因为AV Foundation针对这种情况进行了优化。我在相机的this answer内详细描述了它的工作原理。对于原始数据,您可以创建自己的CVPixelBufferRef用于此目的,然后写入其内部内容以直接更新纹理。

你必须要小心,因为你可以在渲染场景时覆盖纹理数据,导致撕裂和其他伪影。

答案 1 :(得分:0)

也许您应该使用glTexSubImage2D来更新纹理。见here