Engine Architektur Frage
-
Hi!
Ich schreibe momentan eine extrem kleine und absolut nicht beachtungswürdige 3D Engine mit DirectX. Das heisst aber nicht, dass ich auf gutes Design verzichten muss.
Bei den 3D Engines, die ich mir bisher angeschaut habe, sind die Renderer (die einem bestimmten HWND zugewiesen werden) immer Singletons. Ist das denn gutes Design? Wäre es nicht besser mehrere Renderer instantieren zu können, um in einem Editor z.B. vernünftig mit einem SplitterWnd arbeiten zu können. Oder versteht sich das mit dem Aufbau von DirectX nicht, denn für jedes Fenster müsste ja ein neues IDirect3DDevice erzeugt werden. Würde die Performance drunter leiden?
Fragen über Fragen. Ich hoffe ihr könnt mir helfen.
-
Soweit ich mich erinnere ist mehr als eine Device etwas, was man vermeiden sollte, da mehrere Devices sich die Grafikkarte nicht vernünftig teilen können. (IIRC große Geschwindigkeits einbußen + Instabilität)
Viewports für Splitwindows sind da besser geeignet, oder swapchains für mehrere Fenster.
-
Danke für die Antwort!
Dann werde ich das jetzt so machen, dass ich ein "Renderer"-Singleton habe, dass die verschiedenen "View"-Instanzen verwaltet. Dem "Renderer" können die "View"s z.B. per "Renderer"->AddView() hinzugefügt werden. Ein "Renderer"->Render() Aufruf rendert dann alle "View"s.
Die "View"s können - auf Wunsch - auch unterschiedliche Scenegraphs haben, falls per "View" völlig unerschiedliche Sachen angezeigt werden sollen.Wenn an diesem Design irgendwas unschön ist, würde ich mich freuen, wenn mir jemand eine bessere Art und Weise nennen könnte.