sdl2 - Diferencia entre superficie y textura(SDL/general)
sdl2 tutorial (4)
¿Alguien puede explicarme en palabras simples cuál es la diferencia entre la textura y la superficie? Lo vi usado en SDL2
como SDL_Surface
y SDL_Texture
. SDL_Texture
se crea a partir de SDL_Surface
que a su vez se crea a partir de una imagen / mapa de bits. Ambos son una colección de píxeles. Pero no veo la diferencia principal entre ellos (¿tiene que hacer algo con la GPU?)
Traté de buscarlo en Google, pero todas las explicaciones que encontré eran demasiado complejas para entenderlas sin profundizar en los gráficos de computadora.
Básicamente, su suposición "tiene que hacer algo con la GPU". es correcto.
SDL_Surface
se utiliza en la representación de software . Con la representación del software, como saloomi2012 correctamente saloomi2012 , está usando RAM regular para almacenar datos de imagen. Por lo tanto, en la mayoría de los casos, puede acceder directamente al búfer de datos asociado con la superficie, modificando su contenido, es decir, está utilizando la CPU, de ahí el nombre del software .
SDL_Texture
por otro lado, se utiliza en una representación de hardware , las texturas se almacenan en VRAM y no tiene acceso a ellas directamente como con SDL_Surface
. Las operaciones de renderizado se aceleran con la GPU, utilizando, internamente, OpenGL o DirectX (disponible solo en Windows) API, que a su vez está utilizando su hardware de video, por lo tanto, nombre de representación del hardware .
Huelga decir que la representación del hardware es por órdenes de magnitud más rápida que la representación del software y siempre debe considerarse como la opción principal.
Hay más información sobre eso en:
https://thenumbat.github.io/cpp-course/sdl2/05/05.html
Como se mencionó en la última lección, las texturas son la representación de GPU equivalente a las superficies. Por lo tanto, las texturas casi siempre se crean a partir de superficies, utilizando la función SDL_CreateTextureFromSurface (). Esta función hace más o menos lo que cabría esperar: los parámetros son el contexto de representación y una superficie para crear la textura. Al igual que con otras funciones de creación, devolverá NULL en caso de error.
¡Espero que te ayude!
Las superficies usan tu memoria RAM y las texturas usan tu tarjeta de video que es más rápida que las superficies.
SDL_Texture
se carga en la VRAM de la tarjeta de video en lugar de la RAM normal.