使用SDL + OpenGL实现高CPU使用率

时间:2013-06-15 05:49:23

标签: c++ opengl sdl cpu-usage sdl-opengl

我有一个现代CPU(AMD FX 4170)和一个现代GPU(NVidia GTX 660)。然而,这个简单的程序设法完全使用我的CPU核心之一。这意味着它使用一个4.2 GHz内核在60 FPS下绘制 nothing 。这个程序有什么问题?

#include <SDL/SDL.h>

int main(int argc, char** argv)
{
    SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO);
    SDL_SetVideoMode(800, 600, 0, SDL_OPENGL | SDL_RESIZABLE);

    while(true)
    {
        Uint32 now = SDL_GetTicks();
        SDL_GL_SwapBuffers();

        int delay = 1000 / 60 - (SDL_GetTicks() - now);
        if(delay > 0) SDL_Delay(delay);
    }

    return 0;
}

2 个答案:

答案 0 :(得分:3)

事实证明,NVidia的驱动程序实现了等待带有繁忙循环的vsync,导致SDL_GL_SwapBuffers()使用100%CPU。从NVidia控制面板关闭vsync会消除此问题。

答案 1 :(得分:2)

循环使用尽可能多的计算能力。主要问题可能在于:

int delay = 1000 / 60 - (SDL_GetTicks() - now);

您的延迟时间可能小于零,因此您的操作可能只是一个无限循环而无需等待。您需要控制变量delay的值。

此外,在此link中:建议

SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL,1);可用于启用vsync,以便它不会使用所有CPU