I have run into an issue that I am afraid is going to be very hard to resolve, at least as far as google searching has show me.

I have an Editor utility using Qt which creates multiple OpenGL contexts for different tools in the editor, their is a 'World' editor which hosts a QGLWidget of my games scene, and a material editor which has a 'preview' QGLWidget which displays the currently built material.

I have been able to get context sharing working fine, I use gDEBugger to see the OpenGL contexts, and they are sharing Textures, VBO's, shaders etc. But one stipulation has me wondering how this will work, you can't share Vertex Array Objects between contexts. As I understand it, Vertex Array Objects are the standard now, and we should really be using them as opposed to using VBO's without VAO's.

I have thought of a 2 ways to get around this but I don't exactly think either are ideal

  1. Generate the VAO's before each render, but this seems to defeat the purpose of the VAO's
  2. use a std::map to map a GL context to a VAO, if the current context does not have this VAO, then generate one for the said context, this seems bad and may not even work.

What other solutions are there that I am overlooking? I have also considered somehow having everything in one context and using seperate viewports for each required opengl widget, which I hoped would be possible but I am having no luck figuring it out using Qt and it's QGLWidget.

Edit

Ok, so I have tried to get this working but it is giving me alot of grief, I tried 2 different ways and they are both causing me errors.

1) I create a QGLContext, and then pass it to my QGLWidgets when they are being created.

QGLFormat    fmt = QGLFormat();
QGLContext*  pContext = new QGLContext(fmt);

QGLWidget*   pWidget1 = new QGLWidget(pContext);
someLayout->addWidget(pWidget1);

QGLWidget*   pWidget2 = new QGLWidget(pContext);
another
Edit
Report