【问题标题】:about fast swapping texture on IOS opengl ES关于IOS opengl ES上的快速交换纹理
【发布时间】:2011-01-31 23:51:23
【问题描述】:

我正在处理将非常大的图片(屏幕尺寸)加载到单个表面的缓冲区。 这个想法是逐帧动画化很多图片(超过视频内存可以存储的)。

我已经创建了一个用于制作缓冲区的代码,但我对位图的加载时间有一个大问题。

我的代码是这样工作的:

  1. 我加载了一组本地位图文件路径。

  2. 我(认为)我将位图数据预加载到内存中。我正在使用一个线程在 NSArray 中为我的所有图片存储一个 CGImageRef(暂时为 40)

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

当我播放动画时,我会从“缓冲区”中删除旧纹理,并且我的线程(在第 3 点处)会加载新纹理。

效果很好,但速度很慢,几秒钟后,动画就没有了。

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

【问题讨论】:

    标签: optimization memory-management opengl-es


    【解决方案1】:

    取决于设备和 iOS 版本 glTexImage 只是很慢。 iOS 4 的性能得到了改进,因此您也可以在第二代设备上获得不错的速度,而且不错的意思是每帧上传一到两个纹理... 反正: 使用 glTexSubImage 并重用已创建的纹理 ID。 此外,在使用 glTex(Sub)Image 时,请尝试使用在该帧中未用于渲染的纹理 ID。我的意思是:添加某种纹理 ID 双缓冲。 我假设你在同一个线程中完成所有 GL 的工作,如果不改变它的话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多