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