2011-01-26 89 views
0

我正在使用缓冲区来将非常大的图片(屏幕大小)加载到单个表面。 这个想法是一帧一帧地动画大量的图片(超过视频内存可以存储)。关于在IOS opengl上快速交换纹理ES

我已经创建了一个用于制作缓冲区的代码,但是我在加载位图的时候遇到了很大的问题。

我的代码工作的:

  1. 我加载本地的位图文件路径的数组。

  2. 我(想)我preload我的位图数据在内存中。我用一个线程在NSArray中为我的所有图片存储一个CGImageRef(40时刻)

  3. 在第二个线程中,代码看另一个NSArray以确定是否为空,如果是空的,我通过创建纹理将我的cgimageRef绑定到视频内存。 (为此使用共享组) 该数组存储20个纹理名称的地址,并直接由openGL用于绘制表面。这个数组是我的(缓冲区)

当我玩我的动画,我从我的“缓冲区”和我的线程(在点3)加载一个新纹理删除旧纹理。

它的工作很棒,但速度非常慢,几秒钟后动画就会缺失。

你能帮我优化我的代码吗?

回答

1

取决于设备和iOS版本glTexImage只是很慢。 随着iOS 4的性能进行了改进,这样就可以期望在第二代设备体面的速度也和体面我的意思是每帧的一个或两个纹理上传... 总之: 使用glTexSubImage和重用已经创建的纹理标识。 此外,使用glTex(Sub)图像时,请尝试使用未用于在该帧中进行渲染的纹理ID。我的意思是:添加一些纹理ID双缓冲。 我假设你在同一个线程中完成所有GL的工作,如果不改变的话。