Registriert: Di Feb 01, 2005 15:59 Beiträge: 14 Wohnort: nähe Stuttgart
Hi dglFolks,
Ich habe ein Problem beim Umstieg von OpenGl12 nach dglOpenGL.
Folgender Fall liegt vor: In einem Fenster kann zwischen einer 2D Darstellung und einer 3D Darstellung gewechselt werden.
Beim ersten Erzeugen des Rendering-Contexts geht sowohl unter OpenGL12 als auch unter dglOpenGL noch alles glatt.
Beim Wechsel zurück in die 2D Darstellung wird der Renderkontext gelöscht. Nun soll beim nächsten Wechsel in die 3D Darstellung der Renderkontext erneut erzeugt werden. Unter OpenGL12 funktioniert es, in dglOpenGL liefert der Aufruf der Funktion wglCreateLayerContext in der Funktion CreateRenderingContext 0 zurück und löst somit einen RaiseLastOSError aus.
Benutzt man in dglOpenGL die windows-unit von delphi, und nutzt dann windows.wglCreateLayerContext funktioniert es wieder, was aber nicht wirklich als workarround angesehen werden kann.
Dies wurde auf 2 Rechnern getestet. Beide haben Windows 2000 und SP4 installiert.
Das Phänomen trat aber nur auf dem neueren / schnelleren der beiden Rechner auf welchem eine ATI Radeon installiert ist.
Der ältere Rechner hat eine Matrox Millenium 450G, auf diesem funktioniert der 2D/3D wechsel auch mit dglopengl reibungslos.
Vielleicht könnte mir hier jemand weiterhelfen? Ich würde sehr gerne auf OpenGL 1.5 umsteigen, solang dieses Problem aber nicht verstanden ist, bleibt mir dies verwehrt.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Was? Wozu denn gleich zwei RC's? Du kannst doch mittels eine Booleans festlegen in welcher der Ansichten du dich befindest (2D / 3D) und dem entsprechenden setzt du eine Perspektive oder den Orthomodus. Dazu musst man keinen RC löschen. Du kannst ja genau wie du sonst die Perspektive setzen auch einfach zwischendurch dann mal den Orthomodus setzen und schon isses 2D.
[edit] So ähnlich wie das bei HUD's gelöst ist. Dort wird ja wärend der 3D Darstellung in die 2D Darstellung gewechselt und wiederzurück. Nur das du in dem Fall halt gleich die 3D auslässt.
Zuletzt geändert von Lossy eX am Mo Feb 07, 2005 15:13, insgesamt 1-mal geändert.
Registriert: Di Feb 01, 2005 15:59 Beiträge: 14 Wohnort: nähe Stuttgart
Ok, aber das erklärt mir trotzdem nicht warum der Aufruf von wglCreateLayerContext über die Windows-Unit funktioniert während die Funktion die sich dglopengl holt nicht klappt. Beide greifen doch auf die gleiche opengl32.dll zu, oder nicht?
Was passiert wenn ich das jetzt so lasse und an dieser stelle die Funktion der Windows-unit verwende, während ich sonst weiterhin die wgl-Funktionen, die mir dglopengl.pas bereitstellt, verwende?
Registriert: Di Feb 01, 2005 15:59 Beiträge: 14 Wohnort: nähe Stuttgart
@Lossy Ex
Der 2D View ist nicht OpenGL, sondern was eigenes. Hier können 2D Zeichnungen erstellt werden, die dann in 3D Modelle umgerechnet werden und dann in OpenGL angezeigt werden. Das ganze ist schon über einige Jahre gewachsen, wir wollen jetzt eben auch die Features von OpenGL 1.5 im 3D Modus nutzen, deshalb der Umstieg jetzt.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Hmmm. Das wäre nützliches Hintergrundwissen gewesen.
Aber zurück zu deinem Problem. Und ja die greifen alle drei auf die selber Dll zu. Davon gibt es ja nur eine. Machst du sonst noch etwas mit der dglOpenGL?
Ich habe mir nämlich gerade mal alle 3 Versionen angesehen.
- Windows bindet die Methode statisch ein.
- OpenGL12 bindet dieses Mittels GetProcAddress ein
- dglOpenGL bindet diese Mittels wglProcAddress ein und sollte das nicht geklappt haben dann mittels GetProcAddress.
Das wundert mich ein wenig, dass es nicht klappt. Aber sonst könntest du auch die wglCreateLayerContext auf der Unit Windows benutzen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Zu meiner Rechtfertigung: Ich dachte mir, das er zwei verschiedene Zeichenflächen benutzt, denn es klang ziemlich nach 3D Modellierer o.Ä. .Deshalb das mit den zwei RCs.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: Google [Bot] 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.