簡體   English   中英

SDL + OpenGL的CPU使用率高

[英]High CPU usage with SDL + OpenGL

我有一個現代化的CPU(AMD FX 4170)和一個現代化的GPU(NVidia GTX 660)。 但是,這個簡單的程序設法完全使用了我的CPU內核之一。 這意味着它使用一個4.2 GHz的核心在60 FPS畫什么 該程序有什么問題?

#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;
}

事實證明,NVidia的驅動程序的實現通過繁忙的循環等待vsync,這導致SDL_GL_SwapBuffers()使用100%的CPU。 從NVidia控制面板中關閉vsync可消除此問題。

循環使用盡可能多的計算能力。 主要問題可能位於:

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

您的延遲持續時間可能小於零,因此您的操作可能只是無限循環而無需等待。 您需要控制變量delay的值。

此外,在此鏈接中 :建議

SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL,1); 可用於啟用vsync,以便不使用所有CPU

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM