【发布时间】:2010-11-18 19:27:50
【问题描述】:
我正在尝试在 QPainter(在 OpenGL 小部件中)中以 60fps 的速度显示视频
我遇到了一个问题,有时绘制时间过长,并且在使用 QPainter 时会发生下一次重绘事件 - 这会生成警告和随机崩溃。
几个问题:
有没有一种“Qt 方式”来有效地联锁重绘调用,因为大概 QPainter 知道它正在被使用 - 还是我只是使用我的平台互斥体支持?
有没有比仅调用 repaint() 的计时器更好的方法来以高帧速率(当然也需要锁定到 VSync)进行绘制?
【问题讨论】:
-
定时器触发时你调用的指令到底是什么?或者,如果你自己不调用任何东西,你如何强制执行 60fps?
-
repaint(),然后我重载 paintEvent() 来获取我的图像数据并将其填充到一个 QImage 中并进行渲染
-
你可以在单独的线程中创建 QImages,这样绘画线程在每个paintEvent 上将需要更少的时间。
-
我是否正确理解了这个序列?你想重绘一个 GL 小部件,所以你覆盖了绘制事件,绘制到一个图像,然后在 GL 小部件上渲染该图像?
-
@Caleb - 基本上是的。我需要以 60fps 的速度将 QImage 放到屏幕上。在过去,当你知道你的屏幕在哪里时,这一切都是那么简单!
标签: c++ multithreading qt video