My applications use 100% of the CPU and eat up as many of the cycles as they can. Windows shows 25% CPU use for my programs - due to it be a quad core underneath. Also it invariably causes the fan to spin up - either on my CPU or the graphics card and I hate that! Really hate it. I'd take silence over power everytime I think.
In SDL it's easy enough to cap the game loop to a certain no of frames per second and not overheat the GPU / CPU.
As it turns out the SDL_Delay on Win32 is just a call to Sleep which is included with windows.h
void SDL_Delay(Uint32 ms)
{
Sleep(ms)
}
In the game loop I use it like this.
unsigned int fpsTicks = 0;
while(mRunning)
{
fpsTicks = SDL_GetTicks();
UpdateInput();
Update();
Render();
fpsTicks = SDL_GetTicks() - fpsTicks;
if (fpsTicks < 1000 / frames_per_second)
{
SDL_Delay((1000 / frames_per_second) - fpsTicks);
}
SDL_GL_SwapBuffers();
}
On most Windows systems SDL_GetTicks() is defined:
Uint32 SDL_GetTicks(void)
{
LARGE_INTEGER hires_now;
QueryPerformanceCounter(&hires_now);
hires_now.QuadPart -= hires_start_ticks.QuadPart;
hires_now.QuadPart *= 1000;
hires_now.QuadPart /= hires_ticks_per_second.QuadPart;
return (DWORD)hires_now.QuadPart;
}
Both LARGE_INTEGER and QueryPerformanceCounter come from windows.h
They're in SDL_systimer.c if you fancy a look.
No comments:
Post a Comment