Différence entre la surface et la texture (SDL / général)
Quelqu'un peut-il m'expliquer en mots simples Quelle est la différence entre la texture et la surface? Je l'ai vu utilisé dans SDL2
comme SDL_Surface
et SDL_Texture
. SDL_Texture
est créé à partir de SDL_Surface
, qui à son tour est créé à partir d'une image bitmap/. Les deux sont une collection de pixels. Mais je ne vois pas la principale différence entre eux (doit faire quelque chose avec GPU?)
J'ai essayé de le google mais toutes les explications que j'ai trouvées étaient trop complexes pour les comprendre sans creuser plus profondément dans les trucs d'infographie.
4 réponses
Fondamentalement, votre hypothèse " doit faire quelque chose avec GPU?"est juste.
SDL_Surface
est utilisé dans logiciel rendu. Avec le rendu logiciel, comme saloomi2012 correctement remarqué, vous utilisez la RAM régulière pour stocker les données d'image. Ainsi, dans la plupart des cas, vous pouvez accéder directement au tampon de données associé à surface, en modifiant son contenu, c'est-à-dire qu'il utilise CPU, d'où le nom du logiciel.
SDL_Texture
d'autre part, est utilisé dans matériel rendu, textures sont stockés dans VRAM et vous n'y avez pas accès directement comme avec SDL_Surface
. Les opérations de rendu sont accélérées par GPU, en utilisant, en interne, OpenGL ou DirectX (disponible uniquement sur Windows) API, qui à son tour utilisent votre matériel vidéo, d'où Matériel nom de rendu.
Inutile de dire que le rendu matériel est par ordre de grandeur plus rapide que le rendu logiciel et doit toujours être considéré comme l'option principale.
SDL_Texture
est chargé dans le VRAM de votre carte vidéo au lieu de RAM ordinaire.
Surfaces utiliser votre RAM et Textures utiliser 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 des surfaces. Par conséquent, les textures sont presque toujours créées à partir de surfaces, en utilisant la fonction SDL_CreateTextureFromSurface (). Ce fonction plus ou moins ce que vous attendez-les paramètres sont les contexte de rendu et une surface à partir de laquelle créer la texture. Comme avec autre fonctions de création, il retournera NULL en cas d'échec.
J'espère que cela vous aidera!