Ich habe in meiner Anwendung das Problem, dass ich zwei Frames jeweils auf ein Panel werfe. (Innerhalb einer Form) Ich habe in jedem Frame eine Instanz einer Unit, die für die Darstellung der OpenGL Scene zuständig ist. Sprich, ich habe eigentlich zwei verschiedene RCs, bzw. DCs. Nun dachte ich, dies sollte OpenGL handeln können und beide unabhängig voneinander darstellen. Aber nix da, der Frame auf den Ich zuletzt zeichne, sprich bei dem als letztes die Instanz der RenderUnit erzeugt wird, wird auch nur dargestellt. Ich möchte zwischen den Render Contexten wechseln können und nicht über Viewport oder Scissor gehen, da ich diese Frames unabhängig voneinander laufen lassen und den RC bei dem einen auch mal deaktivieren bzw. aktivieren möchte.
Ich habe schon diesen Renderswitching Thread gelesen, nur wird dort zum grossen Teil von GLViewPort geprochen. Dies wäre auch dahingehend interessant, wenn man den selben Frame in einer weiteren Form(Dialog) aufmacht, welche bei Buttonclick aktiviert wird und diese zum selben Zeitpunkt zeichnet, wie der Frame auf der Form zuvor.
Vielleicht hat jemand von Euch eine Idee. Ich habe dieses Problem seit Beginn meiner OGL-Laufbahn (naja, noch nicht so lange) und immer wieder muss ich bei dem Thema passen. Ich habe schon gelesen, dass es ein wglcurrentDC gibt, kann aber nicht wirklich viel damit anfangen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Vom Prinzip her kannst du dir mal dieses Beispiel anschauen, welches aber noch die OpenGL12.pas verwendet, was nicht zu empfehlen ist! Also nur das Prinzip anschauen und möglichst kein C&P machen.
Generell kannst dir mal die Funktion wglMakeCurrent anschauen, die für den Wechsel zwischen zwei Renderkontexten zuständig ist. Wenn du vor dem Zeichnen in jedem Frame entsprechend diese Funktion aufrufst, sollte das ganze schon Funktionieren.
Viel Erfolg
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Hinweis am Rande: Bist du dir sicher das du wirklich zwei Kontexte möchtest? Üblicherweise will man nämlich Dinge wie Texturen in beiden Viewports gemeinsam nutzen. Ich bin Qt-Nutzer und weiß daher nur wie es dort geht: Man muss explizit angeben welche Kontexte sich die Daten teilen sollen.
Werde mir das mit dem wglMakeCurrent gleich mal anschauen. Das war auch der wgl-Befehl, den ich ursprünglich oben gemeint hatte. Muss jetzt mal damit rumexperimentieren.
@Coolcat
Ich gehe schon davon aus, dass ich den Rendercontext wechseln muss, da ich ja nicht in derselben Form arbeite, aber den Rendercontext des einen Frames doch aufrecht erhalten möchte, wenn ich den anderen öffnen will. Oder sehe ich das falsch. Zuvor habe ich das immer so, gemacht, dass ich sämtliche Variablen, wie Rotation,Zoom, FigurenVertices, etc. sichere wenn ich die zweite Form öffne, den Rendercontext des Frames freigebe und anschliessend, wenn ich die Form wieder schliesse, erstelle ich einen neuen Rendercontext und setze die Parameter neu. Das war nun der Grund warum ich zwischen den Rendercontexten switchen möchte.
Also ich hab das jetzt mal mit dem wglCreateContext gemacht und irgendwie bekomme ich genau an der Stelle einen AdressFehler. Bei mir sieht das so aus:
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich schätze mal, InitOpenGL wird irgendwo einmal aufgerufen?
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Du musst auch mindestens einmal ActivateRenderingContext der dglOpenGL aufrufen. Bzw. alternativ die Methoden ReadImplementationProperties und ReadExtensions.
Denn diese Methoden laden die Funktionspointer von OpenGL. Ohne diese Methoden kannst du deine Anwendung zwar übersetzen und starten. Aber solltest tatsächlich versuchen irgendwas zu zeichnen, wird es dort wieder Fehler geben, da die Funktionspointer nicht geladen wurden.
Du kannst das Erstellen des Rendercontextes im übrigen auch mit der dglOpenGL erledigen. Du müsstest da bei CreateRenderingContext eben nur einen anderen DC übergeben. Wobei es nie schaden kann zu wissen was da wirklich passiert.
Mitglieder in diesem Forum: 0 Mitglieder und 26 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.