CoreGraphics 替代方案?

Posted

技术标签:

【中文标题】CoreGraphics 替代方案?【英文标题】:CoreGraphics Alternative? 【发布时间】:2010-12-16 23:01:58 【问题描述】:

我正在寻找一个 2D 渲染库来替代 iPhone 上的 CoreGraphics。我的应用程序中的所有内容都非常动态,这使得将内容拆分为图层和动画相当困难。

我对 OpenGL 很熟悉,现在渲染就是这样实现的。不过,如果我不必担心 OpenGL 中的低级内容,一切都会变得更容易扩展,开发也会变得更快(而且我的代码看起来会更整洁:D)。

我更喜欢 C++ 而不是 Objective-C,所以如果你知道任何用于渲染的 C++ 库,那就太好了。我也可以使用 C。基于路径的渲染,如 CoreGraphics 或 javascript Canvas API,将是有益的。 Cairo 可以在 iPhone 上使用吗?

我实际上一直在开发我自己的 2D 渲染器,即使我最终没有在我的应用程序中使用它,我也可能会发布它,因为我喜欢使用它。 iPhone 是否支持模板缓冲区?我可以进行多边形三角剖分,或者使用 GLU 的 tesselation 库,但从长远来看,模板缓冲区可以保证大量工作。

编辑:另外,我之前使用 CoreGraphics 在这个应用程序中实现了渲染,但它并没有达到我想要的帧速率。我做了一些研究,人们建议不要将 CoreGraphics 用于不断重绘屏幕的事情。有人说 CoreGraphics 不使用 GPU,也有人说这是某种缓存机制。从那以后我就避免了。

【问题讨论】:

出于好奇,您不想使用 Core Graphics 的原因是什么?只是它会分层吗? 哦,对了。我忘了把它放在我的帖子里...... 是的,Core Graphics 会渲染在 GPU 上缓存为矩形纹理的矢量图。这个渲染过程相当慢,但我认为你不会发现有人在性能上击败 Apple,缺少完全在 OpenGL ES 中工作的库。作为权宜之计,你有没有看过 CAShapeLayer,它可以动画矢量图:tumbljack.com/post/179975074/… ? @Brad 我以前使用过 CAShapeLayers,但不适用于我的应用程序的这一部分。也许我很快会试一试。我担心的是很多对象会在每帧的基础上改变颜色,我担心在我的问题中出于相同的原因在每一帧调用 setNeedsDisplay。由于不可预测的物理特性,我可能也无法使用动画,但我不知道这会对性能产生什么影响。我想这可能无关紧要。 【参考方案1】:

MonkVG 是一种类似于 OpenVG 1.1 的矢量图形 API 实现,目前使用 OpenGL ES 后端,应该与任何支持 OpenGL ES 2.0 的硬件兼容,包括大多数 iosandroid 设备。

这是一个开源 BSD 许可项目,正在积极开发中。在撰写本文时,它处于非常早期的预发布状态(实现的功能非常少)。欢迎贡献者和赞助商。

可以在GitHub上找到http://github.com/micahpearlman/MonkVG

此外,还有一个基于 MonkVG 的 SVG 和 SWF(flash)渲染器:

MonkSVG MonkSWF

【讨论】:

以上是关于CoreGraphics 替代方案?的主要内容,如果未能解决你的问题,请参考以下文章

CoreGraphics 库在 iOS4 而不是 iOS3 中泄漏?

CoreGraphics,内存释放,返回值

iOS绘图框架CoreGraphics分析

iOS 动画篇 CADisplayLink与CoreGraphics实现动画

iOS开发CoreGraphics核心图形框架之一——CGPath的应用

CoreGraphics - 用笔划剪裁渐变