2016-04-02 24 views
0

Zunächst einmal bin ich relativ neu. Ich freue mich darauf, sowohl die SDL2- als auch die SFML2-Bibliotheken für Game Dev aufzunehmen. (Und andere Dinge).Software und Hardware-Rendering in SDL2/SFML2

Jetzt weiß ich in der Tat, dass sowohl SDL2 als auch SFML2 in der Lage sind, OpenGL-fähige Kontexte zu erstellen, durch die OpenGL-Grafikprogrammierung durchgeführt werden kann.

Aber online habe ich Diskussionen gelesen, in denen Leute etwas zu dem Effekt sagten "SDL 1.2 ist softwarebeschleunigt, SDL2 und SFML2 sind standardmäßig hardwarebeschleunigt". Ich weiß, dass Software-Rendering Grafik mit CPU allein ist. Während Hardware-Rendering Grafikkarten/Pipeline verwendet.

Also meine Frage ist, in Bezug auf dieses Spiel Bibliotheken:

Teil 1: wenn jemand sagt, eine Software/Hardware acc.by Standard ist, was bedeutet er? Ist es das (meine Vermutung) wenn SFML2 Hardware acc. Standardmäßig werden sogar grundlegende 2d-Grafiken mithilfe von Hardware-Rendering als Back-End-Pipeline ausgeführt, auch wenn ich im Code keine Hardware-Rendering-Programmierung vorgenommen habe.

Teil 2: Und wenn das stimmt, gibt es eine Option innerhalb dieser Bibliotheken, um das auf Software-Beschleunigung/-Rendering zu setzen?

Teil 3: Welche dieser 2 Bibliotheken (SDL2 vs SFML2) hat insgesamt bessere Leistung/Geschwindigkeit?

Vielen Dank im Voraus für jede Antwort und Entschuldigung, wenn Sie die Frage dumm fanden.

Antwort

0

Ich kann nichts über SFML sagen (aber fast sicher, dass die Dinge sehr nahe sind), aber für SDL ist es wie du sagst. In SDL1 2d Zeichnung als blitting direkt auf der Anzeigeoberfläche implementiert, und dann diese Oberfläche zur Anzeige - so vor allem Software (obwohl kleinere hw Beschleunigung ist immer noch möglich). SDL2 haben SDL_Renderer und Texturen (die GPU-Seite Bilder oder Renderziele sind) und jede grundlegende Zeichnung, die Renderer kann durch das eine oder andere Backend beschleunigt werden. Welches Backend ausgewählt wird, hängt von dem System ab, das Ihr Programm ausführt, und den Benutzereinstellungen - z. es wäre Standard für Linux, d3d für Fenster auf OpenGL (aber trotzdem verwenden opengl), OpenGLES für Android/ios, etc ..

können Sie Software-Renderer verwenden entweder explizit SDL_CreateSoftwareRenderer Aufruf oder hint SDL software Treiber zu verwenden oder überschreiben Sie es sogar, indem Sie SDL_RENDER_DRIVER Umgebungsvariable setzen.

Wenn Sie beabsichtigen, OpenGL für 3D-Grafiken zu verwenden - dann ignorieren Sie einfach alles und erstellen ein Fenster mit OpenGL-Kontext wie gewohnt, und niemals SDL_Renderer.

+0

Mit den Teilen "hinweis" und "SDL_RENDER_DRIVER" meinten Sie einfach die Software-Rendering-Substitute zu verwenden, die für Software-Rendering von OpenGL/D3D-Aufrufen auf diesem System vorgesehen sind (zB Mesa-Treiber für OpenGL, Swiftshader für D3D)? – user2873330

+0

Leider kann ich Ihren Kommentar nicht verstehen. Im Grunde wird SDL aufgefordert, für alle Rendering-Funktionen eine andere Implementierung zu verwenden (z. B. [SDL_RenderDrawLine] (https://wiki.libsdl.org/SDL_RenderDrawLine)). – keltar