I think the proper solution is to add gamma correction APIs to Surface Flinger and get that upstreamed so eventually all recent Android phones will support it without root. At least, that was my idea when I looked into it. IIRC OpenGL ES 2 was missing some OpenGL proper feature that would have made the gamma correction easy.