0

我的 iOS 应用程序在 opengles 视图中绘制 2D 曲线。渲染场景非常昂贵(最多可能需要 1-2 秒),这意味着,AFAIK,我无法更改缩放、重绘和重新渲染以进行缩放增量更改(由于捏合-飞涨)。我目前直接在渲染到屏幕的缓冲区上绘制。

我认为我可以实现缩放的一种方法是以给定的分辨率渲染到纹理,然后用该纹理的一部分渲染一个四边形(可能以不同的比例和翻译)。我的猜测是它将使我当前使用的内存增加一倍(如果我当然将纹理保持在与屏幕相同的分辨率)。有人可以确认吗?有没有另一种方法可以在不重绘的情况下进行缩放,同时又不会使图形内存使用量增加一倍?

现在,如果我想保持良好的质量,我将不得不以不同的分辨率重新渲染。我最初的想法是“手动”创建具有例如 2 个级别的 mipmap(1 个纹理用于​​ 100-150% 缩放,另一个用于 150-200% 缩放)。这一次,我将有 1 个缓冲区 + 2 个纹理。我当然可以在平移时重新渲染,但我认为用户体验不会很好。关于如何从用户体验和/或记忆的角度改进它的任何想法?

4

1 回答 1

1

由于您已经需要很长时间来绘制场景,我建议您创建平铺。您可以在加载时以不同的分辨率绘制场景并将输出保存到一些图像(将图像文件保存到某个临时目录中)。使用这种方法,您应该有最小的内存消耗,并且用户体验应该很好。

如果您这样做,您还应该考虑是否甚至想使用 openGL 来呈现场景,因为您有一些非常好的方法可以在图像视图(滚动视图)上呈现大图像。这样做你实际上可以跳过所有 GL - UIView 绑定和呈现。您可以将所有 GL 工作移动到某个单独的线程,这意味着如果场景应该更改,您可以在后台执行此操作,从而允许用户不间断地处理当前场景。此外,如果您希望用户在场景之间“交换”,您可以保存它们并重复使用它们,而不会对性能产生任何影响。

于 2014-01-10T08:00:03.277 回答