c++ - 如何使用 QOpenGLWidget 实现近乎恒定的 FPS?
问题描述
我有子类QOpenGLWidget
。我使用以下表面格式:
QSurfaceFormat format;
format.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
format.setSwapInterval(2); // every 2nd vsync
使用这种表面格式我不必调用update()
. 相反,Qt 会paintGL()
以我的显示器刷新率 (60 Hz) 除以我的swapInterval
(2) 来调用我。
所以理论上我应该得到一个恒定的 FPS=30。然而,当我测量这个时,FPS 变化很大:
paintGL()
我在开始时测量时间std::chrono::high_resolution_clock::now()
,找到自上次调用以来经过的毫秒数,paintGL()
然后除以 1000 以获得 FPS。
我的paintGL()
方法总是在不到 1 毫秒的时间内完成。我的 GPU 似乎几乎没有流汗:
尽管 CPU 2 和 4 的利用率出现了一些峰值,但我的 CPU 似乎也很好:
我可以做些什么来实现近乎恒定的 FPS QOpenGLWidget
?
顺便提一句。调用format.setSwapInterval()
似乎没有任何效果。如果我尝试将 设置swapInterval
为 1,则 FPS 仍会在 30 左右波动,而不是我预期的 60。
解决方案
推荐阅读
- java - 从 ArrayList 中提取 Java 字符串数据并使用 I/O 文件对其进行操作
- oracle - 如何在 ORACLE SQL 循环的另一个变量中使用一个变量?
- python - 为什么我的 python 中的 findall 方法返回元组中我的电子邮件地址用户名的最后一个字符?
- visual-studio-code - 用于在 peek 窗口中导航的 vscode 键盘快捷键
- html - 如何创建响应式、等宽、动态的列?
- c# - 如何测试在 .NET Core 3.1 的响应内容中不返回数据的控制器 POST 方法?
- windows - Dymola 工作目录是一个 UNC 路径 (VM)
- azure - Date comparison in azure logic app get entities connector
- python - TypeError:“numpy.float64”对象不可用于 ML 模型
- visual-studio - 使用 ctrl-j 和 ctrl-k 在 Visual Studio 中导航菜单