Fre*_*man 10 performance core-graphics ipad retina-display
在我的iPad应用程序中,我正在渲染到屏幕外的位图,然后将位图绘制到屏幕上.(这是因为我想重新使用现有的位图渲染代码.)在iPad 2上,这就像一个魅力,但在带有Retina显示屏的新iPad上,绘制位图非常慢,即使它的分辨率仍然是相同.
为了绘制位图,我们使用常规的Quartz 2D函数:CGImageCreate
使用CGDataProviderCreateWithData
32位RGBA格式创建的数据提供程序kCGImageAlphaNoneSkipLast
.在UIView
显示位图的中drawRect:
,我们使用CGContextDrawImage
它来将其绘制到返回的上下文中UIGraphicsGetCurrentContext
.
请注意,我甚至没有尝试以双倍分辨率绘制:现在我的分辨率与我在iPad 2上使用的分辨率相同.看起来CoreGraphics在内部将像素加倍,然后将其发送到GPU即使CGImage
我正在制作的内容应该可以直接传递给GPU.有任何想法吗?
Kur*_*vis 15
看起来CoreGraphics内部将像素加倍,然后将其发送到GPU,
差不多.更准确(至少在精神上):
CGBitmapContext
以设备像素为单位显示视图边界的大小CGImage
到上下文中CGImage
从位图上下文中创建一个我正在制作的CGImage应该可以直接传递给GPU.
如果您希望这样做,您需要通过删除上面的一些步骤告诉系统这样做.
(UIKit,CoreAnimation和CoreGraphics之间没有任何链接可以像您期望的那样提供"快速路径".)
最简单的方法是制作一个UIImageView
,并将其image
设置为UIImage
包装你的CGImageRef
.
或者,设置你view.layer.contents
的CGImageRef
.(并确保不覆盖-drawRect:
,不打电话-setNeedsDisplay
,并确认contentMode
是不是 UIViewContentModeRedraw
.更容易只需使用UIImageView
.)
归档时间: |
|
查看次数: |
4001 次 |
最近记录: |