我目前正在为一个跨平台程序编写iOS后端,该程序的平台无关引擎以RGBA顺序将所有图形写入32位像素缓冲区。不使用字母字节。图形总是不透明的,所以我不需要alpha混合。
在我的CGContextRef
方法中,将这些像素缓冲区绘制并缩放到drawRect
的最有效选项是什么?像素缓冲区通常只有320x240像素,需要进行缩放才能完全填满我的视图尺寸,例如:非Retina iPad上1024x768,Retina iPad上2048x1536。这是一项繁重的工作,因此使用GPU可以做到最好。但是如何在不使用OpenGL的情况下强制iOS使用GPU进行绘制和缩放?
我尝试使用CGContextDrawImage()
,但这非常慢,可能是因为所有内容都是使用CPU完成的。
我还查看了CIImage
API,因为这些API显然是GPU优化的,但问题是CIImage
对象是不可变的,因此我必须不断创建新的我需要绘制的每个帧的CIImage
个对象也可能会破坏性能。
我当然可以选择OpenGL,但我想获得一些关于是否有更简单的解决方案来获得我想要的东西的反馈。
感谢您的任何想法!
答案 0 :(得分:1)
要回答我自己的问题,最简单的方法是使用CGImageRef
然后CGDataProviderCreateWithData()
从像素缓冲区创建CGImageCreate()
。然后可以将此CGImageRef
设置为视图的图层,如下所示:
view.layer.contents = (id) myImage;
如果UIView
设置为contentMode
(这是默认设置),则会自动缩放图像(使用GPU加速)以适合UIViewContentModeScaleToFill
的帧。
感谢Cocoa邮件列表中的David Duncan建议这个解决方案!