Может ли кто-нибудь объяснить мне простыми словами, в чем разница между текстурой и поверхностью? Я видел это использовалось в SDL2
качестве SDL_Surface
и SDL_Texture
. SDL_Texture
создается, из SDL_Surface
которого, в свою очередь, создается из изображения / растрового изображения. Оба представляют собой набор пикселей. Но я не вижу между ними основной разницы (причем тут что-то с GPU?)
Я попытался погуглить, но все объяснения, которые я нашел, были слишком сложными, чтобы понять их, не углубляясь в компьютерную графику.
SDL_Texture
иSDL_Surface
так же , какSDL_Renderer
. В общем,SDL_Texture
это то , что используется для рендеринга, но когда вы загружаете информацию о текстуре с помощьюSDL_Image
илиSDL_ttf
, вы получаете данные какSDL_Surface
SDL_Surface
это просто набор пикселей, аSDL_Texture
этоan efficient, driver-specific representation of pixel data
означает, что он может использоваться графическим процессором wiki.libsdl.org/SDL_Texture . Это ответило на ваш вопрос? Вам действительно стоит углубиться в компьютерную графику, чтобы понять большеОтветы:
В основном ваше предположение "имеет какое-то отношение к GPU?" верно.
SDL_Surface
используется в программном рендеринге. При программном рендеринге, как правильно заметил saloomi2012 , вы используете обычную оперативную память для хранения данных изображения. Таким образом, в большинстве случаев вы можете напрямую обращаться к буферу данных, связанному с поверхностью, изменяя его содержимое, т.е. он использует CPU, отсюда и название программного обеспечения .SDL_Texture
с другой стороны, используется при аппаратном рендеринге, текстуры хранятся во VRAM, и у вас нет прямого доступа к нему, как сSDL_Surface
. Операции рендеринга ускоряются с помощью графического процессора с использованием внутреннего API OpenGL или DirectX (доступного только в Windows), которые, в свою очередь, используют ваше видеооборудование, отсюда и название аппаратного рендеринга.Излишне говорить, что аппаратный рендеринг на порядки быстрее, чем программный, и его всегда следует рассматривать как основной вариант.
источник
SDL_FillRect
тогда быстрееSDL_RenderFillRect
? Вопрос: stackoverflow.com/q/65450100/4632019SDL_Texture
загружается в VRAM вашей видеокарты вместо обычной RAM.источник
Подробнее об этом можно прочитать в:
https://thenumbat.github.io/cpp-course/sdl2/05/05.html
Надеюсь, это вам поможет!
источник
Поверхности используют вашу оперативную память, а текстуры используют вашу видеокарту, которая работает быстрее, чем поверхности.
источник