Verschiedene Renderer, Singleton sinnvoll?

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
shadow
Establishment
Beiträge: 147
Registriert: 26.02.2009, 14:04
Alter Benutzername: floyd
Wohnort: Nürnberg
Kontaktdaten:

Verschiedene Renderer, Singleton sinnvoll?

Beitrag von shadow »

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
Benutzeravatar
Schrompf
Moderator
Beiträge: 4855
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Verschiedene Renderer, Singleton sinnvoll?

Beitrag von Schrompf »

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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4258
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Verschiedene Renderer, Singleton sinnvoll?

Beitrag von Chromanoid »

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 :)
shadow
Establishment
Beiträge: 147
Registriert: 26.02.2009, 14:04
Alter Benutzername: floyd
Wohnort: Nürnberg
Kontaktdaten:

Re: Verschiedene Renderer, Singleton sinnvoll?

Beitrag von shadow »

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...
Antworten