Ein paar Tipps
-
Baust du einen DirectX-Wrapper, der wie OpenGL funktioniert? Dann schau mal hier: http://www.v3x.net/directx/ (DirectX Port)
EDIT: ups, das ist falsch. DirectX Port ist ein OpenGL-Wrapper, der wie DirectX ausssieht, also genau das Umgekehrte.[ Dieser Beitrag wurde am 06.04.2003 um 14:18 Uhr von Norondion editiert. ]
-
Es soll nicht 100% wie OpenGL funktionieren. Ich habe noch nie in OpenGL programmiert. Es ist nur ein Hobbyprojekt an dem ich in meiner Freizeit arbeitet.
Hört sich gut an. Werde mich gleich mal daran setzten.
Deshalb meine fragen über BeginScene() und EndScene()
Ich bin auch kein DirectX Profi
[ Dieser Beitrag wurde am 06.04.2003 um 14:21 Uhr von Netzwerk-Latenz editiert. ]
-
Nehmen wir mal an ich habe 20 Objekte mit den selbern Einstelltungen. Ich müsste das Device einmal einstellen und nur die Matrizen ändern. So müsste ich für 20 Objekte jedesmal das Device mit den selben Einstellungen immer wieder einstellen.
-
Speichere Dir in einer zusätzlichen Tabelle den aktuellen Wert jedes Render-States. Bevor Du dann eines setzt, prüfst Du erst, ob es nicht bereits den gewünschten Wert hat.
Oder verwende Direct3Ds "State Blocks" (siehe Dokumentation).
-
Das mit den Wertevergleichen habe ich mir auch gedacht. Nur ist das Problem bei 3D Anwendungen die Optimierung. Man muss sich immer gedanken machen ob dieser Schritt nötig ist oder ob man ihn einsparen kann.
Das mit den StateBlocks hört sich schon mal interessant an. Könnte die Lösung meiner Probleme sein.
-
Ich glaube der Schritt ist ja schon ne Optimierung. Wenn man selber prüft dann verhindert man das man was ändert obwohl es doch schon drin ist, was vielleicht rechenintensivier ist.
-
Richtig. Und so ein kleiner Vergleich macht ja so gut wie nichts aus. Da würde man an der falschen Stelle sparen.
-
Also meint ihr das es nicht sehr viel ausmacht wenn ich vorher kontrolliere ob eine RenderState gesetzt wurde. Ja dann mach ich es so. Ich vertraue auf euer wissen
-
Wenn es einen interessiert.
Ich speichere die Zustände, bei Aufruf der Funktionen gxEnable und gxDisable, in einer List. Diese List wird beimerzeugen einer neues Objekt mit gxBegin() an das Objekt übergeben. Die "Globale"List wird daraufhin zerstört. Es existiert nur noch eine im Objekt. Wird jetzt erneut eine der beiden Funktionen gxEnable und gxDisable aufgerufen wird die "Globale"Liste erneut erstellt und speichert die Einstelltungen. Auch diese Liste wird beim Aufruf der Funktion gxBegin() an das neue Objekt übergeben.
Der Gedanke ist folgender. Wir das erste Objekt gezeichnet. Übergibt es seine Einstellungen an die RenderFunktion. Gleichzeitig wird ein Zähler, der die Anzahl der Einstellungen gespeichert hatte gelöscht (auf 0 gesetzt). Wir jetzt ein zweites Objekt erstellt ohne neue Einstellungen wird bei diesem das Device nicht mehr neu eingestellt. Weil der Zähler auf 0 steht. Das prüfen ob eine Einstelltung schon gesetzt wurde wird überflüssig.
Erst ein erneuter Aufruf von gxEnable bzw. gxDisable erhöht den Zähler. Weil jetzt eine Einstellung am Device nötig wird.
Eine Einstellung bleibt solange erhalten bis diese verändert wird.So jetzt ist es schon 0:50 ich muss Morgen um 5 Uhr aus dem Bett. Das wird schwer werden.
Danke für die Tipps und Ideen.
[ Dieser Beitrag wurde am 07.04.2003 um 00:49 Uhr von Netzwerk-Latenz editiert. ]
-
So jetzt ist es schon 0:50 ich muss Morgen um 5 Uhr aus dem Bett. Das wird schwer werden.
Booooaaaaahhhh... kann nicht jeder 28 Stunden am Stück schlafen...
RESPEKT! :p