2012-06-07 41 views
1

我编码的Qt(4.8.2)(VS 2008)的图形应用程序,使用QGLWidget来绘图,因此OpenGL的。这是应用程序的简短描述:这是一个物理模拟。它由2个线程组成。主要应用线程处理现场绘图(QGLWidget来绘图子类)和事件。计算线程正在循环计算模拟的下一步。 现在......我想与使用模拟光标(拖动对象或类似的东西)进行交互。自从我决定不这样做在场景智能拍摄光线与一些空间空间分解(也许我将不得不毕竟做)一起,我想计算线程像这样的东西执行:OpenGL的多线程,与glGet *问题导致

glGetDoublev(GL_MODELVIEW_MATRIX, modelviewMatrix); 
    glGetDoublev(GL_PROJECTION_MATRIX, projectionMatrix); 
    glGetIntegerv(GL_VIEWPORT, viewport); 
    gluProject(px, py, pz, modelviewMatrix, projectionMatrix, viewport, &x, &y, &z); 

在为了得到画面[X; Y]所述的坐标[PX;吡啶; PZ]点和在计算的模拟的下一步骤中使用它们。那么,原来的主线程总是得到正确modelviewMatrix和projectionMatrix阵列,但是当这是由计算线程执行的,它得到垃圾矩阵数据。我想查询的OpenGL,锁定任何OpenGL的行动,以便矩阵应该是不变之前很多事情...运行makeCurrent(),但没有成功。我想知道,这甚至有可能吗?绘制场景后,OpenGL是否保留矩阵?有没有办法让这段代码线程安全?

回答

0

不要在主线程GL查询,将结果传递到您的计算线程。

+0

谢谢:-D不幸的是我不知道我做了什么,使其工作那段时间,但你的建议是相当即期。我完全忘记了这个问题,随机回到了个人资料 - 所以我在这里标记为正确的答案。 – dzuremar