Before someone says "but OpenGL supports mutil-threading". No it doesn't. It supports multi-threaded worker threads for the drivers, but it does not support multiple threads communicating to the same context.
OpenGL supports multi-threading, just not when you give it that limitation. A context can only be active in one thread, so create multiple contexts, setup sharing so they can all use the same display lists, textures, and such, one thread draws to the frame buffer, the others upload textures, draw to frame buffer objects which becomes textures, whatever so all the data is ready for the drawing thread when it, you know, goes to draw. As far as I know modern graphics cards have lots of GPU cores, but they are all working on the same operation, so no matter how many threads you have feeding it draw commands, they are all getting serialized anyway.