2D-Performance: SDL vs. SFML

Simple Directmedia Layer: Portable Spieleprogrammierung
Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

2D-Performance: SDL vs. SFML

Beitrag von Glocke » Di Jan 15, 2013 7:49 pm

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 :)

Benutzeravatar
Yoghurt
Beiträge: 79
Registriert: Fr Nov 16, 2012 8:01 am
Wohnort: Niederbayern

Re: 2D-Performance: SDL vs. SFML

Beitrag von Yoghurt » Mi Jan 16, 2013 7:38 am

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.
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.
Das Rendern könntest du auch unabhängig vom verwendeten Framework implementieren.

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

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: 2D-Performance: SDL vs. SFML

Beitrag von Glocke » Mi Jan 16, 2013 8:42 am

Yoghurt hat geschrieben:Edit: Hier der Performancevergleich in einem Thread im SFML Forum.
Das Ergebnis bei mir:
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...
Yoghurt hat geschrieben:Das Rendern könntest du auch unabhängig vom verwendeten Framework implementieren.
Ich habe bisher Model und View getrennt. Für die View habe ich eine eigene Sprite-Klasse, von der ich den Rest abgeleitet habe.

LG Glocke

nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

Re: 2D-Performance: SDL vs. SFML

Beitrag von nufan » Mi Jan 16, 2013 9:35 am

Yoghurt hat geschrieben:Edit: Hier der Performancevergleich in einem Thread im SFML Forum.
Dazu sollte man vielleicht noch anmerken, dass im Test SDL ohne OpenGL verwendet wird.

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: 2D-Performance: SDL vs. SFML

Beitrag von Glocke » Mi Jan 16, 2013 11:31 am

nufan hat geschrieben:Dazu sollte man vielleicht noch anmerken, dass im Test SDL ohne OpenGL verwendet wird.
Inwiefern ist das relevant?

nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

Re: 2D-Performance: SDL vs. SFML

Beitrag von nufan » Mi Jan 16, 2013 11:38 am

Glocke hat geschrieben:
nufan hat geschrieben:Dazu sollte man vielleicht noch anmerken, dass im Test SDL ohne OpenGL verwendet wird.
Inwiefern ist das relevant?
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 liefern :)

Benutzeravatar
Yoghurt
Beiträge: 79
Registriert: Fr Nov 16, 2012 8:01 am
Wohnort: Niederbayern

Re: 2D-Performance: SDL vs. SFML

Beitrag von Yoghurt » Mi Jan 16, 2013 11:54 am

Glocke hat geschrieben:
nufan hat geschrieben:Dazu sollte man vielleicht noch anmerken, dass im Test SDL ohne OpenGL verwendet wird.
Inwiefern ist das relevant?
Weil SFML auch OpenGL verwendet.
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."

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: 2D-Performance: SDL vs. SFML

Beitrag von Glocke » Mi Jan 16, 2013 12:33 pm

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

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?

nufan
Wiki-Moderator
Beiträge: 2448
Registriert: Sa Jul 05, 2008 3:21 pm

Re: 2D-Performance: SDL vs. SFML

Beitrag von nufan » Mi Jan 16, 2013 12:54 pm

Glocke hat geschrieben:
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.
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.
http://www.tomprogs.at/tutorials/spiele ... lung.xhtml :)
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?
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
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: 2D-Performance: SDL vs. SFML

Beitrag von Glocke » Mi Jan 16, 2013 12:57 pm

Genau das habe ich darunter verstanden - wollte nur auf Nummer sicher gehen :D
Glocke hat geschrieben:Normal verwendest du OpenGL nur zum Zeichnen und alles andere macht eine andere Bibliothek, wie eben SFML, SDL oder auch GLUT.
Und dann verwende ich SDL und fürs zeichnen OpenGL?
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.?

Antworten