首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtOpenGL -共享的OpenGL上下文

QtOpenGL -共享的OpenGL上下文
EN

Stack Overflow用户
提问于 2018-12-07 21:45:26
回答 1查看 413关注 0票数 1

我有一个Qt4 + OpenGL + Python应用程序,它生成几何图形,然后在QGLWidget上绘制它。

代码语言:javascript
复制
class GLWidget(QtOpenGL.QGLWidget):

   def initializeGL(self):
       (...)
       self.scene.buildScene() #this generates geometry and creates OpenGL Lists

   def paintGL(self):
       (...)
       self.scene.renderScene() # this calls glCallList on every object

这个可以很好的工作。问题是几何图形的生成可能需要几秒钟甚至几分钟的时间,具体取决于输入。此时不会出现Qt窗口,因为应用程序停留在initializeGL()

我试图通过创建另一个线程来避免这种“滞后”,该线程具有额外的OpenGL上下文和共享资源:

代码语言:javascript
复制
class GLWidget(QtOpenGL.QGLWidget):
   def __init__(self, parent):
      (...)
      self.buildingThread = threading.Thread(target=self.buildingThreadFunc)

   def buildingThreadFunc(self):
      self.buildFormat = QtOpenGL.QGLFormat()
      self.buildingContext = QtOpenGL.QGLContext(self.buildFormat)
      self.buildingContext.create(self.context()) #This returns False
      self.buildingContext.device() #This returns None
      self.buildingContext.initialized() #This returns False

      self.scene.buildScene() #And finnally this fails because 
                              #there is no context to call `glGenLists`

   def initializeGL(self):
      (...)
      self.buildingThread.start()

   def paintGL(self):
      (...)
      self.scene.renderScene() #Here, every element on scene shall successively appears during geometry creation

核心问题是QGLContext::create返回False,但我不知道为什么。

此外:我使用另一个线程和上下文的想法是否正确?它会起作用吗?我猜在QGLWidget上同时使用glGenLists和绘图可能会有问题,但我希望至少有其他小部件能“响应”。

EN

回答 1

Stack Overflow用户

发布于 2018-12-08 00:23:42

几年前,I've read this blog post解释了如何使用多个渲染线程。我有一个GL加载窗口小部件,当我在幕后展示时,另一个QGLWidget正在启动。根据这篇博文,我制作了一个演示,展示了我的几十个加载小部件,所有这些小部件都是同时启动的。

另请看下面的示例:

http://doc.qt.io/archives/qt-4.8/qt-demos-glhypnotizer-example.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53670846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档