Ответ 1
SDL_Texture
объекты хранятся как можно ближе к памяти видеокарты и поэтому могут быть легко ускорены вашим GPU. Повышение размера, альфа-смешивание, сглаживание и почти любая операция с тяжелыми вычислениями могут сильно повлиять на это повышение производительности. Если вашей программе необходимо запустить логику на пиксель в ваших текстурах, вам рекомендуется временно преобразовать текстуры в поверхности. Также возможно выполнение обходного пути с потоковыми текстурами.
Edit: Поскольку этот ответ получает достаточно пристальное внимание, я хотел бы уточнить мое предложение.
Если вы предпочитаете использовать рабочий процесс Texture -> Surface -> Texture
, чтобы применить операцию на пиксель, убедитесь, что вы кешируете свою окончательную текстуру, если вам не нужно пересчитывать ее в каждом цикле рендеринга. Текстуры в этом решении создаются с флагом SDL_TEXTUREACCESS_STATIC
.
Потоковые текстуры (флаг создания SDL_TEXTUREACCESS_STREAMING
) рекомендуется использовать в случаях, когда источником данных пикселя является сеть, устройство, сервер кадров или какой-либо другой источник, который выходит за пределы охвата приложений SDL, и когда очевидно, что кэширование кадров из источника неэффективно или не работает.
Можно создавать поверх текстур, если они созданы с флагом SDL_TEXTUREACCESS_TARGET
. Это ограничивает источник операции рисования другими текстурами, хотя это может быть уже в первую очередь. "Текстуры как объекты рендеринга" - одна из новейших и наименее широко поддерживаемых функций SDL2.
Информация о Nerd для любопытных читателей:
В связи с природой реализации SDL, первые два метода зависят от операций чтения и копирования на уровне приложений, хотя они оптимизированы для предлагаемых сценариев и достаточно быстры для приложений реального времени.
Копирование данных с уровня приложения почти всегда медленное по сравнению с пост-обработкой на графическом процессоре. Если ваши требования более строгие, чем то, что может предоставить SDL, и ваша логика не зависит от какого-либо источника внешних пиксельных данных, было бы разумно выделить необработанные текстуры OpenGL, окрашенные с ваших поверхностей SDL, и применять шейдеры (графический процессор логика).
Шейдеры записываются в GLSL, язык, который компилируется в сборку графического процессора. Ускорение аппаратного/графического ускорения фактически относится к коду, распараллеленному на ядрах графического процессора, и использование шейдеров - предпочтительный способ достижения этого для целей рендеринга.
Внимание! Использование исходных текстур и шейдеров OpenGL в сочетании с функциями и структурами рендеринга SDL может вызвать некоторые непредвиденные конфликты или потерю гибкости, предоставляемых библиотекой.
TL;DR; Это быстрее обрабатывать и обрабатывать текстуры, чем поверхности, хотя их изменение иногда может быть затруднено.