Uakeii Meets Java

Uakeii Meets Java

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.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    26 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us