c++ - 渲染场景后让 CPU 休息

标签 c++ opengl render cpu-usage

我读到过,让涉及渲染的 3D 程序在渲染之间休息一下是个好主意。这是真的?这会减少 CPU 负载还是无关?

如果是这样,您推荐什么方法?此外,这是否与帧率上限有关,即上限为 60 fps,如果没有时间渲染另一帧,请休息并等待,直到我们需要渲染另一帧以满足 60fps 标记。

我正在使用 OpenGL 和 C++。

最佳答案

是的,限制帧率可以减少 CPU 负载。

此外,如果您的帧率为 2000 fps,您的显示器将不会显示每一帧,通常只有 60fps。 http://en.wikipedia.org/wiki/Refresh_rate

我推荐以下方法(使用boost日期时间和线程库的代码):

#include <boost/thread.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

long desiredFps=60;

void drawLoop() {
    using namespace boost;
    using namespace boost::posix_time;

    ptime lastDraw = microsec_clock::universal_time();
    while( true ) {
        ptime now = microsec_clock::universal_time();
        long diff = (now-lastDraw).total_microseconds();
        long desiredDiff = 1000000/desiredFps;
        if( diff < desiredDiff ) {
            this_thread::sleep(microseconds(desiredDiff-diff));
        }
        draw();
        lastDraw = now;
    }
}

关于c++ - 渲染场景后让 CPU 休息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8904352/

相关文章:

c++ - char 数组访问冲突

c++ - 为什么我的异常没有被捕获

c++ - 为什么 glDrawPixels 在这里不起作用?

c++ - 了解 GL_SHADER_STORAGE_BLOCK 绑定(bind)

ruby - Rails 3 不需要的 html 转义

c++ - CEF 不显示在 C++ 窗口中

c++ - 如何或或异或和内存块

opengl - 如何使用几何着色器创建的坐标绘制TRIANGLE_FAN? (GLSL 3.3)

android - 如何在支持/渲染非英语语言的Android项目中做出贡献?

render - Fabricjs:我的 Fabric.Object 子类的 _render 方法从未被调用