Hi,
in meiner Game Engine bzw. im Grafikmodul sieht es zur Zeit so aus,
dass 3 Klassen von einander abhängig sind.
Gemeint sind folgende Klassen:
- Noir::Graphics::Window
- Noir::Graphics::GL4::Context
- Noir::Graphics::GL4::Renderer
- Noir::graphics::GL4:: RenderQueue (bewusst nicht mitgezählt)
Die Verwendung sieht dann in etwa so aus:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
|
using namespace Noir::Graphics;
using namespace Noir::Graphics::GL4;
Window window(600, 600, L"bla bla");
Context context(&window);
Renderer renderer = context.getRenderer();
RenderQueue queue = renderer.getRenderQueue();
|
Anmerkung:
RenderQueue ist noch keine Feature, wird aber hinzugefügt,
damit ich eine
abstrahierte, "stateless" Rendering API habe.
Ich finde dieses Design mittlerweile relativ fragwürdig, da z.B.: die Klasse "Context" absehen vom Konstruktor, der einen OpenGL 4 Kontext erstellt, keine wirkliche Funktionalität bietet,
außer wenige "Getter"-Methoden. Andererseits habe ich dadurch das, was ich unter guter Kohäsion verstehe: Jede Klasse macht nur das was sie tun soll.
Window verwaltet das Fenster,
Context den Kontext (Version, Vendor etc. pp.) und
Renderer verarbeitet alle Drawcalls im
RenderQueue;
RenderQueue sotiert alle DrawCalls und macht ggf. nutzen von
Instancing um Drawcalls zu sparen.
Nur ist die Frage, ob dieses Design denn überhaupt auch wirklich
GUT ist. Wäre es besser z.B.:
Context und
Renderer oder sogar
Window,
Context und
Renderer in eine Klasse zusammen zu fassen?
Oder sollte man die "hat ein"-Beziehung zwischen den Klassen ändern?
Mit freundlichen Grüßen,
Julien