C++ OpenGL帧率:与窗口大小的连接

C++ OpenGL帧率:与窗口大小的连接,c++,opengl,glut,freeglut,C++,Opengl,Glut,Freeglut,我正在跟踪并消除我的C++/OpenGL/GLUT代码中效率低下且速度缓慢的部分,在这样做的过程中,我观察每秒帧数计数器,以了解我是否真的取得了进展。我注意到如果我最大化窗口,我的帧速率从大约120下降到60 进一步的实验表明这是一个线性的东西,我可以通过改变窗口的大小来改变帧速率 这是否意味着我在GPU渲染中遇到了瓶颈?当然,现在的GPU强大到足以而不是注意到300x300和1920x1080之间的差异?还是我对显卡的要求太高了 另一种情况是,我的代码中存在一些错误,导致系统在较大的渲染时速度

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

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

这是否意味着我在GPU渲染中遇到了瓶颈?当然,现在的GPU强大到足以而不是注意到300x300和1920x1080之间的差异?还是我对显卡的要求太高了

另一种情况是,我的代码中存在一些错误,导致系统在较大的渲染时速度减慢

我想问的是:当改变窗口大小时,期望帧率减半是合理的,还是有什么非常错误的地方

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

祝贺您:您发现了填充率

这是否意味着我在GPU渲染中遇到了瓶颈

是的,差不多。具体来说,瓶颈要么是图形内存的带宽,要么是片段着色器的复杂性,要么是两者的组合

当然,现在的GPU功能强大到足以不去注意300x300和1920x1080之间的区别吗

或者换句话说:你要求GPU填充大约20倍的像素。这意味着,必须将20倍的数据四处传播并进行处理

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


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

这很有意义!谢谢在多台台式机上进行的进一步实验清楚地显示了120Hz、60Hz、40Hz和30Hz下的肩部。@rspencer:最终你将完成所有可能的120Hz分解。
300×300   =   90000
1920×1080 = 2073600