OpenGL帧率:与窗口大小的关系

Posted

技术标签:

【中文标题】OpenGL帧率:与窗口大小的关系【英文标题】:OpenGL framerate: connection with the size of the window 【发布时间】:2013-11-06 12:10:55 【问题描述】:

我正在追踪并消除我的 C++/OpenGL/GLUT 代码中效率低下且速度慢的部分,在此过程中,我观察了每秒帧数计数器,以了解我是否真的取得了进展。我注意到,如果我最大化窗口,我的帧速率会从大约 120 下降到 60。

进一步的实验表明这是一个线性的东西,我可以通过改变窗口的大小来改变帧速率。

这是否意味着我在 GPU 渲染方面的瓶颈?现在的 GPU 肯定已经足够强大了可以注意到 300x300 和 1920x1080 之间的区别?还是我对显卡的要求太高了?

另一种方法是我的代码中存在一些错误,导致系统在较大的渲染时变慢。

我要问的是:在更改窗口大小时期望帧速率减半是否合理,还是有什么非常不对劲的地方?

【问题讨论】:

【参考方案1】:

进一步的实验表明这是一个线性的东西,我可以通过改变窗口的大小来改变帧速率。

恭喜:您发现了填充率

这是否意味着我在 GPU 渲染方面的瓶颈?

是的,差不多。具体来说,瓶颈要么是进出显存的带宽,要么是片段着色器的复杂性,或者两者兼而有之。

现在的 GPU 肯定已经足够强大,以至于不会注意到 300x300 和 1920x1080 之间的区别?

300×300   =   90000
1920×1080 = 2073600

或者换句话说:你要求 GPU 填充大约 20 倍的像素。这意味着需要处理和处理 20 倍的数据。

从 120Hz 到 60Hz 的下降来自 V-Sync。如果您禁用 V-Sync,您会发现,对于 1920×1080,您的程序可能会达到比 60Hz 更高的速率,但对于 300×300,它会低于 180Hz。

原因很简单:当与显示器垂直回扫同步时,您的 GPU 只能在显示器进行垂直同步时“输出”下一帧。如果您的显示器可以达到 120Hz(很明显,就像您的显示器一样)并且您的渲染时间少于 1/120 秒,那么它将使截止日期和您的帧速率与显示器同步。但是,如果绘制一个帧需要超过 1/120 秒,那么它将与显示的每个第二帧同步。如果每 3 次渲染耗时超过 1/60 秒,每 4 次渲染耗时 1/30 秒,以此类推。

【讨论】:

这很有意义!谢谢! Edit 对多个桌面的进一步实验清楚地显示了 120Hz、60Hz、40Hz 和 30Hz 的肩部。 @rspencer:最终你会经历所有可能的 120Hz 分解。

以上是关于OpenGL帧率:与窗口大小的关系的主要内容,如果未能解决你的问题,请参考以下文章

OpenGl窗口大小定位相关

使用 OpenGL 和 SDL 处理窗口大小调整

OpenGL 防止在调整窗口大小时拉伸

OpenGL 闪烁/损坏,窗口调整大小和 DWM 处于活动状态

OpenGL - 调整窗口大小时保持纵横比

调整 OpenGL 窗口的大小会导致它崩溃