CoreAnimation - 获取绘制内容纹理的最快方法

Posted

技术标签:

【中文标题】CoreAnimation - 获取绘制内容纹理的最快方法【英文标题】:CoreAnimation - Fastest way to obtain a texture of the drawn content 【发布时间】:2014-11-22 22:38:28 【问题描述】:

我正在使用 CoreAnimation 将内容绘制到屏幕上(例如 CAShapeLayer、CAReplicatorLayer、CATextLayer)。

在屏幕上获取绘制内容纹理的最快方法是什么? (比在我的场景中最多需要 2 秒的 renderInContext 快得多)

我设备上的某处存在一个带有此绘制内容的渲染缓冲区,可能最好的解决方案是能够访问它。

【问题讨论】:

您是否对使用私有 API 感兴趣(即您是否希望您的应用程序出现在商店中)? 我希望我的应用程序最终能在商店中出现,但我正在寻找任何方法让它开始工作。所以如果你知道有一个私有 API 来做这件事,我很高兴知道! 【参考方案1】:

您可以作为 iosurface 访问帧缓冲区并从中创建图像(这是 iOS 上的私有 API)。这可能是最快的解决方案。

您应该能够通过搜索“iOS IOSurface”来拼凑一些东西(因为它是私有的,您无法真正阅读任何有关它的官方文档(但是它在 OS X 上是公开的,所以那里有一些文档主要是相关的)。This questions 似乎基本上是正确的,并且看起来是一个很好的起点。

但是,如果您想在商店中发布应用程序,这对您没有帮助,而且我认为它不会为您提供任何可以在商店中重复使用的代码。

【讨论】:

谢谢,看起来很有希望! (无论如何,我一直在与 CARenderServer / CA 性能问题进行长期斗争,请参阅我的其他问题......所以这件事可能会给予更多控制!)但是......我从哪里获得这些 IOSurface 标头?我发现我应该从 Mac Headers 复制它们,但 Yosemite 上没有它们。 是的,对,我看到了这个;)但那是针对 Mac 而不是 iOS。我也在那里找到了框架,但是如何为 iOS 获取它?我再谷歌一下!

以上是关于CoreAnimation - 获取绘制内容纹理的最快方法的主要内容,如果未能解决你的问题,请参考以下文章

绘制分层 OpenGL ES 内容的最佳方式是啥?

从 Image 中获取纹理并在 QQuickFramebufferObject 中绘制它。并非所有实例都被渲染

哪个框架可用于在 Android 上绘制复杂的交互式 UI 层次结构? (就像 iOS 上的 CoreAnimation)

Unity Shader 获取深度纹理和法线纹理

GLSL索引绘图并设置纹理案例

FBO:渲染到纹理,绘制渲染纹理时纹理映射错误