我正在使用缓冲区来将非常大的图片(屏幕尺寸)加载到单个表面。 这个想法是逐帧动画很多图片(比视频内存可以存储的更多)。
我已经创建了一个用于创建缓冲区的代码,但是我对位图的加载时间有很大的问题。
我的代码可以解决这个问题:
我加载了一个本地位图文件数组路径。
我(想)我在内存中预加载我的位图数据。我正在使用一个线程将NSIrray中的CGImageRef存储到我的所有图片中(暂时为40)
在第二个线程中,代码看起来是另一个NSArray,用于确定是否为空,如果为空,则通过创建纹理将我的cgimageRef绑定到视频内存。 (使用sharedgroup) 这个数组存储了20个纹理名称的地址,并且它可以直接通过openGL用于绘制表面。这个数组是我的(缓冲区)
当我播放动画时,我从“缓冲区”删除旧纹理,我的线程(在第3点)加载一个新纹理。
它的功能非常好,但速度非常慢,几秒后,动画就缺乏了。
你能帮我优化我的代码吗?
答案 0 :(得分:1)
根据设备和iOS版本,glTexImage很慢。 iOS 4的性能得到了提升,因此您可以在第二代设备上获得不错的速度,并且体面的意思是每帧一个或两个纹理上传... 无论如何: 使用glTexSubImage并重用已创建的纹理ID。 此外,在使用glTex(Sub)Image时,请尝试使用未在该帧中渲染的纹理ID。我的意思是:添加一些纹理ID-doublebuffering。 我认为你在同一个线程中做了所有的GL事情,如果没有改变的话。