February 2, 2017

TL;DR: Retina iMac (4k/5k) owners can greatly improve the graphics performance of many applications (including REAPER) by setting the color profile (in System Preferences, Displays, Color tab) to "Generic RGB" or "Adobe RGB." (and restarting REAPER and/or other applications being tested)



I previously wrote in mid-2014 about the state of blitting bitmaps to screen on modern OS X (now macOS) versions. Since then, Apple has released new hardware (including Retina iMacs) and a couple of new macOS versions.



Much of that article is still useful today, but I made a mistake in the second update:

OK, if you provide a bitmap that is twice the size of the drawing rect, you can avoid argb32_image_mark_RGBXX, and get the Retina display to update in about 5-7ms, which is a good improvement (but by no means impressive, given how powerful this machine is). I made a very simple software scaler (that turns each pixel into 4), and it uses very little CPU.

old C2D iMac, 10.6: 350MPix/sec

mid-2012 RMBP 15", 10.12, Thunderbolt display (non-retina): 1500MPix/sec

mid-2012 RMBP 15", 10.12, built-in display (retina): 800MPix/sec

late-2015 Retina iMac 5k, 10.12: 192MPix/sec

mid-2012 RMBP 15", 10.12, built-in display (retina): 300MPix/sec

late-2015 Retina iMac 5k, 10.12: 152MPix/sec

old C2D iMac, 10.6: 350MPix/sec

mid-2012 RMBP 15", 10.12, Thunderbolt display (non-retina): 1500MPix/sec

mid-2012 RMBP 15", 10.12, built-in display (retina): 720MPix/sec

late-2015 Retina iMac 5k, 10.12: 200MPix/sec

Also please please please Apple optimize CGContextDrawImage()! I'm drawing an image with no alpha channel and no interpolation and no blend mode and the inner loop is checking each pixel to see if the alpha is 255? I mean wtf. You can do better. Hell, you've done way better. All that "new" Retina code needs optimizing!