Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3827 Wohnort: Tespe (nahe Hamburg)
Hi,
habe im Rahmen einer länger E-Mail etwas den Header betreffend erhalten und will Euch dies nicht vorenthalten...
Zitat:
'dglOpenGl.pas' beinhaltet meiner Meinung einen Overkill: die Re-Definition aller Opengl 1.1 Funktionen und das zeitraubende Beschaffen der Funktionsaddressen via wglGetProcAdress und GetProcAdress. Die in der Delphi Opengl.pas definierten 1.1 'gl..' und 'glu..' Funktionen sind in der 'implementation'-Sektion mit 'external opengl32;' bzw mit 'external glu32;' beschrieben was letztlich bedeutet dass der LOADER beim laden die relevanten EntryPoints aus der Windows 'Opengl32.dll' und 'glu32.dll' findet und einsetzt. Da wirklich nur die im Programm 'verwendeten' Funktions-EntryPoints eingesetzt werden, verzoegert sich der Ladevorgang nicht merklich. In 'dglOpengl.pas' werden ALLE EntryPoints ermittelt, ob ich sie nun brauche oder nicht! Das gleiche gilt uebrigens auch fuer die 1.1 'wgl..'-Funktionen, die in Delphi-Windows.pas Unit definiert sind und - da Windows.pas Teil der Run-Time Lib ist - alle in 'rtl.dcp' enthalten sind. Auch hier ermittelt der Loader die EntryPoints beim laden des Programs - und zwar nur die wirklich verwendeten, nicht einfach alle.
Wenn ich also in dglOpenGl.pas alle 1.1 Definitionen - in der interface und implementation Sektion - gegen die original Delphi Opengl.pas Definitionen ersetze, verliere ich nichts an Funktionalitaet, reduziere aber die Programm-Startup Zeit erheblich, da ich weder die EntryPoints fuer die 1.1 Funktionen noch die fuer die 'glu..'-Funktionen 'holen' muss. Das macht der Loader. - Ausserdem werden 'opengl32.dll' und 'glu32.dll' gleich mitgeladen...
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Hm... scheint auf den ersten Blick nicht falsch zu sein, aber:
1.) Ob sich die Ladezeit wirklich sooooo drastisch verschlechter ist fraglich.
2.) ein Mix aus dglOpenGL und Borland's OpenGL halte ich für nicht Sinnvoll
und 3.) (das ist der eigentliche Punkt): durch dglOpenGL habe ich immerhin die Möglichkeit, eine beliebige OpenGL-DLL zu verwenden (z.B. Mesa). Außerdem ist mir persönlich das dynamische Laden von DLLs lieber, da man dann mit einer entsprechenden Fehlermeldung reagieren kann, sollte es schief gehen. Die lapidare Windows-Meldung "xxx.dll fehlt blabla" ist nicht unbedingt sonderlich hilfreich.
Jedoch kann man in einem recht geben: eigentlich ist es unpraktisch, alle Extensions zu laden, auch wenn man sie nicht benötigt. Deswegen könnte man ja überlegen, ob man die zu ladenden Extensions per Parameter angeben kann: LoadExtension("ARB_multi_texture ARB_vertex_program"); Man könnte dann auch selber alle existierenden Extension laden: LoadExtensions(gLGetString(GL_EXTLIST));
Ob sich der Aufwand wegen ein paar Sekunden, wenn nicht gar Millisekunden Ladezeit wirklich lohnt, halte ich für fragwürdig bis eher sogar unwahrscheinlich!
Fazit: Nettes Feedback, jedoch glaub ich das man aus einer Mücke auch einen Elefanten machen kann. Denn bei einem kompletten Game dürfte die Zeit zum Laden der Funktionen das geringere Übel sein, verglichen zum Content. Es sei denn, man ist so bescheuert und lädt die Funktionen in jedem Frame erneut. Könnte sich mittlerweile ja was geändert haben.
_________________ Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich sehen das sehr ähnlich. Es wäre schon möglich das so zu gestalten wie das auch Tom Nuydens gemacht hat. Und zwar auf Befehl einzelne Extensions zu laden. Allerdings rechtfertigt der Aufwand in meinen Augen den Geschwindigkeitsvorteil nicht. Man sollte außerdem nicht außer acht lassen, dass diese Zeit (auch wenn es 5 Sekunden wären) nur ein einziges Mal (pro Instanze) benötigt werden. Und das ist durchaus verkraftbar. Vor allem, da man so den Vorteil hat, dass man jede beliebige DLL einbinden kann.
Aber dennoch ist es auf jeden Fall schön Feedback zu bekommen. Das zeigt einem ja, dass die Arbeit doch nicht ganz umsonst war.
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.