iPod Train Simulator
Es ist zu lange her, dass ich hier das letzte mal etwas über meine Softwareprojekte erzählt habe, daher will ich hier mal einen Überblick geben. Zuerst einmal geht es [Hubschrauber][hubi] ganz gut, ich habe aber lange nicht mehr daran rumprogrammiert. Statt dessen arbeite ich jetzt an etwas anderem, ein Projekt dass noch keinen Namen hat, aber mit etwas Glück trotzdem ganz interessant sein könnte.
![Im Augenblick sieht man einen grauen Bildschirm mit verschiedenen, unbeschrifteten Bedienelementen und einer blauen Lok](http://ferroequinologist.de/software/trainsim_screenshot.png)
Es handelt sich hierbei um einen Eisenbahnsimulator für iPhone und iPod touch. Ein bisschen Basisfunktionalität läuft auch schon. Um aber tatsächlich etwas interessantes zu produzieren, arbeite ich gerade an einem Leveleditor, und das ist noch leicht problematisch.
![Man sieht ein Mac OS X-Fenster, welches eine Fläche enthält auf der ein graues Gitter liegt, und darunter verschiedene Mac OS X-Bedienelemente planlos abgebildet sind.](http://ferroequinologist.de/software/leveleditor_ramissues.png)
Ich versuche, das Editieren der Textur komplett auf der GPU laufen zu lassen, aber aus irgend einem Grund erhalte ich dabei inkorrekte Werte. Auf nicht initialisierten Video-RAM zuzugreifen ist nun immer sehr lustig, da man nie weiß ob man Artefakte, einen Absturz (auch schon mal des kompletten Systems) oder, wie hier, Inhalte verschiedener anderer Fenster im System erhält.
Meine Standardlösung für so was ist Fehlersuche mit Apples OpenGL Profiler, ein sehr nützliches (und kostenloses) Tool um zu analysieren, wo man mit OpenGL was für Fehler macht. Das Problem: Er funktioniert nicht.
Seit Mac OS X 10.5 Leopard unterstützt Cocoa einen Garbage-Collector. Das heißt, dass ich Arbeitsspeicher (normalen, nicht den der Grafikkarte) nicht selbst verwalten muss, sondernd ihn einfach verwende, und wenn ich ihn nicht mehr brauche erkennt das schon einer und kümmert sich drum. Das funktioniert gut und ist in anderen Umgebungen schon seit Jahren Standard, nur muss aller Code, der im Programm geladen wird, den GC unterstützen. OpenGL-Profiler lädt selbt auch Code in mein Programm, und dieser unterstützt den Garbage Compiler nicht.
Wenn ich also das Problem nicht bald finde, werde ich wohl den gesamten Leveleditor auf manuelle Speicherverwaltung umstellen müssen, einfach damit ich Fehler besser finde. Die Moral von der Geschichte: Verwende niemals den Garbage Collector in Programmen, die viel OpenGL verwenden.
Geschrieben am 2. April 2009 um 20:17
Florian Königsrainer