Unterschied zwischen Oberfläche und Textur (SDL / allgemein)
Lesezeit: 4 Minuten
ps-aux
Kann mir jemand in einfachen Worten erklären, was der Unterschied zwischen Textur und Oberfläche ist? Ich habe es gebraucht gesehen SDL2 wie SDL_Surface und SDL_Texture. SDL_Textureentsteht aus SDL_Surface die wiederum aus Bild/Bitmap erstellt wird. Beides sind Ansammlungen von Pixeln. Aber ich sehe den Hauptunterschied zwischen ihnen nicht (hat etwas mit der GPU zu tun?)
Ich habe versucht, es zu googeln, aber alle Erklärungen, die ich gefunden habe, waren zu komplex, um sie zu verstehen, ohne mich eingehender mit Computergrafiken zu befassen.
Schauen Sie sich meine Antwort hier an: stackoverflow.com/questions/21007329/what-is-a-sdl-renderer/… Es wird erklärt SDL_Texture und SDL_Surface ebenso gut wie SDL_Renderer. Im Algemeinen, SDL_Texture wird zum Rendern verwendet, aber wenn Sie Texturinformationen laden, verwenden Sie SDL_Image oder SDL_ttferhalten Sie die Daten als SDL_Surface
– Olevegard
27. Januar 2014 um 22:15 Uhr
@olevegard Diese Antwort ist so ziemlich ein Copy-Paste, ich hätte wirklich gerne eine Antwort mit etwas Wissen.
– Dies
27. Januar 2014 um 22:26 Uhr
Nun, wie Sie annehmen, SDL_Surface ist nur eine Sammlung von Pixeln während SDL_Texture ist an efficient, driver-specific representation of pixel data was bedeutet, dass es von der GPU verwendet werden kann wiki.libsdl.org/SDL_Texture. Hat das deine Frage beantwortet? Sie sollten wirklich tiefer in die Computergrafik eintauchen, um mehr zu verstehen
– Olevegard
27. Januar 2014 um 22:54 Uhr
@olevegard Schade, dass du das nicht in deine Antwort geschrieben hast. Hier ist Ihre Chance.
– Dies
28. Januar 2014 um 11:27 Uhr
Peter Abdulin
Grundsätzlich hat Ihre Annahme “etwas mit der GPU zu tun?” ist richtig.
SDL_Surface verwendet wird Software Wiedergabe. Wie saloomi2012 richtig bemerkt hat, verwenden Sie beim Software-Rendering normalen RAM zum Speichern von Bilddaten. Daher können Sie in den meisten Fällen direkt auf den mit der Oberfläche verbundenen Datenpuffer zugreifen und seinen Inhalt ändern, dh er verwendet die CPU, daher die Software Name.
SDL_Texture andererseits wird verwendet in a Hardware- Beim Rendern werden Texturen im VRAM gespeichert und Sie haben keinen direkten Zugriff darauf wie bei SDL_Surface. Die Rendering-Vorgänge werden durch die GPU beschleunigt, indem intern entweder die OpenGL- oder die DirectX-API (nur unter Windows verfügbar) verwendet wird, die wiederum Ihre Videohardware verwenden Hardware- Wiedergabenamen.
Unnötig zu sagen, dass Hardware-Rendering um Größenordnungen schneller ist als Software-Rendering und immer als primäre Option betrachtet werden sollte.
Wenn Hardwarebeschleunigung verfügbar ist, hat die Verwendung von SDL_Surface einen Vorteil? ZB für kleine Rendering-Operationen ist der Aufwand für den Gang zur Hardware zu groß?
– Timmos
8. Juli 2015 um 8:30 Uhr
@Timmos Hardware-Rendering wird immer schneller sein als Software. Eine Softwareoberfläche hat jedoch einen Vorteil: Da sie im CPU-zugänglichen Hauptspeicher abgelegt ist, können Sie Daten direkt darauf schreiben. Dies kann nützlich sein, wenn Sie eine Textur in Echtzeit generieren möchten, beispielsweise als prozedural generierter Inhalt in Videospielen. (Beachten Sie jedoch, dass heutzutage viele Arten der prozeduralen Generierung auch auf der GPU mit Shadern durchgeführt werden können.)
– cemper93
7. April 2016 um 20:08 Uhr
@Timmos Sie haben die volle Kontrolle darüber, wie Oberflächen bearbeitet, generiert, vollständig gelesen und geschrieben werden, ich meine wirklich … Kontrolle ist das, was eine Oberfläche Ihnen gibt. OpenGL und solche APIs müssen mit einer GPU funktionieren, da GPU-Hersteller keinen direkten Zugriff auf die GPU zulassen, weshalb Sie oft Leute hören werden, die sich über Ineffizienzen mit OpenGL oder DX oder einfach nur dumme Dinge beschweren, die diese APIs tun, weil sie etwas schneller oder effizienter schreiben könnten, aber sie können nicht, weil sie keinen Zugriff auf die GPU haben.
– Trevor Hart
9. Oktober 2016 um 20:21 Uhr
Mai Rat warum SDL_FillRect ist dann schneller SDL_RenderFillRect? F: stackoverflow.com/q/65450100/4632019
– Eugen Konkow
26. Dezember 2020 um 10:34 Uhr
SDL_Texture statt in den normalen RAM in den VRAM Ihrer Grafikkarte geladen.
Evander
Oberflächen verwenden Ihren Arbeitsspeicher und Texturen verwenden Ihre Grafikkarte, die schneller ist als die Oberflächen.
Wie in der letzten Lektion erwähnt, sind Texturen das GPU-Rendering-Äquivalent von Oberflächen. Daher werden Texturen fast immer aus Oberflächen erstellt, indem die Funktion SDL_CreateTextureFromSurface() verwendet wird. Diese Funktion macht mehr oder weniger das, was Sie erwarten würden – die Parameter sind der Rendering-Kontext und eine Oberfläche, aus der die Textur erstellt wird. Wie bei anderen Erstellungsfunktionen wird bei einem Fehler NULL zurückgegeben.
Ich hoffe es hilft dir!
14211000cookie-checkUnterschied zwischen Oberfläche und Textur (SDL / allgemein)yes
Schauen Sie sich meine Antwort hier an: stackoverflow.com/questions/21007329/what-is-a-sdl-renderer/… Es wird erklärt
SDL_Texture
undSDL_Surface
ebenso gut wieSDL_Renderer
. Im Algemeinen,SDL_Texture
wird zum Rendern verwendet, aber wenn Sie Texturinformationen laden, verwenden SieSDL_Image
oderSDL_ttf
erhalten Sie die Daten alsSDL_Surface
– Olevegard
27. Januar 2014 um 22:15 Uhr
@olevegard Diese Antwort ist so ziemlich ein Copy-Paste, ich hätte wirklich gerne eine Antwort mit etwas Wissen.
– Dies
27. Januar 2014 um 22:26 Uhr
Nun, wie Sie annehmen,
SDL_Surface
ist nur eine Sammlung von Pixeln währendSDL_Texture
istan efficient, driver-specific representation of pixel data
was bedeutet, dass es von der GPU verwendet werden kann wiki.libsdl.org/SDL_Texture. Hat das deine Frage beantwortet? Sie sollten wirklich tiefer in die Computergrafik eintauchen, um mehr zu verstehen– Olevegard
27. Januar 2014 um 22:54 Uhr
@olevegard Schade, dass du das nicht in deine Antwort geschrieben hast. Hier ist Ihre Chance.
– Dies
28. Januar 2014 um 11:27 Uhr