首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重置pyqt5小部件的glContext

重置pyqt5小部件的glContext
EN

Stack Overflow用户
提问于 2020-06-11 17:42:29
回答 1查看 57关注 0票数 0

我正在使用glumpy来可视化图形。Glumpy负责使用openGl将数据上传到图形处理器。我使用的是"pyqt5“后端。

我在使用glumpy时遇到了一些问题。如果我频繁绑定gpu上的缓冲区,程序开始运行非常慢。我删除了CPU端的glumpy程序(python del),我也没有保留任何引用,gc应该会注意到它。通过执行堆分析,发现性能损失的唯一原因不是GPU上的内存被解除引用。

Glumpy正在使用QGLWidget的glContext。here

代码语言:javascript
复制
        if context.isValid():
            self._native_window = QtOpenGL.QGLWidget(context)
        else:
            self._native_window = QtOpenGL.QGLWidget(__glformat__)

重新加载整个小部件对我不起作用。

有没有办法重新加载/重新实例化/刷新glContext,使其解除所有缓冲区的绑定?

EN

回答 1

Stack Overflow用户

发布于 2020-06-11 20:42:08

我解决了。

首先,GPU上分配的内存不是我性能问题的原因。然而,glumpy可以通过内置GLObject.deactivate()方法“释放”GPU内存。(我必须自己在标签渲染器agg-glyph-collection上编写deactivate()方法。

每个GLObject都有这个方法,对我来说,gloo.Program.deactivate()方法通过将绑定的缓冲区大小设置为0来解决这个问题。

我的问题是由app.window.event类中的_event_stack引起的。您可以通过attach(event_handler)remove_handlers(handler)方法修改_event.stack如果删除( event_handlers -)程序,着色器不会自动分离。它是一个事件堆栈,但也有层(),remove_handlers方法将找到附加了给定处理程序之一的第一层(帧),并删除所有出现的任何给定处理程序,但仅在该层/帧中。

因此,为了我的目的,解决方案是将我的所有程序分开。

代码语言:javascript
复制
    self.program_points.deactivate()
    self.skip_plane_program.deactivate()
    self.axes_program.deactivate()
    self.labels_graph_program.deactivate()
    self.labels_axis_program.deactivate()
    # this is necessary because glumpy breaks symmetry between push and pop on event_stack
    window.remove_handlers(self.program_points['transform'])
    window.remove_handlers(self.axes_program['transform'])
    window.remove_handlers(self.labels_graph_program['transform'])
    window.remove_handlers(self.skip_plane_program['transform'])
    window.remove_handlers(self.labels_axis_program['transform'])

这并不像预期的那样工作:

代码语言:javascript
复制
 window.remove_handlers(self.program_points['transform'], self.axes_program['transform'], self.labels_graph_program['transform'], self.labels_axis_program['transform'])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62321433

复制
相关文章

相似问题

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