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帧率:与窗口大小的关系的主要内容,如果未能解决你的问题,请参考以下文章