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_Textureest 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.

59
demandé sur dev-null 2014-01-28 02:10:38

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.

60
répondu Petr Abdulin 2017-05-23 12:18:01

SDL_Texture est chargé dans le VRAM de votre carte vidéo au lieu de RAM ordinaire.

7
répondu saloomi2012 2014-08-19 14:59:28

Surfaces utiliser votre RAM et Textures utiliser votre carte vidéo qui est plus rapide que les surfaces.

2
répondu Evander 2018-05-02 02:41:26

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!

0
répondu omotto 2018-02-19 14:43:28