Kann mir jemand in einfachen Worten erklären, was der Unterschied zwischen Textur und Oberfläche ist? Ich sah es SDL2
als SDL_Surface
und verwendet SDL_Texture
. SDL_Texture
wird erstellt, aus SDL_Surface
dem wiederum aus Bild / Bitmap erstellt wird. Beide sind eine Sammlung von Pixeln. Aber ich sehe nicht den Hauptunterschied zwischen ihnen (hat etwas mit der GPU zu tun?)
Ich habe versucht, es zu googeln, aber alle Erklärungen, die ich fand, waren zu komplex, um sie zu verstehen, ohne mich eingehender mit Computergrafiken zu befassen.
SDL_Texture
undSDL_Surface
sowieSDL_Renderer
. Im AllgemeinenSDL_Texture
wird es für das Rendern verwendet, aber wenn Sie Texturinformationen mitSDL_Image
oder ladenSDL_ttf
, erhalten Sie die Daten alsSDL_Surface
SDL_Surface
ist nur eine Ansammlung von Pixeln , währendSDL_Texture
sie dasan efficient, driver-specific representation of pixel data
heißt es kann durch die GPU verwendet werden wiki.libsdl.org/SDL_Texture . Hat das deine Frage beantwortet? Sie sollten wirklich tiefer in die ComputergrafikAntworten:
Grundsätzlich Ihre Annahme "hat etwas mit GPU zu tun?" ist richtig.
SDL_Surface
wird beim Rendern von Software verwendet . Beim Software-Rendering verwenden Sie, wie saloomi2012 richtig bemerkt hat, normalen RAM, um Bilddaten zu speichern. In den meisten Fällen können Sie daher direkt auf den mit der Oberfläche verknüpften Datenpuffer zugreifen und dessen Inhalt ändern, dh die CPU wird verwendet, daher der Name der Software .SDL_Texture
Auf der anderen Seite wird in einem Hardware- Rendering verwendet, Texturen werden im VRAM gespeichert und Sie haben keinen direkten Zugriff darauf wie beiSDL_Surface
. Die Rendering-Vorgänge werden von der GPU beschleunigt, indem intern entweder die OpenGL- oder die DirectX-API (nur unter Windows verfügbar) verwendet wird, die wiederum Ihre Videohardware verwenden, daher der Name des Hardware- Renderings.Es ist unnötig zu erwähnen, dass das Hardware-Rendering um Größenordnungen schneller ist als das Software-Rendering und immer als primäre Option betrachtet werden sollte.
quelle
SDL_Texture
wird anstelle des normalen RAM in den VRAM Ihrer Grafikkarte geladen.quelle
Oberflächen verwenden Ihren RAM und Texturen verwenden Ihre Grafikkarte, die schneller als die Oberflächen ist.
quelle
Weitere Informationen dazu finden Sie in:
https://thenumbat.github.io/cpp-course/sdl2/05/05.html
Ich hoffe es hilft dir!
quelle