Более быстрый способ масштабирования представления SDL, чем SDL_gfx zoomSurface?

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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам