2D-Performance: SDL vs. SFML
2D-Performance: SDL vs. SFML
Hi,
im Bereich plattformunabhängiger 2D-Frameworks bin ich sowohl auf SDL als auch SFML gestoßen. Doch worin unterscheiden sich beide? SDL scheint prozedural aufgebaut, SFML setzt auf eine umfangreiche Klassenstruktur. Beim googeln habe ich Hinweise gefunden, man solle wenn möglich SFML verwenden. Gibt es Performancevergleiche zwischen SDL- und SFML-basierten Anwendungen?
Ich versuche eine möglichst "schnelles" Game-Framework (für etwas in Richtung Diablo 2 oder auch Command & Conquer Tiberian Sun) zu erstellen. Dabei bin ich inzwischen bei C++ angelangt und habe bisher mit SDL ganz gute Erfolge erzielt. Allerdings bietet SFML mehr Funktionalität - die ich sonst mit SDL selber nachbilden müsste (z.B. im Bezug auf die Netzwerkkommunikation via TCP bzw. UDP). Nun will ich aber nicht SDL und SFML mischen, nur weil die Netzwerkkommunikation mit letzterem bequemer geht. Andererseits will ich nicht unbedingt das Rendern der Entities und Tiles nochmal mit SFML schreiben, nur um zu testen, ob SFML in Sachen Geschwindigkeit auf dem gleichen Niveau arbeitet.
Soweit ich das Überblicke erzeugt die Verwendung von Klassen (wie bei SFML) mehr Overhead als ein rein prozeduraler Stil (wie bei SDL). Zwar verwende ich selber auch Klassen, nur frage ich mich, ob ich mit einem prozeduralen Unterbau (mit SDL) da Geschwindigkeit gewinnen kann. Sicherlich ist der Geschwindigkeitsunterschied zwischen SDL und SFML auf modernen Rechnern irrelevant. Allerdings arbeite ich selber fast nur an einem Netbook und will daher auf möglichst performantem Unterbau aufbauen.
LG Glocke
/EDIT: ich merk gerade, das wäre im SDL-Unterforum besser aufgehoben Sorry
/EDIT2: danke fürs verschieben
im Bereich plattformunabhängiger 2D-Frameworks bin ich sowohl auf SDL als auch SFML gestoßen. Doch worin unterscheiden sich beide? SDL scheint prozedural aufgebaut, SFML setzt auf eine umfangreiche Klassenstruktur. Beim googeln habe ich Hinweise gefunden, man solle wenn möglich SFML verwenden. Gibt es Performancevergleiche zwischen SDL- und SFML-basierten Anwendungen?
Ich versuche eine möglichst "schnelles" Game-Framework (für etwas in Richtung Diablo 2 oder auch Command & Conquer Tiberian Sun) zu erstellen. Dabei bin ich inzwischen bei C++ angelangt und habe bisher mit SDL ganz gute Erfolge erzielt. Allerdings bietet SFML mehr Funktionalität - die ich sonst mit SDL selber nachbilden müsste (z.B. im Bezug auf die Netzwerkkommunikation via TCP bzw. UDP). Nun will ich aber nicht SDL und SFML mischen, nur weil die Netzwerkkommunikation mit letzterem bequemer geht. Andererseits will ich nicht unbedingt das Rendern der Entities und Tiles nochmal mit SFML schreiben, nur um zu testen, ob SFML in Sachen Geschwindigkeit auf dem gleichen Niveau arbeitet.
Soweit ich das Überblicke erzeugt die Verwendung von Klassen (wie bei SFML) mehr Overhead als ein rein prozeduraler Stil (wie bei SDL). Zwar verwende ich selber auch Klassen, nur frage ich mich, ob ich mit einem prozeduralen Unterbau (mit SDL) da Geschwindigkeit gewinnen kann. Sicherlich ist der Geschwindigkeitsunterschied zwischen SDL und SFML auf modernen Rechnern irrelevant. Allerdings arbeite ich selber fast nur an einem Netbook und will daher auf möglichst performantem Unterbau aufbauen.
LG Glocke
/EDIT: ich merk gerade, das wäre im SDL-Unterforum besser aufgehoben Sorry
/EDIT2: danke fürs verschieben
Rage - ein "modernes" Rogue-like (C++11, SFML)
Re: 2D-Performance: SDL vs. SFML
Hallo Glocke,
SFML benutzt OpenGL (also Hardwarerendering) und SDL einen Softwarerenderer. Daher wird SFML in Sachen Performance wohl die Nase vorn haben. Irgendwo auf der SFML-Seite habe ich auch mal einen Performancevergleich gefunden (glaube ich), wenn ich ihn wieder gefunden habe poste ich ihn dir noch als Referenz.
Edit: Hier der Performancevergleich in einem Thread im SFML Forum.
Grüße
Yoghurt
SFML benutzt OpenGL (also Hardwarerendering) und SDL einen Softwarerenderer. Daher wird SFML in Sachen Performance wohl die Nase vorn haben. Irgendwo auf der SFML-Seite habe ich auch mal einen Performancevergleich gefunden (glaube ich), wenn ich ihn wieder gefunden habe poste ich ihn dir noch als Referenz.
Edit: Hier der Performancevergleich in einem Thread im SFML Forum.
Das Rendern könntest du auch unabhängig vom verwendeten Framework implementieren.Glocke hat geschrieben:Andererseits will ich nicht unbedingt das Rendern der Entities und Tiles nochmal mit SFML schreiben, nur um zu testen, ob SFML in Sachen Geschwindigkeit auf dem gleichen Niveau arbeitet.
Grüße
Yoghurt
"Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."
Re: 2D-Performance: SDL vs. SFML
Das Ergebnis bei mir:Yoghurt hat geschrieben:Edit: Hier der Performancevergleich in einem Thread im SFML Forum.
1/ Test : sprites
SDL displayed 28 frames
SFML displayed 39 frames
--> SFML is 1.4x as fast as SDL
2/ Test : alpha-blended sprites
SDL displayed 15 frames
SFML displayed 36 frames
--> SFML is 2.4x as fast as SDL
3/ Test : rotating sprites
SDL displayed 8 frames
SFML displayed 34 frames
--> SFML is 4.2x as fast as SDL
4/ Test : static text
SDL displayed 740 frames
SFML displayed 295 frames
--> SFML is 0.4x as fast as SDL
5/ Test : dynamic text
SDL displayed 60 frames
SFML displayed 294 frames
--> SFML is 4.9x as fast as SDL
Press enter to exit...
Ich habe bisher Model und View getrennt. Für die View habe ich eine eigene Sprite-Klasse, von der ich den Rest abgeleitet habe.Yoghurt hat geschrieben:Das Rendern könntest du auch unabhängig vom verwendeten Framework implementieren.
LG Glocke
Rage - ein "modernes" Rogue-like (C++11, SFML)
Re: 2D-Performance: SDL vs. SFML
Dazu sollte man vielleicht noch anmerken, dass im Test SDL ohne OpenGL verwendet wird.Yoghurt hat geschrieben:Edit: Hier der Performancevergleich in einem Thread im SFML Forum.
Re: 2D-Performance: SDL vs. SFML
Inwiefern ist das relevant?nufan hat geschrieben:Dazu sollte man vielleicht noch anmerken, dass im Test SDL ohne OpenGL verwendet wird.
Rage - ein "modernes" Rogue-like (C++11, SFML)
Re: 2D-Performance: SDL vs. SFML
Ich würde sagen OpenGL ist doch noch um einiges schneller als SDL. Aber ich denke da kann dir Kerli sicher eine bessere und ausführlichere Antwort liefernGlocke hat geschrieben:Inwiefern ist das relevant?nufan hat geschrieben:Dazu sollte man vielleicht noch anmerken, dass im Test SDL ohne OpenGL verwendet wird.
Re: 2D-Performance: SDL vs. SFML
Weil SFML auch OpenGL verwendet.Glocke hat geschrieben:Inwiefern ist das relevant?nufan hat geschrieben:Dazu sollte man vielleicht noch anmerken, dass im Test SDL ohne OpenGL verwendet wird.
Aber das hier der "normale" Softwarerenderer von SDL verwendet wird, könnte man denke ich durch meinen vorherigen Beitrag (in welchem der Link war) erschließen.
Ich denke SDL mit OpenGL könnte sogar noch ein Quäntchen schneller sein als SFML, da man bei SDL sehr wahrscheinlich nicht so großen Overhead durch das Framework hat.
Auf dieses Quäntchen Performance kann man aber denke ich getrost verzichten, wenn man sich vor Augen führt was SFML alles bietet im Gegensatz zu SDL.
"Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."
Re: 2D-Performance: SDL vs. SFML
Was müsste ich denn tun, um SDL mit OpenGL zu verwenden? Ich hab es bisher immer "normal" verwendet und auf die SW_SURFACE oder HW_SURFACE normal Bilder draufgeblittet.Yoghurt hat geschrieben:Ich denke SDL mit OpenGL könnte sogar noch ein Quäntchen schneller sein als SFML, da man bei SDL sehr wahrscheinlich nicht so großen Overhead durch das Framework hat.
Geht das, was du meinst, in die Richtung direkt mit OpenGL und ganz vielen Dreiecken zu arbeiten, und zum Laden von Grafiken oder dem Anzeigen des Fensters SDL zu verwenden?
Rage - ein "modernes" Rogue-like (C++11, SFML)
Re: 2D-Performance: SDL vs. SFML
http://www.tomprogs.at/tutorials/spiele ... lung.xhtmlGlocke hat geschrieben:Was müsste ich denn tun, um SDL mit OpenGL zu verwenden? Ich hab es bisher immer "normal" verwendet und auf die SW_SURFACE oder HW_SURFACE normal Bilder draufgeblittet.Yoghurt hat geschrieben:Ich denke SDL mit OpenGL könnte sogar noch ein Quäntchen schneller sein als SFML, da man bei SDL sehr wahrscheinlich nicht so großen Overhead durch das Framework hat.
Ja, das sollte gehen. Normal verwendest du OpenGL nur zum Zeichnen und alles andere macht eine andere Bibliothek, wie eben SFML, SDL oder auch GLUT.Glocke hat geschrieben:Geht das, was du meinst, in die Richtung direkt mit OpenGL und ganz vielen Dreiecken zu arbeiten, und zum Laden von Grafiken oder dem Anzeigen des Fensters SDL zu verwenden?
Re: 2D-Performance: SDL vs. SFML
Genau das habe ich darunter verstanden - wollte nur auf Nummer sicher gehennufan hat geschrieben:http://www.tomprogs.at/tutorials/spiele ... lung.xhtml
Und dann verwende ich SDL und fürs zeichnen OpenGL?Glocke hat geschrieben:Normal verwendest du OpenGL nur zum Zeichnen und alles andere macht eine andere Bibliothek, wie eben SFML, SDL oder auch GLUT.
D.h. wenn ich eine Isometrische Darstellung (im Stil Diablo 2) erzeugen will, könnte ich mit Dreiecken meine IsoKacheln erstellen, die TileGrafik als Textur drauf usw.?
Rage - ein "modernes" Rogue-like (C++11, SFML)