Quelqu'un peut-il m'expliquer en termes simples quelle est la différence entre la texture et la surface? Je l'ai vu utilisé dans SDL2
en tant que SDL_Surface
et SDL_Texture
. SDL_Texture
est créé à partir de SDL_Surface
qui à son tour est créé à partir d'image/bitmap. Les deux sont une collection de pixels. Mais je ne vois pas la différence principale entre eux (faut-il faire quelque chose avec le GPU?)
J'ai essayé de le rechercher sur Google, mais toutes les explications que j'ai trouvées étaient trop complexes pour pouvoir être comprises sans approfondir les graphiques.
Fondamentalement, votre hypothèse "doit faire quelque chose avec GPU?" est juste.
SDL_Surface
est utilisé dans le rendu software. Avec le rendu logiciel, comme indiqué correctement par saloomi2012 , vous utilisez normalement RAM pour stocker des données d’image. Ainsi, dans la plupart des cas, vous pouvez accéder directement au tampon de données associé à la surface, en modifiant son contenu, c’est-à-dire qu’il utilise la CPU, d’où le nom software.
SDL_Texture
, d'autre part, est utilisé dans un rendu hardware, les textures sont stockées dans la VRAM et vous n'y avez pas directement accès comme avec SDL_Surface
. Les opérations de rendu sont accélérées par le GPU, en utilisant en interne OpenGL ou DirectX (disponible uniquement sous Windows), qui utilisent à leur tour votre matériel vidéo, d'où le nom de rendu hardware.
Il va sans dire que le rendu du matériel est beaucoup plus rapide que le rendu du logiciel par ordre de grandeur et qu'il doit toujours être considéré comme une option principale.
SDL_Texture
est chargé dans la VRAM de votre carte vidéo au lieu de la RAM normale.
Les surfaces utilisent votre RAM et Textures utilise votre carte vidéo qui est plus rapide que les surfaces.
Il y a plus d'informations à ce sujet dans:
https://thenumbat.github.io/cpp-course/sdl2/05/05.html
Comme mentionné dans la dernière leçon, les textures sont le rendu GPU équivalent de surfaces. Par conséquent, les textures sont presque toujours créées à partir de surfaces, en utilisant la fonction SDL_CreateTextureFromSurface (). Ce fonctionne plus ou moins ce que vous attendez - les paramètres sont les contexte de rendu et une surface pour créer la texture. Comme avec autres fonctions de création, il retournera NULL en cas d’erreur.
J'espère que ça t'aide!