Более быстрый способ масштабирования представления SDL, чем SDL_gfx zoomSurface? - PullRequest
2 голосов
/ 17 сентября 2011

Я программирую игру с SDL.Я реализовал масштабируемый размер окна с помощью функции zoomSurface в библиотеке SDL_gfx, но мальчик делает частоту кадров попаданием (предположительно потому, что каждый раз, когда вы вызываете zoomSurface, он создает совершенно новый экземпляр SDL_Surface, и для непрерывного масштабирования вам нужно вызыватьэто каждый кадр).

Я довольно новичок в программировании с SDL, поэтому я не знаю ни о каких других функциях, которые он мог бы иметь.Есть ли более быстрый способ сделать это?

1 Ответ

1 голос
/ 17 сентября 2011

SDL на самом деле не поддерживает это.

Самый «правильный» способ - использовать базовый графический API (OpenGL или DirectX) для масштабирования.Например, вызов glScale{f,d}, если вы используете OpenGL под капотом.Я полагаю, что SDL в Windows скомпилирован для использования DirectX, поэтому это не переносимое решение.

Альтернативой является воссоздание всех поверхностей, когда вам необходимо увеличить все по некоторому коэффициенту.Это медленно, но это не нужно делать каждый кадр;это нужно сделать только один раз, когда коэффициент масштабирования изменяется, и затем масштабированная поверхность может быть сохранена в памяти и повторно использована для каждого кадра.

Имейте в виду, что это обычно не имеет смысла для 2Dв играх разрешено масштабированное изменение размера, потому что спрайты выглядят ужасно при растяжении, если не используется какой-либо фильтр.

...