Hallo,
aufgrund dieses Threads: http://zfx.info/viewtopic.php?f=4&t=2880&p=36387#p36387 versuche ich, mein Java-Spiele-Framework nicht nur an den einen OpenGL-Renderer (LWJGL) anzubinden, sondern mehrere "Renderer" zu unterstützen, bzw. das Framework unabhängig von der darunterliegenden/nativen Grafik-Lib zu machen. Sicher ein gute Entwicklung für den Code :) .
Der erste Schritt, den ich schon gemacht habe, war, alles an OpenGL-Code in eine separate Library auszulagern und vom Framework nur noch über Interfaces anzusprechen. D. h. weitere Renderer bedeutet -> weitere Implementierungen dieser Interfaces. Hätte ich von Anfang an so machen sollen.
Jetzt ist es allerdings so, dass ich meine Stärken nicht gerade in der Softwarearchitektur sehe und deshalb folgender Frage:
Wie spreche ich die Renderer-Interfaces von meinem Framework-Code aus an?
Zur Erinnerung: Vorher basierte das Framework direkt auf OpenGL-Calls, dort sind jetzt eben Renderer-Interface-Calls. Aufgrund der stark statischen Natur von OpenGL 1.1 hab ich jetzt alles über ein Singleton gelöst. Alles läuft, ich bin mir nur nicht sicher, ob ich schon so zufrieden damit sein soll, oder ob es eine bessere Möglichkeit gibt, den "darunter liegenden" Renderer von meinen vielen verstreuten Utility-Klassen (Particle system, sprites animations etc...) anzusprechen.
Ich hoffe, die Problematik kam rüber, wenn nicht, einfach nachfragen!
Ich freu mich auf eine bereichernde Diskussion!
VG Stefan
Verschiedene Renderer, Singleton sinnvoll?
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
- Schrompf
- Moderator
- Beiträge: 5114
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: Verschiedene Renderer, Singleton sinnvoll?
Das ist einfach: Singletons sind immer eine schlechte Idee. Wenn Du es nicht einfach alá Dependency Injection rumreichen willst, dann mach eine banale globale Variable draus. Aber noch extra Code drumrum zu basteln ist eine dumme Idee.
Es ist meiner Meinung nach auch eine dumme Idee, ein Objekt hinter einem Interface zu verstecken, wenn Du es sehr oft aufrufen willst. Aber das ist in Java wahrscheinlich auch nicht so relevant. Und ich halte es auch für eine dumme Idee, ein Compile-Time-Problem wie die Wahl des Renderers zu einem Laufzeitproblem zu machen. Aber auch das ist in Java wahrscheinlich nicht so relevant mangels bedingter Kompilierung.
Es ist meiner Meinung nach auch eine dumme Idee, ein Objekt hinter einem Interface zu verstecken, wenn Du es sehr oft aufrufen willst. Aber das ist in Java wahrscheinlich auch nicht so relevant. Und ich halte es auch für eine dumme Idee, ein Compile-Time-Problem wie die Wahl des Renderers zu einem Laufzeitproblem zu machen. Aber auch das ist in Java wahrscheinlich nicht so relevant mangels bedingter Kompilierung.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
- Chromanoid
- Moderator
- Beiträge: 4284
- Registriert: 16.10.2002, 19:39
- Echter Name: Christian Kulenkampff
- Wohnort: Lüneburg
Re: Verschiedene Renderer, Singleton sinnvoll?
Ein Singleton würde ich auch nicht nehmen. Wenn Du Dir sicher bist, dass Du nicht in mehreren GL Kontexten o.Ä. gleichzeitig unterwegs sein willst, würde ich eine einfache statische globale Klasse nehmen a'la Math. Sonst würde ich eine Art Graphics-Klasse basteln, die Du in die draw-Funktion deiner malenden Objekte reinschmeißt. Also im Grunde alles was Schrompf sagt :)
-
- Establishment
- Beiträge: 147
- Registriert: 26.02.2009, 14:04
- Alter Benutzername: floyd
- Wohnort: Nürnberg
- Kontaktdaten:
Re: Verschiedene Renderer, Singleton sinnvoll?
Ok, danke für das Feedback!
Ich hab das Singleton weggehaun und nehme jetzt einfach ein statisches Feld. Weiterreichen/DI fänd ich zwar auch ganz nett, ist mir jetzt aber fürs Erste zu viel Aufwand...
Ich hab das Singleton weggehaun und nehme jetzt einfach ein statisches Feld. Weiterreichen/DI fänd ich zwar auch ganz nett, ist mir jetzt aber fürs Erste zu viel Aufwand...