我使用QGLWidget创建了一个openGL视图。使用Maya时遇到问题。正如您在视频中看到的那样,当我在Maya中单击并移动一个modelPanel时,QGLWidget会被破坏。我发现在我的QGLWidget上显示的是矩形矩形,而不是Maya。为什么会出现这个问题?
我尝试按照您的建议编辑我的代码。但是......它根本不会调用makeCurrent()和doneCurrent()。我希望当我点击我的maya modelPanel时,它可以向我发送消息,但事实并非如此。我错过了什么?对不起。
def makeCurrent(self):
import OpenGL.WGL as wgl
print "MAKE CURRENT!!!"
self.prevHDC = wgl.wglGetCurrentDC()
self.prevHRC = wgl.wglGetCurretnContext()
super(GLWidget, self).makeCurrent()
def doneCurrent(self):
import OpenGL.WGL as wgl
print "DONE CURRENT!!!"
super(GLWidget, self).doneCurrent()
wgl.wglMakeCurrent(self.prevHDC, self.prevHRC)
我就像上面写的一样。但它甚至从未显示出“消息”。
答案 0 :(得分:0)
很可能Qt和Maya的事件循环正在为处理事件而斗争。 Qt的paintGL做了正确的事情,并且无论何时调用OpenGL上下文都是当前的。但是,Maya没有,因此Maya的绘图命令最终会出现在OpenGL上下文中。
与Maya一起玩将会很棘手,因为它需要存储哪些OpenGL / DC上下文在切换和恢复之前处于活动状态,一旦完成一个自己的操作。您可能需要继承QGLWidget和QGLContext来执行此操作。
从QGLWidget派生,添加两个成员HDC m_prevHDC
和HRC m_prevHRC
,覆盖makeCurrent和doneCurrent
void QMyGLWidget::makeCurrent()
{
this->m_prevHDC = wglGetCurrentDC();
this->m_prevHRC = wglGetCurrentContext();
QGLWidget::makeCurrent();
}
void QMyGLWidget::doneCurrent()
{
QGLWidget::doneCurrent();
wglMakeCurrent(this->m_prevHDC, this->m_prevHRC);
}
然后从这个中间类派生你的实际GLWidget。