[英]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.