Разница между поверхностью и текстурой (SDL / общая)

Может кто-нибудь объяснить мне простыми словами, в чем разница между текстурой и поверхностью? Я видел это используется в SDL2 как SDL_Surface а также SDL_Texture, SDL_Textureсоздан из SDL_Surface который в свою очередь создается из изображения / растрового изображения. Оба являются набором пикселей. Но я не вижу основной разницы между ними (что-то делать с GPU?)

Я пытался найти его в Google, но все объяснения, которые я нашел, были слишком сложными, чтобы понять их, не углубляясь в компьютерную графику.

4 ответа

В основном ваше предположение "что-то делать с графическим процессором?" правильно.

SDL_Surface используется в программном рендеринге. С программным рендерингом, как правильно заметил saloomi2012, вы используете обычную оперативную память для хранения данных изображений. Таким образом, в большинстве случаев вы можете напрямую обращаться к буферу данных, связанному с поверхностью, изменяя его содержимое, т. Е. Он использует ЦП, отсюда и название программного обеспечения.

SDL_Texture с другой стороны, используется при аппаратном рендеринге, текстуры хранятся в VRAM, и у вас нет прямого доступа к нему, как с SDL_Surface, Операции рендеринга ускоряются с помощью графического процессора, внутри которого используется API OpenGL или DirectX (доступно только в Windows), которые, в свою очередь, используют ваше видеооборудование, отсюда и название аппаратного рендеринга.

Нет необходимости говорить, что аппаратный рендеринг на порядок быстрее, чем программный рендеринг, и его всегда следует рассматривать как основной вариант.

SDL_Texture загружается в VRAM вашей видеокарты вместо обычной RAM.

Поверхности используют вашу оперативную память, а текстуры используют вашу видеокарту, которая работает быстрее, чем поверхности.

Больше информации об этом в:

https://thenumbat.github.io/cpp-course/sdl2/05/05.html

Как уже упоминалось в последнем уроке, текстуры являются графическим эквивалентом визуализации поверхностей. Следовательно, текстуры почти всегда создаются из поверхностей, используя функцию SDL_CreateTextureFromSurface(). Эта функция более или менее делает то, что вы ожидаете - параметры - это контекст рендеринга и поверхность, из которой создается текстура. Как и с другими функциями создания, он вернет NULL в случае неудачи.

Я надеюсь, что это поможет вам!

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