gpt4 book ai didi

c++ - 如何在QT中实时更新GL()

转载 作者:可可西里 更新时间:2023-11-01 16:35:42 30 4
gpt4 key购买 nike

我想知道以固定的计时器间隔调用 updateGL() 是否会减慢渲染过程。所以,我想尝试实时渲染。我没有让它自动执行的功能。有人知道吗?

其次,我在我的程序中注释了updateGL(),CPU使用率降低到1%和0%。现在,当我点击显示小部件时,它会跳到 14%,为什么? GPU 不是在做所有的渲染工作吗?如果是,为什么 CPU 跳到 14?我该如何解决这个问题?

最佳答案

是的,你可以做到实时,没有撕裂(例如,以恰好 60fps 的速度重新绘制,显示器的刷新率)。

为此,您必须启用 V_sync,并使用间隔为 0 的 QTimer 计时器;。启用 V_sync 将使自动调用的 swapBuffers() 命令到 CPU-等待显示器的垂直刷新信号。然后,计时器实际上将与监视器刷新率同步。

可以在这里找到相关信息: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.6 毫秒),并使用此信息来更新您的场景,例如。

关于c++ - 如何在QT中实时更新GL(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17167194/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com