Uakeii Meets Java
Total Page:16
File Type:pdf, Size:1020Kb
Jake2 uakeIIuakeII meetsmeets JavaJava Dipl.-Ing. Carsten Weiße Dipl.-Inf. René Stöckel http://www.bytonic.de Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 1 uakeII meets Java 135. Unix Stammtisch an der TU-Chemnitz l Das Sourceforge-Projekt Jake2 l Wie langsam ist Java wirklich? l (3D-Game-Engine Interna) Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 2 Wer sind bytonic software? g Rene Stöckel l Dipl.-Inf. (TU-Chemnitz) l Systemhaus Chemnitz GmbH g Carsten Weiße l Dipl.-Ing. für Informationstecknik (BA-Glauchau) l Bildungsportal Sachsen GmbH g Holger Zickner l Dipl.-Inf. (Uni Halle) l Mitarbeiter am Lehrstuhl für Maschinenbau der TU-Chemnitz l VR-Labor Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 3 Jake2 – Motivation / Ziele g id-software stellt seine Q2-Engine unter die GPL. g Der Quake II source code ist somit seit Ende 2001 verfügbar. g Analysieren der Quake II Engine g Suche nach Inspiration „back to the roots“ g Schnaps-Idee (Spass an der Informatik) g Benchmark-Wette (Slideshow oder Spiel?) g Wie organisiert man die Zusammenarbeit (Teamwork, verteiltes Entwickeln mit CVS)? Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 4 Der erste Kontakt g Quake2 Code Pfad (170 000 Zeilen Code) g Erster Eindruck: sehr strukturiert g Wie bekommt man dieses Monster in den Griff? l nicht mit dem vi l Einfache Skripte (Portierung von #define-Konstanten, Monster- Automaten) l Code templates (Eingabehilfen in Eclipse) l Suchen-/Ersetzen Tricks Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 5 Jake2 – Vorüberlegungen Java-API Tests l JOGL (Java OpenGL binding) für den Renderer l Demos unter https://jogl.dev.java.net l Sound wurde erstmal nicht betrachtet l später JOAL (Java OpenAL binding) für den 3D-Sound l als alternative auch LWJGL (game library möglich) Festlegungen und Portierungstrategien l souce code Verwaltung per CVS l Never touch a running system! l Aufteilung in 3 Arbeitspakete • Nach Interessengebieten • Nach Schnittstellen Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 6 Werkzeuge g Doxygen (HTML-Doku des Quake2 source codes) g Eclipse (Java IDE) g CVS (zur Verwaltung des source codes) g ANT (XML-basiertes build tool; ähnlich make) g einfache Skripte (erledigen stupider Arbeiten) g Gehirnschmalz g regelmäßige Treffen und Absprachen g konstruktiver Streit Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 7 Jake2 und Eclipse Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 8 Jake2 – Arbeitspakete cvs.sourceforge.net/cvsroot/jake2 Entwickler: rst cwei hoz Packages Screen / Menu / Effekt-Darstellung Game-Engine (Monsters, Doors, Players, Items) Installer / Webstart FileSystem, Network 3D-Darstellung Server / Physik / World / Entities 3D-Surround-Sound Keyboard / Maus Math3D Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 9 Erste Ergbnisse (Tests) g die Klasse TestRenderer l Partikelsystem l Playermodell l Sprites g Beispiel: Partikelanimation l simple Datenstruktur mit Bewegungsvektoren l definierte Verfallszeit bzw. -Geschwindigkeit 2 l einfache Physik ( s = a/2*t + v*t + s0 ) l gezeichnet werden aktive Partikel l ist das Partikel "verglüht", wird es aus der Aktivliste entfernt Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 10 Jake2 – Phase II g Motivation war mit den ersten sichtbaren Ergebnissen gestiegen g Zusammenbau der Einzelteile mit dem Ziel Demo-Replay g Erste Probleme tauchten auf… Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 11 CCààJavaJava NightmareNightmare g zero terminated C strings g signed bytes L g Beispiel: // WriteInt() sb.data[i++] = (byte) ((c & 0xff)); sb.data[i++] = (byte) ((c >>> 8) & 0xff); sb.data[i++] = (byte) ((c >>> 16) & 0xff); sb.data[i++] = (byte) ((c >>> 24) & 0xff); // ReadInt() c = (msg_read.data[msg_read.readcount] & 0xff) | ((msg_read.data[msg_read.readcount + 1] & 0xff) << 8) | ((msg_read.data[msg_read.readcount + 2] & 0xff) << 16) | ((msg_read.data[msg_read.readcount + 3] & 0xff) << 24); Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 12 CCààJavaJava NightmareNightmare g Zuweisungsoperator l C: es wird kopiert (auch ganze Strukturen) l Java: es werden Objektreferenzen zugewiesen g Ergebnis: seltsame Effekte g Beispiel: // C ent->current = *state; // Java ent.current.set(state); public void set(entity_state_t from) { number = from.number; Math3D.VectorCopy(from.origin, origin); Math3D.VectorCopy(from.old_origin, old_origin); modelindex = from.modelindex; ... } Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 13 CCààJavaJava NightmareNightmare g Adapter statt function pointer: static xcommand_t List_f = new xcommand_t() { public void execute() { ... } }; g Problem: Rekonstruktion der zugewiesenen Adapter in Savegames g Lösung: Classloader-Trick in abstrakter Adapter-Klasse Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 14 Wie langsam ist Java wirklich? Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 15 Jake2Jake2 aufauf derder CeBitCeBit 20042004 g Ergebnis war überraschend g Idee: Anruf bei Sun Microsystems à Einladung zum Meeting auf der CeBit g Kommerzielle Verwertung schwierig… g Treffen mit Jamba (Handy Spiele?) àVeröffentlichung bei Sourceforge Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 16 Sourceforge g CVS g Downloads g Screenshots g Bug tracker g Task manager g Forum g Mailing Lists g Donation system Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 17 Sourceforge: Bug tracking Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 18 Jake2Jake2 gehtgeht OpenOpen SourceSource g Interesse von Sun (jogl team) und Apple (JDK team) g Showcase auf der Sun JavaOne in San Francisco g Gleichzeitig Showcase auf der WWDC (apple‘s world wide developer conference) g Jake2 heizte Diskussion „C++ vs. Java“ in verschiedenen Foren an (siehe slashdot.org) à Insbesondere die Benchmarktabelle… Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 19 Jake2 – Benchmarks Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 20 Jake2 - Optimierung g JNI (Java native interface) l Overhead durch den Wechsel zwischen Java-Heap und C-Heap l Anzahl der Aufrufe an *.dll bzw. *.so minimieren l z.B. Vertexarrays mit DirectBuffers (java.nio package) g Wo und wie liegen die Objekte im Speicher? l Cache-Hits?! l z.B. Baumstrukturen in Arrays organisieren und danach verketten g Variablen so spät wie möglich definieren g Vermeiden von lokalen Müllobjekten (GC wird belastet) l Java legt keine Strukturen auf den Stack l (soll sich bei Java 6.0 "Mustang" ändern) l z.B.: temporäre float[] für Vektoren kurze Lebensdauer, aber Speicheranforderung Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 21 Java Web Start g Ersatz für Applets g Verteilte Bibliotheken (jogl wird von Sun geladen) g Signieren von Jar-Files g Keine Programmänderungen nötig g XML Startdatei (JNLP java network launch protocol) <?xml version="1.0" encoding="utf-8"?> <jnlp spec="1.0+" codebase="http://www.bytonic.de/downloads" href="jake2_jogl11.jnlp"> <application-desc main-class="jake2.Jake2"> </application-desc> </jnlp> Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 22 Jake2 play now! Jake2 läuft per Mausklick aus dem Browser g auf jedem Betriebssystem mit Java (JRE1.4.2) oder neuer g und benötigt nur einfache User-Berechtigungen g http://www.bytonic.de/html/jake2_webstart.html Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 23 Fazit Java: g für Desktop-Anwendungen einsetzbar g Speicher: 40 MB (C++ Quake) 100 MB (Jake2) g Fixkosten: 50 – 80 MB für VM und JRE g Variable Kosten: Extra Speicher für Objekt-Verwaltung des Garbage Collectors g Class sharing im JDK 1.5.0: Start 2-3 mal schneller, spart OS-Speicher Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 24 Todo g Source code aufräumen g Weiteres Profiling l Speicherverbrauch optimieren g Dokumentieren g Release 1.0 g Sich um die Fan-Gemeinde kümmern Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 25 Danke für die Aufmerksamkeit, Dipl.-Ing. Carsten Weiße, Dipl.-Inf. René Stöckel http://www.bytonic.de Jake2 - Quake || meets Java 135. Unix Stammtisch TU Chemnitz 26.