Vertex Buffer Objects (VBO)

Da sich die Frage aus dem letzten Artikel geklärt hat (ja, OpenGL ist SDL wahrlich aus vielerlei Gründen vorzuziehen) möchte ich nun mein neu erwonnenes Wissen teilen.

In diesem Artikel möchte ich mich mit Vertex Buffer Objects, kurz VBO, beschäftigen.
Viele werden den folgenden Sachverhalt kennen oder zumindest in der Theorie nachvollziehen können.
Angenommen wir haben eine TileMap. Den sichtbaren Ausschnitt der Karte (View) werden wir mit sehr hoher Wahrscheinlichkeit nicht in jedem Frame ändern, sondern er wird mehrere Frames überstehen. Je nach Kartengröße eventuell sogar die gesamte Spielzeit, da gar kein Scrolling nötig ist.
Versteht sich von selbst: ist die gesamte Karte kleiner oder gleich groß wie das Fenster -> kein Scrollen notwendig, da alles bereits zu sehen ist.
Allerdings zeichnet man üblicherweise in jedem Frame wieder und wieder die gesamte Karte. Und das braucht bei größeren Karten eine Menge Rechenlast.
Man kann zwar das ganze etwas abmildern, in dem man von vorn herein nicht sichtbare Teile der Karte nicht zeichnet, aber die sichtbaren Tiles/Teile der Karte müssen dennoch immer und immer wieder über den Bus in den Grafikspeicher.
More »

OpenGL oder SDL?

Die Frage stellt sich mir mehr und mehr.
Ich arbeite derzeit in den letzten Zügen an Dgame 1.6 und möchte danach direkt mit den Arbeiten an Version 1.7 beginnen.
Dort soll die große Änderung der Umstieg von SDL zu OpenGL sein, wobei nach neueren Kenntnisstand eher eine Symbiose zustande käme.
So würde man mittels der SDL das eigentliche Fenster erstellen und würde mit SDL_image weiterhin Bilder laden, diese dann aber, bzw. ihre Pixelsturktur, in eine GL Textur laden. Für etwaige Bildverarbeitung würden dann SDL spezifische Funktionen zu Hilfe genommen werden, wie es jetzt bereits der Fall ist.
OpenGL bzw. dessen Texturen würden für schnelleres und performanteres blitten und etwaige andere Bild Verarbeitungs Maßnahmen zu Hilfe genommen werden, wie etwa Rotation und Zoom.
More »

Sprites, Nachtrag

Vor einiger Zeit verfasste ich ja bereits ein Tutorial zu Sprites und der zugehörigen Klasse.
Mittlerweile weiß ich, dass das ganze wesentlich einfacher bzw. besser ginge, unter anderem mittels des Keywords @property.
More »

Dgame – pygame für die D Programming Language, Preview

Für die bisher im weiten Spektrum der Spieleprogrammierer recht unbekannte Sprache D Programming Language, welche im Grunde eine weiterentwickelte Form von C++ ist und so gut wie alle, wenn nicht alle, Vorzüge aus C++ besitzt, existieren zur Zeit leider noch recht wenige Lib’s und Frameworks. Dabei weist D viel weniger Mängel & Komplexität auf und ist dazu weniger überladen & wesentlich einfacher zu erlernen, laut meiner bescheidenen Meinung jedenfalls. Dazu kommt, dass die meisten Features und Weiterentwicklungen vom neuen aber noch auf sich warten lassenden Standard von C++ (C++0x) bereits implementiert sind und D somit eine Art modernes C++ darstellt.
Darüber hinaus ist die gesamte C Bibliothek fester Bestandteil und somit ist C Kompatibilität absolut gewährleistet.
Allerdings ist D viel zu neu, als das so viele Frameworks wie für C++, welche ja schon seit anno ’79 auf der Welt ist (D seit 2007, Quelle zu C++, Quelle zu D), existieren könnten. Durch das Projekt Derelict existiert allerdings ein Binding für einige C++ Bibliotheken (darunter SDL & OpenGL bspw.) und auch Allegro existiert bereits in D.

Als alter Python und Pygame Fan vermisste ich allerdings die Einfacheit und vorallen die Objekt-orientierte Benutzung einer solchen Lib., denn sowohl die SDL als auch OpenGL sind beinahe (mir fällt im Moment kein Objekt-orientiertes Beispiel ein) komplett funktional, und das liegt nicht an dem D – Binding, denn auch in der offiziellen Dokumentation zur Erklärung von SDL ansich und dessen Funktionsweise finden sich nur Funktionen, keine Klassen.
Die einzige Grafik Bibliothek in C++ die mir daher gefiel war SFML, da sie völlig Objekt-orientiert funktioniert.
SFML gibt es bereits für Python (PySFML) und auch für D existiert ein Binding (DSFML). Allerdings wird, auf Grund der bis dato mangelnden Verbreitung und Neuheit der Sprache, bisher eher zögerlich an DSFML gearbeitet, weswegen die aktuellste Version auf der 1.3′er Version von SFML beruht, wobei SFML für C++ bereits bei der 2′er Version angelangt ist (Quelle).
Deswegen entschied ich mich letzlich für Derelict. Auch dort existiert zwar ein Binding für SFML, doch dieses wird von Derelict (bislang?!) leider nur Funktional angeboten, was den ganzen Effekt zunichte macht.
Also setzte ich mich daran, einen solchen OOP Wrapper auch für D zu schreiben, welcher, wie Pygame, auf der SDL aufbaut.
More »

SDL_gfx unter D(erelict)

In diesem Artikel möchte ich mich noch einmal herzlich in meiner Muttersprache ( ;) ) bei aldacron und vor allem michaelp aus dem dsource forum bedanken.
Letzteren gelang schon vor einiger Zeit die Portierung von SDL_gfx in Derelict (Wer SDL_gfx nicht kennt: SDL_gfx stellt unter anderem Rotations- und Zoom Funktionen bereit, um ein Bild dementsprechend zu modifizieren. Bisher und wohl auch in naher Zukunft ist allerdings keine offizielle Portierung bzw. Aufnahme von SDL_gfx in Derelict vorgesehen. Quelle) und er half mir bei der Code Übernahme und sämtlichen Installations Problemen. Hier nochmal mein Thread diesbezüglich. Dort kann man den gesamten Gesprächsverlauf (allerdings in Englisch) und ebenso wertvolle Tipps bzw. Hilfe bei einer möglichen Installation nachlesen. Vorallen bei der Erstellung der .lib und der .dll Datei gab es eine Menge Probleme.
Um letztere dann zu finden musste ich das gesamte Internet durchforsten, aber letzlich wieder auf michaelp’s Hilfe hoffen. Er fand in den Tiefen des Netzes einen passenden Beitrag mit Projekt Code zur Erstellung der .dll und, sofern dies nicht klappt, wie in meinem Fall, die bereits fertige SDL_gfx.dll.

Ich will hier nun alles in einem Paket zum Download anbieten: SDL_gfx.dll, sdlgfx.lib sowie sdlgfx.d und sdlgfxfont.d, zum Download.

P.S: Mancher mag sich fragen, weswegen ich nicht einfach auf OpenGL zurückgegriffen habe (so auch ponce in den verlinkten Thread). Hierzu kann ich nur sagen, dass mir zwar schon klar ist, dass OpenGL Hadware beschleunigt arbeitet, aber mir gefiel der Gedanke nicht mich nun auch noch mit OpenGL unter Derelict auseinanderzusetzen, noch SDL mit OpenGL so stark miteinander zu vermischen.

Nichts desto trotz hier nochmal ein besonderes Danke an michaelp für sein Durchhaltevermögen mir gegenüber und seiner ruhigen Art, mir alles verständnisvoll zu erklären, sowie auch an aldacron für das gesamte Derelict Projekt.

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress