ich kriege beim \"Hier\" einen RangeError, anscheinend überprüft Delphi trotz negativer ersten Bedingung (Separator > 0) trotzdem die zweite Bedingung (Buffer[Separator] in ['0'..'9']) welche dann die Exception aufruft. Bei folgendem Code läuft es
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Glaube mal im zusammenhang mit TPascal gehört zu haben, das bei AND verknüpften Konstructionen der Compiler das "von hinten nach vorne" übersetzt hat. Also der Hintere Teil zuerst geprüft wird. Kann sein, dass das nicht stimmt, oder net UpToDate ist. Aber eventuell kann das der Fehler sein. Vieleicht ist das auch nur bei der 7PE Version so im Compiler und bei den anderen net. Keine Ahnung.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Boolsche Ausdrücke werden immer von links nach rechts und entsprechend der Prioriäten (AND vor OR) ausgewertet und abgebrochen, sobald das Ergebnis eindeutig feststeht. Falls die Option "Boolsche Ausdrücke vollständig auswerten" allerdings eingeschaltet ist, wird immer alles ausgewertet. Das entspricht dem Compilerbefehl {$B}. Vielleicht ist der da irgendwo, weil die vollständige Auswertung sinnvollerweise standardmäßig aus ist.
Registriert: Fr Nov 12, 2004 14:58 Beiträge: 76 Wohnort: Aachen
Nutzt man Eure Unit, aber weiterhin die wgl-Aufrufe (wglCreateContext, wglMakeCurrent, etc.) und bastelt man sich dann eine Komponente (Guckst Du hier) mit der man mehrere Contexte auf ein Form platzieren kann, so wird alles durcheinander geworfen. Kein Context weiß mehr wo er hin gehört und es wird keiner mehr gezeichnet.
Gibts nicht einfach eine aktuelle OpenGL.pas die genauso wie die alte OpenGL.pas "nur" eine Übersetzung der aktuellen Header-Datei ist ?
Wolf
_________________ Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (Engl. Sprichwort)
Registriert: Fr Nov 12, 2004 14:58 Beiträge: 76 Wohnort: Aachen
Ok, also hier nochmal endgültig und als letztes:
ruft man
Code:
CreateRenderingContext([...]);
auf, so muß man danach darauf achten, dass VOR irgendwelchen glCalls ein
Code:
ActivateContext()
stattgefunden hat.
Sonst bekommt man nämlich den 000 Fehler.
Aber mal ne andere Frage: ist es wirklich nötig die ganzen Extensions, etc. jedesmal beim Aktivieren des Contextes zu laden? Wäre es nicht deutlich performanter, das einmal zusammen mit dem CreateRenderingContext zu tun ?
Spätestens dann wenn man nämlich mehrere Contexte gleichzeitig nutzt, wird bei jedem Context-Wechsel der ganze Kram wieder geladen und die Extensions geprüft.
Das mag vielleicht nicht soviel ausmachen, sind aber dann irgendwann die paar Milisekunden, die den unterschied zu einer wirklich interaktiven Anwendung ausmachen. Und Computergraphiker sind meistens "Speed-Freaks"...
Grüße
Wolf
_________________ Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (Engl. Sprichwort)
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Man muss dabei bedenken, dass der dglOpenGL - Header erst zu Laufzeit die exportierten DLL - Funktionen ermittelt und in Funktions-Pointer speichert. Dadurch kann der Programmierer einfach herausbekommen, welche Funktionen eine OpenGL - Implementation, die ja Grafikkarten/Treiber abhängig ist, bereistellt oder nicht. Aus diesem Grund müßen die Funktionen
Code:
ReadExtensions();
ReadImplementationProperties();
aufrufen, da erst hier die DLL - Funktionen ausgelesen werden. Zum normalen Borland OpenGL - Header wurden einige Funktionsnamen dem OpenGL - Standard angepasst, aber sonst die Verwendung und das Verhalten gleich. Um z. B. Texturen und Displayliste in mehren Renderkontexte zu verwenden, muss die Funktion glShareList verwendet werden.
In der Procedure ClearExtensions werden diese Funktionen zurück gesetzt, jedoch in der ReadExtensions nicht wieder auf einen gültignen Methoden-Zeiger gesetzt. Aufgefallen ist es mir an einem DGL-SDK Template, welches nach der Umstellung von OpenGL12 auf dglOpenGL, einen Laufzeitfehler erzeugte. Wenn diese Funktionen in der InitOpenGL zugewiesen werden, dann darf ein zurücksetzten in der Funktion ClearExtensions nicht erfolgen, oder man verschiebt die Initialisierung dieser Funktionen in die Funktion ReadExtentions, was ich für logischer halte.
So wie es jetzt ist, ist es unausgewogen, oder was meint Ihr?
Die Sache mit den ClearExtensions wird in der nächsten Version vermutlich ganz rausgenommen und die ganzen Ladefunktionen werden sowieso überarbeitet, weil es erstens unter .Net zu lange dauert und zweitens immer alle Funktionen miteingebunden werden, was die EXE Datei größer macht, als sie eigentlich sein sollte.
Registriert: Do Jun 19, 2003 10:44 Beiträge: 991 Wohnort: Karlsfeld (nahe München)
Wann wird der Header auf die OpenGL Version 2.0 aktualisiert?
Die Erweiterung GL_ARB_SHADER_OBJECTS wurde zum Beispiel in den Kern übernommen, allerdings ist in der dglOpenGL nur die ARB Version der Funktionen zu finden.
Die ganze Sache ist mir bei der Aktuallisierung der OpenGL [url=http://wiki.delphigl.com/index.php/OpenGL-Funktionsübersicht]Funktionsübersicht[/url] aufgefallen. Diese ist nun auf den Stand der 1.5 Version.
MfG
Flo
_________________ Danke an alle, die mir (und anderen) geholfen haben. So weit... ...so gut
Registriert: Fr Nov 12, 2004 14:58 Beiträge: 76 Wohnort: Aachen
Habe mir heute den neuen Header geladen.
Find ich gut das die Extensions jetzt nicht mehr bei jedem Aufruf von ActivateRenderingContext mitgeladen werden (bei entsprechendem Paramter). Kann man so einen Parameter nicht auch für die ImplementationPropertied einbauen?
Theoretisch sollte es doch eigentlich reichen, wenn die einmal am Anfang geladen werden (in InitOpenGL()) und danach stehen die doch fest. Selbst wenn ich mehrere Kontexte habe, sollten die Extensions und die Properties doch die gleichen bleiben, da ich nicht im laufenden Betrieb die Garfikkarte austausche bzw. wechsele.
Oder ist das ein X11 Spezial, wo ich ja mein Display auf mehrere Desktops verteilen kann ?
Grüße
Wolf
_________________ Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (Engl. Sprichwort)
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Zitat:
Selbst wenn ich mehrere Kontexte habe, sollten die Extensions und die Properties doch die gleichen bleiben, da ich nicht im laufenden Betrieb die Garfikkarte austausche bzw. wechsele.
Also darauf würde ich nicht wetten. Okay, dass die Grafikkarte wärend des laufenden Betriebes ausgewchselt wird ist unwahrscheinlich. Möglich (nicht wahrscheinlich) wäre aber der Ruhezustand von Windows. Obwohl ich nicht drauf wetten würde, dass es geht auch wenn die Karte die gleiche wäre.
Etwas wahrscheinlicheres wäre zum Beispiel das Rendern in ein Bitmap oder die Verwendung von 2 unterschiedlichen Grafikkarten. Was zwar seit Dualhead karten nicht mehr so häufig vertreten ist. Aber es ist *mitdunklerstimmespricht* Allgegenwärtig.
Aber bei dieser Methode sehe ich keine Notwendigkeit, dass man so etwas hinzufügt. Dort wird ja lediglich ein Textur ausgewertet und nicht 2000 Adressen von irgendwelchen Methoden ausgelesen. Ich denke nämlich mal, dass die Zeit dafür verschwindend gering sein dürfte.
PS: 2 Unterschiedliche Kontexte können auch jeweils einen komplett unterschielichen Satz an Methodenpointern haben. Wenn es zum Beispiel 2 unterschiedliche Karten von unterschiedlichen Herstellern sind.
PPS: Du kannst deinen Desktop bei Windows auch auf mehrere Geräte verteilen...
Registriert: Fr Nov 12, 2004 14:58 Beiträge: 76 Wohnort: Aachen
Zitat:
Also darauf würde ich nicht wetten. Okay, dass die Grafikkarte wärend des laufenden Betriebes ausgewchselt wird ist unwahrscheinlich. Möglich (nicht wahrscheinlich) wäre aber der Ruhezustand von Windows. Obwohl ich nicht drauf wetten würde, dass es geht auch wenn die Karte die gleiche wäre.
Ich verkneif mir jetzt mal den Erbsenzähler-Kommentar...
Zitat:
Etwas wahrscheinlicheres wäre zum Beispiel das Rendern in ein Bitmap oder die Verwendung von 2 unterschiedlichen Grafikkarten. Was zwar seit Dualhead karten nicht mehr so häufig vertreten ist.
Hm, ok. Sowas habe ich nicht bedacht.
Zitat:
Dort wird ja lediglich ein Textur ausgewertet und nicht 2000 Adressen von irgendwelchen Methoden ausgelesen. Ich denke nämlich mal, dass die Zeit dafür verschwindend gering sein dürfte.
Ok, also jetzt nach dem 5. mal lesen glaube ich verstanden zu haben das Du meinst "Dort wird lediglich ein Text ausgewertet". Letztlich sind Computer-Graphiker nunmal Speed-Freaks, so daß "verschwindend gering" immer noch zu langsam sein dürfte...
Zitat:
PPS: Du kannst deinen Desktop bei Windows auch auf mehrere Geräte verteilen...
Wenn du jetzt auf die Remote-Unterstützung anspielst, so muß ich Dich leider enttäuschen. Bei der Remote-Unterstützung läuft auf jeder Maschine ein komplettes Windows, und die ganzen Programme werden lokal ausgeführt.
Bei X11 hingegen ist es möglich nur die Graphische Ausgabe jedes Programmes auf eine Maschine umzuleiten und die eigentlichen Programme alle auf einem Rechner laufen zu lassen. So könntest Du z.B. einen ganz tollen Blumenstrauß in OpenGL-Rendern und Deiner Freundin auf den Bildschirm schicken, ohne das ihr sonstiger Rechner damit beeinflusst wird.(Sowas hat übrigens der ... auch mit der ... in Sliver gemacht - Falls sich da noch jemand dran erinnert.) Ok, unter der Vorraussetzung, das Du Ihre IP kennst, Zugriff auf den Rechner hast und Dich mit X auskennst.
Das ist bei Windows de facto so noch nicht möglich.
Aber jetzt wirds OT...
_________________ Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (Engl. Sprichwort)
Das mit dem Remote muss aber nicht OT sein, denn OpenGL ist ja selbst nach einem Server-Client-Modell konzipiert.
Somit müsste man theoretisch auf einem Rechner etwas mit OpenGL berechnen und dann per Netzwerk an einen anderen Rechner schicken können, der das dann rendert...
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.