Разница между поверхностью и текстурой (SDL / general)
может кто-нибудь объяснить мне простыми словами в чем разница между текстурой и поверхностью? Я видел его в SDL2
Как SDL_Surface
и SDL_Texture
. SDL_Texture
создается из SDL_Surface
, который в свою очередь создается из изображений/растровые. Оба являются коллекцией пикселей. Но я не вижу основной разницы между ними (должен ли что-то делать с GPU?)
Я попытался google, но все объяснения, которые я нашел, были слишком сложными, чтобы понять их, не углубляясь в компьютерную графику материал.
4 ответа:
В основном ваше предположение " должно что-то делать с GPU?- совершенно верно.
SDL_Surface
используется программа рендеринг. С программным рендерингом, как saloomi2012 правильно заметили, вы используете обычную оперативную память для хранения данных изображения. Таким образом, в большинстве случаев вы можете получить доступ к буферу данных, связанному с surface напрямую, изменяя его содержимое, т. е. используя CPU, следовательно,программа имя.
SDL_Texture
С другой стороны, используется в оборудование рендеринг, текстуры хранятся в VRAM и у вас нет доступа к нему напрямую, как сSDL_Surface
. Операции рендеринга ускоряются GPU, используя, внутренне, либо OpenGL, либо DirectX (доступный только в Windows) API, которые, в свою очередь, используют ваше видеооборудование, следовательно оборудование рендеринг имя.Излишне говорить, что аппаратный рендеринг на порядки быстрее, чем программный рендеринг и всегда должен рассматриваться как первичный выбор.
поверхности использовать оперативную память и текстуры использовать видеокарту, которая является более быстрым чем поверхности.
есть более подробная информация об этом в:
https://thenumbat.github.io/cpp-course/sdl2/05/05.html
Как упоминалось в последнем уроке, текстуры-это рендеринг GPU эквивалент поверхностей. Следовательно, текстуры почти всегда создаются из поверхности, используя функцию SDL_CreateTextureFromSurface (). Этот функция более или менее делает то, что вы ожидаете-параметры являются контекст отрисовки и поверхность для создания текстуры от. Как с другие функции создания, он будет возвращать NULL при сбое.
Я надеюсь, что это поможет вам!