Opengl 提高分辨率时,GLFW的fps大幅下降

Opengl 提高分辨率时,GLFW的fps大幅下降,opengl,glfw,Opengl,Glfw,我今天注意到,基于窗口大小,即使是一个简单的渲染循环,只要清除颜色和交换缓冲区,其性能也会有很大差异 例如,考虑下面的渲染循环< /P> while (!glfwWindowShouldClose(window)) { glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glfwSwapBuffers(window); } 如果我以800x600的窗口分辨率运行这个程序,我的笔记本电脑

我今天注意到,基于窗口大小,即使是一个简单的渲染循环,只要清除颜色和交换缓冲区,其性能也会有很大差异

例如,考虑下面的渲染循环< /P>

while (!glfwWindowShouldClose(window)) {
    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    glfwSwapBuffers(window);
}

如果我以800x600的窗口分辨率运行这个程序,我的笔记本电脑上会有1400fps的速度,它有一个GTX880MGPU。同样的循环分辨率为2560x1440,运行速度约为150fps!。这正常吗?我知道分辨率会对性能产生巨大影响,但即使我不渲染任何内容,只是简单地清除颜色和交换缓冲区,分辨率是否真的会慢10倍?

清除。你触摸的像素数量级(480000比3686400),它的速度慢了一个数量级(0.7毫秒/帧与6.6毫秒/帧),暗示你在使用2.2-2.7 GiB/s的内存带宽,这表明你正在使用笔记本电脑而不是英伟达1(英特尔)的GPU。@genpfault我很确定我是在Nvidia GPU上运行该程序,而不是在集成GPU上运行。在Nvidia global settings(Nvidia全局设置)中,我将所有应用程序的选项设置为High Performance from auto(自动高性能)。我需要做些额外的事情吗?同样,当我运行应用程序时,集成GPU和英伟达一个都显示接近100%的用法。“我得到大约1400个FPS”,你可能每秒得到1400次循环,但是这与你在屏幕上看到的内容无关。你在浪费大量的CPU周期,烧掉它,让风扇疯狂地工作,真的没有任何好处。这就是为什么您会看到100%的CPU使用率:繁忙循环。您可能应该使用类似于
glfwSwapInterval
的方法来启用vsync,而不是浪费CPU周期。然后,您可能不会看到性能下降-两者都有一个有限的、合理的FPS数。@Bruno Reis,这似乎并不准确。首先,我的CPU甚至没有接近100%的使用率,而是大约20%的使用率。然而,GPU的使用率为99%。当我对循环迭代计时时,我确实从0.7ms(当res为800x600时)跳到了约7ms(当res为2560x1440时)。我之所以开始尝试这一点,是因为我的引擎本身的运行速度比预期的要慢,我想知道我的代码中是否存在一些低效,或者glfw或我构建项目的方式是否有问题。注意:在调试和发布两种版本中都尝试了,在两种情况下都得到了完全相同的FPS。因为帧缓冲区数据必须从英伟达GPU复制到集成的输出端,所以您将获得与该分辨率和帧速率相比2.2GbYTE/s的流量。但是,由于复制引擎与渲染管线异步工作,因此您可以在这段时间内执行实际的渲染工作,这在您的玩具示例中只是浪费了时间。清除。你触摸的像素数量级(480000比3686400),它的速度慢了一个数量级(0.7毫秒/帧与6.6毫秒/帧),暗示你在使用2.2-2.7 GiB/s的内存带宽,这表明你正在使用笔记本电脑而不是英伟达1(英特尔)的GPU。@genpfault我很确定我是在Nvidia GPU上运行该程序,而不是在集成GPU上运行。在Nvidia global settings(Nvidia全局设置)中,我将所有应用程序的选项设置为High Performance from auto(自动高性能)。我需要做些额外的事情吗?同样,当我运行应用程序时,集成GPU和英伟达一个都显示接近100%的用法。“我得到大约1400个FPS”,你可能每秒得到1400次循环,但是这与你在屏幕上看到的内容无关。你在浪费大量的CPU周期,烧掉它,让风扇疯狂地工作,真的没有任何好处。这就是为什么您会看到100%的CPU使用率:繁忙循环。您可能应该使用类似于
glfwSwapInterval
的方法来启用vsync,而不是浪费CPU周期。然后,您可能不会看到性能下降-两者都有一个有限的、合理的FPS数。@Bruno Reis,这似乎并不准确。首先,我的CPU甚至没有接近100%的使用率,而是大约20%的使用率。然而,GPU的使用率为99%。当我对循环迭代计时时,我确实从0.7ms(当res为800x600时)跳到了约7ms(当res为2560x1440时)。我之所以开始尝试这一点,是因为我的引擎本身的运行速度比预期的要慢,我想知道我的代码中是否存在一些低效,或者glfw或我构建项目的方式是否有问题。注意:在调试和发布两种版本中都尝试了,在两种情况下都得到了完全相同的FPS。因为帧缓冲区数据必须从英伟达GPU复制到集成的输出端,所以您将获得与该分辨率和帧速率相比2.2GbYTE/s的流量。但是,由于复制引擎与渲染pipleine异步工作,因此您可以在这段时间内执行实际的渲染工作,这在您的玩具示例中只是浪费了时间。