如何使updateGL()在QT中实时
how to make updateGL() realtime in QT
我想知道在固定的计时器间隔内调用updateGL()是否会减慢渲染过程。所以,我想尝试实时渲染。我没有使它自动执行的函数。有人知道吗?
其次,我在我的程序中注释了updateGL(), CPU使用率降低到1%和0%。现在,当我点击显示小部件时,它跳转到14%,为什么?GPU不是在做所有的渲染工作吗?如果是,为什么CPU跳到14?我该如何解决这个问题?
是的,你可以让它是实时的,没有撕裂(例如,以60fps,显示器的刷新率重画)。
为此,您必须启用V_sync,并使用间隔为0的QTimer timer;
。启用V_sync将使自动调用的swapBuffers()
命令等待来自监视器的垂直刷新信号。然后,计时器将实际与监视器刷新率同步。
相关信息可以在这里找到:https://www.qt.io/blog/2010/12/02/velvet-and-the-qml-scene-graph。注意QGLFormat::setSwapInterval(1)
启用V_sync,如果不是由您的驱动程序设置自动完成:
class MyGLWidget: public QGLWidget
{
// ...
private:
QTimer timer;
}
QGLFormat desiredFormat()
{
QGLFormat fmt;
fmt.setSwapInterval(1);
return fmt;
}
MyGLWidget::MyGLWidget() :
QGLWidget(desiredFormat())
{
// Configure the timer
connect(&timer, SIGNAL(timeout()), this, SLOT(updateGL()));
if(format().swapInterval() == -1)
{
// V_blank synchronization not available (tearing likely to happen)
qDebug("Swap Buffers at v_blank not available: refresh at approx 60fps.");
timer.setInterval(17);
}
else
{
// V_blank synchronization available
timer.setInterval(0);
}
timer.start();
}
同时,您可以运行QElapsedTimer
来测量两次绘图之间经过的时间(通常约16.6ms),并使用此信息来更新您的场景,例如
相关文章:
- 从数据库实时显示QT c++中的数据
- 将实时(非静态)放在qt(c ++)上
- Qt - 重新实现QIODevice,实时听到我自己的声音
- Qt是否能够支持小缓冲区低延迟视频应用(例如实时流)
- QT(C ),编写2个字符(实时编辑)后,会自动添加一个字符
- 为什么我的实时流相机使用OpenCV QT严重滞后
- VoIP:如何从QT多媒体中的相机中捕获实时音频/视频流字节
- 我想在QT中实时绘制ADC图
- Qt GUI应用程序在与GUI交互时停止实时进程
- 来自数据库 Qt 的值的实时馈送
- 使用QT播放实时视频流
- 用Qt、QWT和C++进行实时数据绘图
- Qt:显示实时视频,一次一帧
- QT,C++:在QGraphicsview上从相机绘制实时图像流的快速方法
- 在哪里使用c++和qt将Wav标头添加到实时音频服务器中的数据
- 如何使updateGL()在QT中实时
- Qt文本浏览器不显示在实时
- 尝试使用Qt和OpenCV从高清网络摄像头获得1080p的实时feed,只能获得480p
- 实时流与QAudioOutput (qt)
- 实时更改qt应用程序的qlineedit中的文本