> I think I’ve explored this as far as I can go. Here’s my wrap-up, for what 
> it’s worth to anyone. Not a lot, I expect.
> 
> The conclusion is, I don’t think it can be done with the current graphics 
> APIs with any worthwhile performance. Here’s my summary of why that is…


> … This last step is where it all falls down, because this one call, to 
> CGContextDrawImage, takes a whopping 67% of the overall time for drawRect: to 
> run, and normal drawing doesn’t need this call (this is testing in a ‘light’ 
> view, but nevertheless, it makes the view very noticeably laggy).


If all the drawRect is doing is making a single call to CGContextDrawImage then 
it should rightly be 100% of the time, so that measure isn’t interesting on its 
own. :)



> 1. Make one big bitmap instead and create a context for each tile... Even if 
> this worked, it would still require an image draw, but at least it would be 
> just one, not one per tile.


You must be passing in incorrect values. It will work. I’ve done this before 
and I just tested it now and I’m not getting any assertions like you are.

If your backing is 1600 x 800, and you want a context for the left half and 
another for the right half both have bytesPerRow values of 1600 * 4, a width of 
800, and heigh of 800. The only thing that is different is the buffer offset. 
The first one is at 0 and the second at 800 * 4. It may feel odd because the 
second context specifies that the last row is 1600 * 4 bytes wide, but thanks 
to initial offset and real buffer size is only 800 * 4 wide, but CG won't try 
to read or write to those bytes in rows that are after width * bytesPerPixel, 
so it really is safe. 


The single CGContextDrawImage in drawRect: should end up essentially being a 
memcpy which will be ridiculously fast, as long as your contexts/backing all 
use the same color space and bitmap layout as the view’s context’s backing. 
Definitely make sure they’re using the same color space because converting is 
really slow.




And as a general note separate to the threading, are you sure you can’t cache 
individual objects’ images? (And this just gets into trying to replicate 
layers, really, though, and with or without layers you’d have a memory usage 
concern to analyze.)


--
Seth Willits


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to