2016-11-23 95 views
2

我正在为跨平台程序编写iOS后端,该程序的平台无关引擎按照RGBA顺序将其所有图形写入32位像素缓冲区。不使用字节字节。图形总是不透明的,所以我不需要阿尔法混合。在没有OpenGL的情况下在iOS上进行硬件加速缩放

在我的drawRect方法中,将这些像素缓冲区绘制到我的CGContextRef的最高效选项是什么?像素缓冲区通常只有320x240像素,需要缩放以完全填充我的视图的尺寸,例如非Retina iPad上的1024x768和Retina iPad上的2048x1536。这是一大堆工作,所以最好使用GPU来完成。但是,如何强制iOS使用GPU绘制和缩放而不使用OpenGL?

我试过使用CGContextDrawImage(),但这确实很慢,可能是因为一切都是使用CPU完成的。

我也有看看CIImage的API,因为这些显然GPU优化,但问题是,CIImage对象是不可改变的,所以我不得不为每一帧我需要提请不断创造新的CIImage目的将可能会导致性能下降。

我当然可以使用OpenGL,但我想获得一些关于是否有更简单的解决方案来获得我想要的东西的反馈。

感谢您的任何想法!

+0

我觉得下面的链接会告诉你一些提示。 http://stackoverflow.com/questions/6520320/images-vs-core-graphics和https://robots.thoughtbot.com/designing-for-ios-graphics-performance和https://lobste.rs/s/ ckm4uw/a_performance-minded_take_on_ios_design /评论/ itdkfh。 – beshio

回答

1

要回答我自己的问题,最简单的方法是使用CGDataProviderCreateWithData()然后CGImageCreate()从像素缓冲区简单创建CGImageRef。然后,该CGImageRef可以设置为视图的层,像这样:

view.layer.contents = (id) myImage; 

的图像将被自动地(与GPU加速)如果contentMode设置为UIViewContentModeScaleToFill(这是缩放以适合UIView的帧默认)。

感谢Cocoa邮件列表中的David Duncan提出的解决方案!

相关问题