Каковы точные сроки и эффект SDL_UpdateRect на экране с двойной буферизацией? - PullRequest
0 голосов
/ 08 января 2012

При использовании экрана с двойной буферизацией с Simple DirectMedia Layer , более эффективно вызывать SDL_UpdateRect один раз после бликования нескольких изображений или вызывать его один раз после удара каждого человека изображение перед звонком SDL_Flip? Другими словами, SDL_UpdateRect приведет к немедленному обновлению экрана , или просто сообщит Simple DirectMedia Layer, какие области должны быть обновлены при переворачивании экрана? Как обычно его следует использовать с двойным буфером экрана?

Для справки, вот описание SDL_UpdateRect.

Обеспечивает обновление указанной области на данном экране. прямоугольник должен быть ограничен границами экрана (без отсечения сделано).

Если ' x ', ' y ', ' w ' и ' h ' равны 0, SDL_UpdateRect обновит весь экран.

1 Ответ

3 голосов
/ 08 сентября 2012

Да, SDL_UpdateRect обновлять экран (или прямоугольник) немедленно.

Нет необходимости использовать SDL_UpdateRect и SDL_Flip совместно, они выполняют одни и те же действия, но разными способами.Разница в том, что SDL_UpdateRect может обновлять только часть экрана (и работать, копируя пиксели с вашей поверхности на экран), а SDL_Flip обновляет весь экран (и работает с помощью перекидных буферов).

Так, если вы используете экран с двойной буферизацией, нет необходимости вызывать SDL_UpdateRect, просто позвоните SDL_Flip после всех блитов.

http://www.libsdl.org/docs/html/sdlsetvideomode.html

Вызов SDL_Flip перевернет буферы иобновить экран.Все рисование будет происходить на поверхности, которая не отображается в данный момент.Если двойная буферизация не может быть включена, то SDL_Flip просто выполнит SDL_UpdateRect на весь экран.

И не забывайте, что двойная буферизация работает только в режиме видео SDL_HWSURFACE и SDL_FULLSCREEN.

...