SDL Zeitverschwendung?



  • Hallo,

    Wollte mal fragen was ihr über SDL denkt, ist das ganze Zeitverschwendung?

    Sollte man lieber DirectX oder OpenGL lernen?



  • Ich empfinde SDL als Zeitverschwendung, da es mit SFML eine (solange man nicht in C programmiert) weit bessere Alternative gibt.

    Allerdings passt diese Antwort natürlich nicht auf deine Frage. Die Frage die du dir stellen musst ist, was du erreichen willst. Willst du Spiele programmieren? Dann kann dir egal sein, wie die Pixel auf den Schirm kommen, Hauptsache es funktioniert. Dafür ist dann SFML (hust hust sdl hust) da. Es fasst die unterliegenden Prozeduren in abstraktere Strukturen zusammen, deren Sinn eigentlich nur ist, es dir einfacher zu machen damit Zeug zu entwickeln. Willst du also mit der Grafik, dem Sound etc. was erreichen, dann lohnt sich SFML/SDL natürlich viel mehr, als das lernen von OpenGL oder DirectGraphics.

    Bist du allerdings wirklich interessiert daran, wie die Pixel auf den Schirm kommen, dann ist SFML/SDL wirklich mehr oder weniger sinnlos (über den 'ui toll mein erstes eigenes fenster mit bild drin' Effekt hinaus)



  • Samyboy schrieb:

    Wollte mal fragen was ihr über SDL denkt, ist das ganze Zeitverschwendung?

    Wenn du in C++ programmierst, halte ich es für geeigneter, SFML zu verwenden. Das ist eine objektorientierte Multimediabibliothek, welche auch neben Grafik recht viel Funktionalität bietet (Event-Handling, Sound, Netzwerke, Threads, Unicode...). Im Gegensatz zu SDL kommt dir eine höhere Performance und ein besser strukturiertes Design (weil modernes C++ statt C) zu Gute, ausserdem wird die Bibliothek aktiv weiterentwickelt. Ich habe früher auch mit SDL gearbeitet und würde nicht mehr zurückwechseln.

    Samyboy schrieb:

    Sollte man lieber DirectX oder OpenGL lernen?

    DirectX und OpenGL arbeiten auf relativ tiefem Abstraktionslevel. Du müsstest dir vieles selbst programmieren, wozu dir fertige Grafikbibliotheken Arbeit abnehmen. Für 2D-Programmierung kommst du mit SFML schon recht weit. Der Vorteil ist, dass du bei Bedarf ohne Probleme mit OpenGL weiterarbeiten kannst, da SFML auf OpenGL aufbaut. Wenn du dich zum Beispiel in Richtung 3D-Programmierung bewegen willst, kannst du also von SFML Dinge wie Fenster-Erstellung und Events erledigen lassen, während du die Grafik direkt in OpenGL implementierst.



  • Fuer OpenGL brauchst du auf jedenfall einen Unterbau: OpenGL macht dir nur die 3D-Grafik, fuer Audio und Input (und Netzwerk, und Window-Handling, ...) brauchst du immer noch eine andere Library. Dafuer sind SFML oder SDL eine sehr, sehr beliebte Wahl.



  • Danke Leute, ich werde mir SFML anschauen 😃



  • Also hab mir mal SMFL ein bisschen angesehen und es gefällt mir! 😃

    Zumindest ist es C++ ^^.

    Eine Frage habe ich jedoch, sollte man mit SMFL Fenster erstellen, um darin die Games zu erstellen? Oder sollte man das ganze mit MFC oder WinAPI machen und bloss SMFL zum ausgeben von Sprites etc. nutzen?



  • Samyboy schrieb:

    Hallo,

    Wollte mal fragen was ihr über SDL denkt, ist das ganze Zeitverschwendung?

    Sollte man lieber DirectX oder OpenGL lernen?

    Das ist eine Bibliothek. Daran gibt es nicht so wahnsinnig viel zu lernen. Zeitverschwendung würde ich es also nicht nennen. Da sollten ein oder zwei Nachmittage durchaus ausreichen. Wenn du sie verwenden willst, wirst du eh mindestens eine Abstraktionsschicht drum herum bauen. D.h. du wirst in deinem Programm wahrscheinlich die eigentlichen Befehle von SDL oder OpenGL nur an sehr wenigen Stellen überhaupt aufrufen.

    Die Frage ist halt, was du machen willst. 2D? Dann ist SDL okay. 3D, dann kannst du SDL als Initialisierer für OpenGL nehmen.

    TravisG schrieb:

    Ich empfinde SDL als Zeitverschwendung, da es mit SFML eine (solange man nicht in C programmiert) weit bessere Alternative gibt.

    Das kommt immer darauf an, was man erreichen will. Die SDL läuft vorallem auf erheblich mehr Plattformen, als SFML. Die SFML einfach als besser zu bezeichnen, halte ich für ausgesprochen unobjektiv.



  • Samyboy schrieb:

    Eine Frage habe ich jedoch, sollte man mit SMFL Fenster erstellen, um darin die Games zu erstellen? Oder sollte man das ganze mit MFC oder WinAPI machen und bloss SMFL zum ausgeben von Sprites etc. nutzen?

    Ich sehe keinen Grund, den plattformabhängigen Low-Level-Weg einzuschlagen, wenn einem SFML das Ganze abnimmt. Es sei denn, du willst etwas erreichen, das SFML nicht kann, aber ein normales Problem sollte kein Problem sein.

    ProgChild schrieb:

    Wenn du sie verwenden willst, wirst du eh mindestens eine Abstraktionsschicht drum herum bauen. D.h. du wirst in deinem Programm wahrscheinlich die eigentlichen Befehle von SDL oder OpenGL nur an sehr wenigen Stellen überhaupt aufrufen.

    Meiner Erfahrung nach tendieren Hobby-Spieleprogrammierer (besonders noch nicht sehr fortgeschrittene) dazu, nicht besonders viele Gedanken ans Design zu verschwenden und von C++ nur gerade das allernötigste zu lernen, damit man etwas zu Stande bringt. Auch Trennung von Grafik und Logik ist nicht immer beliebt, da es eben ein Umdenken erfordert. Das ist zumindest mein Eindruck. Aber klar, idealerweise gestaltet man sein Design so, dass die Grafikschnittstelle bei Bedarf mit eher wenig Aufwand ausgetauscht werden kann.

    ProgChild schrieb:

    Die Frage ist halt, was du machen willst. 2D? Dann ist SDL okay.

    Ich muss sagen, ich bin mit SDL mit einem einfachen Jump'n'Run an die Grenzen der Performance gekommen, ausserdem habe ich einige grundlegende Funktionalität (zumindest im Hauptpack) vermisst. Und ja, ich habe optimiert, sogar soweit, dass ich wirklich nur das Allernötigste gezeichnet habe (sprich: Nie den ganzen Hintergrund, sondern immer nur die Rechtecke, die sich geändert haben). Aber kann natürlich dennoch sein, dass ich was übersehen habe, obwohl ich mich damals eigentlich recht gut in die Dokumentation eingelesen habe.

    ProgChild schrieb:

    Die SDL läuft vorallem auf erheblich mehr Plattformen, als SFML.

    Das scheint mir einer der wenigen verbleibenden Vorteile von SDL zu sein. Selbst als C-Programmierer hat man die Möglichkeit, das C-Binding von SFML verwenden.

    Meiner Meinung nach war SDL recht lange der übliche Weg, C/C++-Programmierern einen leichten Einstieg in die 2D-Spiele-/Grafikprogrammierung zu ermöglichen. Ich habe selbst diesen Pfad eingeschlagen, und natürlich recht viel gelernt. SDL ist sicher nicht schlecht, ich hielt damals sehr viel davon. Doch inzwischen gibt es mit SFML ein durchaus konkurrenzfähiges Framework, das viele – meiner Meinung nach nicht unerhebliche – Vorteile besitzt. Besonders für C++-Programmierer bietet es sich auf jeden Fall an, moderne Techniken der eigenen Sprache verwenden zu können.



  • Nexus schrieb:

    ProgChild schrieb:

    Die Frage ist halt, was du machen willst. 2D? Dann ist SDL okay.

    Ich muss sagen, ich bin mit SDL mit einem einfachen Jump'n'Run an die Grenzen der Performance gekommen, ausserdem habe ich einige grundlegende Funktionalität (zumindest im Hauptpack) vermisst. Und ja, ich habe optimiert, sogar soweit, dass ich wirklich nur das Allernötigste gezeichnet habe (sprich: Nie den ganzen Hintergrund, sondern immer nur die Rechtecke, die sich geändert haben). Aber kann natürlich dennoch sein, dass ich was übersehen habe, obwohl ich mich damals eigentlich recht gut in die Dokumentation eingelesen habe.

    SDL ist IIRC per default nicht hardwarebeschleunigt, daher ist die Performance nicht immer golden.



  • Blue-Tiger schrieb:

    SDL ist IIRC per default nicht hardwarebeschleunigt, daher ist die Performance nicht immer golden.

    Jain. Soweit ich weiß wird unter Windows standardmäßig GDI als Render-Backend verwendet. Es gibt aber eine Umgebungsvariable (warum auch immer man das so gemacht hat) mit derer man das DirectX (DirectDraw) Backend aktiviert.

    Das Problem ist, dass DirectDraw veraltet ist. Und bei neueren Grafikkarten wohl recht magere Performance liefert. Ich glaub Microsoft empfiehlt, dass man heut zu Tage auch für 2D Sachen, Direct3D nehmen sollte. Setzt man dies für die SDL um, so kann man 2D Sachen auch mit OpenGL machen. Ist eigentlich auch nicht so schwer.



  • Ich persönlich habe erst C dann C++ gelernt.
    Später habe ich versucht auf DirectX überzuspringen, aber das hat nicht funktioniert, da mein Verständnis für Vektoren und Matrizen noch nicht da war.
    Das haben wir dieses Jahr bald in der Schule dran.
    Damals war ich in der 8. Klasse. Jedenfalls hab ich erstmal viel mit der WinAPI gemacht (Buch: Petzold). Dann habe ich mich langsam an Grafik rangetastet mit der GDI. Ist sogar ein Apfelmännchenprogramm (AppleMan) rausgekommen (hat für eine Facharbeit gereicht, war ne glatte 1).
    Anfang 2009 habe ich mich dann wieder an DirectX rangemacht, und es läuft.

    Also mein Rat: Erst eine Zwischenstufe!


Anmelden zum Antworten