Kann mir jemand mit einfachen Worten erklären, was der Unterschied zwischen Textur und Oberfläche ist? Ich sah es in SDL2
als SDL_Surface
und SDL_Texture
verwendet. SDL_Texture
wird aus SDL_Surface
erstellt, der wiederum aus image/bitmap erstellt wird. Beide sind eine Sammlung von Pixeln. Aber ich sehe nicht den Hauptunterschied zwischen ihnen (hat etwas mit GPU zu tun?)
Ich habe versucht, es zu googeln, aber alle Erklärungen, die ich fand, waren zu komplex, um sie zu verstehen, ohne sich eingehender mit Computergrafiken auseinanderzusetzen.
Grundsätzlich hat Ihre Vermutung "etwas mit GPU zu tun?" ist richtig.
SDL_Surface
wird beim Rendern von software verwendet. Mit dem Rendern von Software, wie saloomi2012 richtig bemerkt, verwenden Sie reguläre RAM zum Speichern von Bilddaten. In den meisten Fällen können Sie also direkt auf den Datenpuffer zugreifen, der der Oberfläche zugeordnet ist, und dessen Inhalt ändern, d. H. Er verwendet eine CPU, daher den Namen software.
SDL_Texture
wird dagegen in einem hardware Rendering verwendet, Texturen werden im VRAM gespeichert und Sie haben keinen direkten Zugriff darauf wie bei SDL_Surface
. Die Rendering-Vorgänge werden durch GPU beschleunigt, wobei intern entweder die OpenGL- oder die DirectX-API (nur unter Windows verfügbar) verwendet wird, die wiederum Ihre Videohardware verwendet, daher hardware Rendering-Name.
Es ist unnötig zu erwähnen, dass Hardware-Rendering um Größenordnungen schneller ist als Software-Rendering und sollte immer als primäre Option betrachtet werden.
SDL_Texture
wird anstelle des regulären Arbeitsspeichers in das VRAM Ihrer Grafikkarte geladen.
Oberflächen verwenden Ihr RAM und Texturen verwenden Ihre Videokarte schneller als die Oberflächen.
Es gibt mehr Informationen dazu in:
https://thenumbat.github.io/cpp-course/sdl2/05/05.html
Wie in der letzten Lektion erwähnt, sind Texturen die GPU-Wiedergabe Äquivalent von Oberflächen. Daher werden Texturen fast immer aus .__ erstellt. Flächen mit der Funktion SDL_CreateTextureFromSurface (). Diese Funktion funktioniert mehr oder weniger, was Sie erwarten würden - die Parameter sind die Renderkontext und eine Oberfläche, aus der die Textur erstellt werden soll. Wie bei Bei anderen Erstellungsfunktionen wird bei einem Fehler NULL zurückgegeben.
Ich hoffe es hilft dir!