it-swarm.com.de

Unterschied zwischen Oberfläche und Textur (SDL/allgemein)

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

66
dev-null

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.

65
Petr Abdulin

SDL_Texture wird anstelle des regulären Arbeitsspeichers in das VRAM Ihrer Grafikkarte geladen. 

7
saloomi2012

Oberflächen verwenden Ihr RAM und Texturen verwenden Ihre Videokarte schneller als die Oberflächen.

2
Evander

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!

0
omotto