Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 08, 2025 13:44

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 215 Beiträge ]  Gehe zu Seite Vorherige  1 ... 4, 5, 6, 7, 8, 9, 10 ... 15  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 17, 2005 17:44 
Offline
DGL Member

Registriert: Fr Jan 10, 2003 20:18
Beiträge: 88
Hallo hab da ein kleinen Fehler im dglHeader, muss aber an meiner Delphi einstellung liegen, denn bei euch scheint es ja zu laufen.

Code:
  1.  
  2. //...
  3. //Zeile 8864
  4.   while (Separator > 0) and (Buffer[Separator] in ['0'..'9']) do        ////<---------HIER!!!!!!!!
  5.     Dec(Separator);
  6. //...
  7.  


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
Code:
  1.  
  2.   while (Separator > 0) do
  3.     if (Buffer[Separator] in ['0'..'9']) then Dec(Separator);
  4.  


Nutze Delphi 7 Personal.
Gibt es da ne Einstellung, die ich nicht aktiviert habe???

Shadow


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 17, 2005 19:30 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 17, 2005 19:41 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Feb 17, 2005 20:02 
Offline
DGL Member

Registriert: Fr Jan 10, 2003 20:18
Beiträge: 88
Man, warum ist mir das nicht vorher aufgefallen, dachte ich hätte nach so etwas gesucht gehabt, auf jeden Fall läuft's jetzt.
THX


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 21, 2005 15:05 
Offline
DGL Member

Registriert: Fr Nov 12, 2004 14:58
Beiträge: 76
Wohnort: Aachen
Warum muß ich nach einem wglCreateContext()/CreateRenderingContext() erst noch

Code:
  1.  
  2. ReadExtensions();
  3. ReadImplementationProperties();
  4.  


aufrufen bevor irgendein Aufruf an gl-Funktionen mir nicht die Nullpointer-Exception mit der Adresse 000 zurückgibt ?

Der Aufruf von

Code:
  1.  
  2. InitOpenGL
  3.  


alleine reicht leider nicht aus.
Im Wiki hab ich es eben aktualisiert... (http://wiki.delphigl.com/index.php/FAQ)

:? Wolf

[edit]Auch für CreateRenderingContext[/edit]

_________________
Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (Engl. Sprichwort)


Zuletzt geändert von Blechwolf am Mo Feb 21, 2005 15:53, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Nächstes Problem
BeitragVerfasst: Mo Feb 21, 2005 15:32 
Offline
DGL Member

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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Last man standing...
BeitragVerfasst: Mo Feb 21, 2005 16:33 
Offline
DGL Member

Registriert: Fr Nov 12, 2004 14:58
Beiträge: 76
Wohnort: Aachen
Ok, also hier nochmal endgültig und als letztes:

ruft man
Code:
  1.  
  2. CreateRenderingContext([...]);
  3.  

auf, so muß man danach darauf achten, dass VOR irgendwelchen glCalls ein
Code:
  1.  
  2. ActivateContext()
  3.  

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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 21, 2005 20:12 
Offline
DGL Member

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:
  1.  
  2. ReadExtensions();
  3. ReadImplementationProperties();
  4.  

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.

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Mär 28, 2005 10:23 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Folgende Funktionen werden in der InitOpenGL zugeweisen:
Code:
  1.  
  2.  wglCopyContext              := glProcedure('wglCopyContext');
  3.  wglCreateLayerContext       := glProcedure('wglCreateLayerContext');
  4.  wglCreateContext            := glProcedure('wglCreateContext');
  5.  wglDeleteContext            := glProcedure('wglDeleteContext');
  6.  wglDescribeLayerPlane       := glProcedure('wglDescribeLayerPlane');
  7.  wglGetCurrentContext        := glProcedure('wglGetCurrentContext');
  8.  wglGetCurrentDC             := glProcedure('wglGetCurrentDC');
  9.  wglGetLayerPaletteEntries   := glProcedure('wglGetLayerPaletteEntries');
  10.  wglMakeCurrent              := glProcedure('wglMakeCurrent');
  11.  wglRealizeLayerPalette      := glProcedure('wglRealizeLayerPalette');
  12.  wglSetLayerPaletteEntries   := glProcedure('wglSetLayerPaletteEntries');
  13.  wglShareLists               := glProcedure('wglShareLists');
  14.  wglSwapLayerBuffers         := glProcedure('wglSwapLayerBuffers');
  15.  wglSwapMultipleBuffers      := glProcedure('wglSwapMultipleBuffers');
  16.  wglUseFontBitmapsA          := glProcedure('wglUseFontBitmapsA');
  17.  wglUseFontOutlinesA         := glProcedure('wglUseFontOutlinesA');
  18.  wglUseFontBitmapsW          := glProcedure('wglUseFontBitmapsW');
  19.  wglUseFontOutlinesW         := glProcedure('wglUseFontOutlinesW');
  20.  wglUseFontBitmaps           := glProcedure('wglUseFontBitmapsA');
  21.  wglUseFontOutlines          := glProcedure('wglUseFontOutlinesA');
  22.  
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?

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 28, 2005 10:27 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 29, 2005 19:53 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 13, 2005 11:36 
Offline
DGL Member

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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 13, 2005 12:46 
Offline
DGL Member
Benutzeravatar

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...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 13, 2005 21:03 
Offline
DGL Member

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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 13, 2005 21:12 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
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'."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 215 Beiträge ]  Gehe zu Seite Vorherige  1 ... 4, 5, 6, 7, 8, 9, 10 ... 15  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 11 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]