Registriert: Mi Jul 18, 2012 17:36 Beiträge: 4
Programmiersprache: Delphi
Hallo, ich versuche unter Delphi 7, Windows 7, mehrere unabhängige Fenster mit jeweils einer OpenGL-Instanz zu erzeugen und darzustellen. Jedes Fenster für sich läuft problemlos, wenn das andere jeweils nicht erzeugt worden ist. Erzeuge ich jedoch erst das erste Fenster (mit eigenen DC, RC etc.) und dann das zweite, kommt es in der dglOpenGL-Routine ReadCoreVersion zu einem Zugriffsfehler.
Hat jemand vielleicht einen kurzen Beispielcode mit zwei OpenGL-Fenstern, die gleichzeitig laufen?
Bei Bedarf kann ich meinen Code bereitstellen, der allerdings in ein großes Anwendungsprogramm eingebettet ist.
Ich kann nicht genau sagen, was bei Dir das Problem ist. Aber vor einiger Zeit habe ich soetwas bei mir realisiert. Das Problem war das Binding. Wenn Du jeweils mit einem Fenster (OGL-Instanz) arbeitest, dann mußt Du vor dem Rendern erst das neue Fenster binden. Und der größte gedankliche Schritt war bei mir, dass sogar beim Destroyen erst die richtige Instanz gebunden werden muß.
Jedes Fenster muß sich RC und DC merken und vor dem Rendern binden. Probleme kann es mit gedockten Fenstern geben, wenn sie entdockt oder gedockt werden. Es ändert sich dann das Handle und eben RC/DC
Registriert: Mi Jul 18, 2012 17:36 Beiträge: 4
Programmiersprache: Delphi
Vielen Dank, hatte wglMakeCurrent aus irgendeinem Grund auskommentiert. Jetzt gibt es keinen Absturz mehr, aber leider geht es immer noch nicht richtig. Ich mache folgendes:
1. Im Hauptfenster meiner Anwendung erzeuge ich beim Programmstart ein TFrame-Objekt, in dem wiederum ein TPanel zum Zeichnen für OpenGL vorhanden ist. Alle notwendigen Variablen (RC, DC usw) sind lokal für das TFRame-Objekt und bleiben bis zur Beendigung der Anwendung erhalten. Beim ersten Anzeigen des TFrames wird korrekt gezeichnet.
2. Dann erzeuge ich ein völlig unabhängiges Fenster, in dem eine andere OpenGL-Zeichnung korrekt angezeigt wird, auch wenn ich das Fenster mehrmals schließe und öffne. Also alles ok.
3. Gehe ich dann wieder zurück ins Hauptfenster und zeige das o.g. TFrame-Objekt an, bleibt es leer. Hmmm
Liegt es an TFrame oder an den dort lokal und nicht global definierten OpenGL-Variablen?
Registriert: Mi Jul 18, 2012 17:36 Beiträge: 4
Programmiersprache: Delphi
Jetzt hab ich's. Habe wglMakeCurrent jetzt auch beim Freigeben des Fensters aufgerufen, also direkt vor DeactivateRenderingContext; DestroyRenderingContext(RC); ReleaseDC(Handle, DC);
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.