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


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

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

4 59

4 ответа:

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

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

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

Излишне говорить, что аппаратный рендеринг на порядки быстрее, чем программный рендеринг и всегда должен рассматриваться как первичный выбор.

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

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

есть более подробная информация об этом в:

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

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

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