Высокая загрузка ЦП с SDL + OpenGL

У меня современный процессор (AMD FX 4170) и современный GPU (NVidia GTX 660). И все же этой простой программе удается полностью использовать одно из ядер моего процессора. Это означает, что он использует одно ядро ​​4,2 ГГц для рисования ничего такого на 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;
}

1

Решение

Оказывается, что драйверы NVidia реализуют ожидание vsync с занятым циклом, который заставляет SDL_GL_SwapBuffers () использовать 100% CPU. Отключение vsync из панели управления NVidia устраняет эту проблему.

3

Другие решения

Циклы используют столько вычислительной мощности, сколько могут. Основная проблема может быть расположена в:

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

Ваша задержка может быть меньше нуля, так что ваша операция может быть просто бесконечным циклом без ожидания. Вам нужно контролировать значение переменной delay,

Более того, в этом ссылка на сайт: предлагается

SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL,1); можно использовать для включения vsync, чтобы он не использовал весь процессор

2

По вопросам рекламы [email protected]