OpenGL Encadeado com Problema QGLWidgets Compartilhado com o Qt 5.1

Eu uso dois QGLWidgets. Um para carregar texturas e um para renderizar, mas não está funcionando.

Eu usei a seguinte explicação dehttp://blog.qt.digia.com/blog/2011/06/03/threaded-opengl-in-4-8/

Tópico de Upload de Textura O upload de muitas (ou grandes) texturas é tipicamente uma operação cara devido à quantidade de dados sendo enviados para a GPU. Novamente, essa é uma daquelas operações que podem bloquear desnecessariamente seu thread principal. Em 4.8 você pode resolver esse problema criando um par de QGLWidgets compartilhados. Um dos widgets é atualizado em um thread separado, mas nunca é visível na tela. O encadeamento principal informa ao encadeamento de upload quais imagens carregar e o encadeamento de upload simplesmente chama bindTexture () em cada uma dessas imagens e, em seguida, notifica o encadeamento principal quando cada um termina para que possa ser desenhado para a tela.

Com Qt 4.8 com MinGW funciona bem, mas agora eu uso o Qt 5.1 com MSVC. Estou recebendo um erro quando quero tornar o widget no segmento atual:

Não é possível fazer QOpenGLContext atual em um segmento diferente

Eu entendo o erro, mas como posso corrigi-lo. Quando eu não definir o widget atual eu não posso carregar texturas (freezed na função bindTexture ()). Eu também estou me perguntando por que funciona com minha versão antiga do QT. Quando o erro aparece eu posso pressionar "ignorar erro" e o programa carrega as texturas de qualquer maneira.

Aqui está um código de amostra:

Carregando texturas:

GLContext::GLContext(QWidget *parent, QGLWidget *myDisplayWidget) :
  QGLWidget(parent,myDisplayWidget)
{
}

...

GLContext* myTextureWidget = new GLContext(this,myDisplayWidget);

...

void TextureLoadingThread::run()
{    
    makeCurrent(); //Here is the bug!
    QImage *im = new QImage(filename);
    GLuint textid = myTextureWidget->bindTexture(*im, GL_TEXTURE_2D, GL_RGBA);
}

EDITAR:

Quando eu mover o contexto do myTextureWidget para o segmento funciona, mas então eu recebo o erro makeCurrent da API quando a GUI irá construir (o rastreamento de pilha disse na função QLineEdit :: setPlaceHolderText em QT5Widgetsd). Quando eu movo o myTextureWidget para o thread alguns segundos após a janela principal ter sido mostrada, tudo funciona bem. Mas como posso saber quando qt terminou todas as coisas de construção GUI? Eu desenho a GUI para um QGraphicsView com uma viewport QGLWidget.

myTextureWidget->context()->moveToThread(myTextureLoadingThread);

questionAnswers(2)

yourAnswerToTheQuestion