I see some pixel gaps on the outside circle. I assume that is from using gline calls. Switching to triangle primitives might help fill those in. Otherwise, I think it looks mighty good. For speed, you may want to switch the outside circle for a pre-rendered image (assuming you don't need it to resize). Keep up the cool code.