• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Hardware-accelerated scaling on iOS without OpenGL
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Hardware-accelerated scaling on iOS without OpenGL


  • Subject: Re: Hardware-accelerated scaling on iOS without OpenGL
  • From: David Duncan <email@hidden>
  • Date: Fri, 25 Nov 2016 10:29:16 -0500

The fastest method without OpenGL is to work with CGImage directly and assign the image as the contents of a CALayer.

This will engage CoreAnimation to use the hardware to scale the image, but is still not quite as fast as OpenGL for the same task.

Roughly you'll want to look at CGImageCreate and CGDataProviderCreate (there are a number of variants of the latter). Much sample code will try using CGBitmapContextCreateImage because it looks easier, but this will take a kernel hit for each frame and mark the memory copy-on-write which will cause you to take another hit when the memory gets written to.

--
David Duncan @ My iPhone

> On Nov 25, 2016, at 10:22 AM, Andreas Falkenhahn <email@hidden> wrote:
>
> I'm currently writing an iOS backend for a cross-platform program whose
> platform-independent engine writes all of its graphics into 32-bit pixel
> buffers, in RGBA order. The alpha byte isn't used. The graphics are always
> opaque so I don't need alpha blending.
>
> What is the most efficient option to draw and scale these pixel buffers to
> my CGContextRef inside my drawRect method? The pixel buffers are usually
> only 320x240 pixels and need to be scaled to completely fill my view's
> dimensions, e.g. 1024x768 on non-Retina iPads and 2048x1536 on Retina iPads.
> This is a whole lot of work so it's best done using the GPU. But how can I
> force iOS to draw and scale using the GPU without using OpenGL?
>
> I've tried using CGContextDrawImage() but this is really slow, probably because
> everything is done using the CPU.
>
> I've also had a look at the CIImage APIs because these are apparently GPU
> optimized but the problem is that CIImage objects are immutable so I'd have to
> constantly create new CIImage objects for each frame I need to draw which will
> probably kill the performance as well.
>
> I could go with OpenGL of course but I'd like to get some feedback on whether
> there is an easier solution to get what I want here.
>
> Thanks for any ideas!
>
> --
> Best regards,
> Andreas Falkenhahn                          mailto:email@hidden
>
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
>
> This email sent to email@hidden

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden


  • Follow-Ups:
    • Re: Hardware-accelerated scaling on iOS without OpenGL
      • From: Andreas Falkenhahn <email@hidden>
References: 
 >Hardware-accelerated scaling on iOS without OpenGL (From: Andreas Falkenhahn <email@hidden>)

  • Prev by Date: Hardware-accelerated scaling on iOS without OpenGL
  • Next by Date: Re: Hardware-accelerated scaling on iOS without OpenGL
  • Previous by thread: Hardware-accelerated scaling on iOS without OpenGL
  • Next by thread: Re: Hardware-accelerated scaling on iOS without OpenGL
  • Index(es):
    • Date
    • Thread