Ich möchte in meinem Projekt mehrere OpenGL-Fenster (eigene Delphi-Forms) verwenden. Bisher habe ich sie in einzelnen Anwendungen verbaut, und sie funktionieren alleine auch wunderbar. Jetzt möchte ich sie jedoch in einem Programm laufen lassen, weil sie sich eine Netzwerkkomponente teilen sollen. Nun habe ich das Problem, dass immer nur in einem Fenster gezeichnet wird, und zwar in dem welches zuletzt erzeugt wurde. Meine Frage also: Wie bekomme ich es hin, dass ich in einer Anwendung mehrere OpenGL-Forms öffnen kann? Es sollen am Ende 4-6 Fenster werden. Und nein, ich kann nicht einfach ein großes Fenster nehmen und dieses unterteilen, ich brauche separate Forms.
Etwas zum Source: Ich verwende euren DGLOpenGL-Header in der Version 2.0 vom 06.12.2005. Das Zeichnen läuft über OnIdle, das Init wird beim ersten Aufruf von OnFormPaint ausgeführt. Falls ihr noch etwas an Source braucht sagt Bescheid...
Vielleicht erzähl ich kurz was über das Projekt damit ihr besser wisst warum ich es so haben möchte... Ich schreibe gerade die Display-Software für einen 737-Flugsimulator (ein komplettes Cockpit zum reinsetzen) und habe dazu 3 PCs vernetzt, die daran beteiligt sind. Sie tauschen über UDP-Broadcast Daten aus, und diese UDP-Komponente blockiert einen bestimmten Port (dadurch immer nur ein Programm pro PC) und führt außerdem noch viele Berechnungen mit den Daten durch, so dass ich nicht einfach möchte, dass die Programme mit je einer UDP-Kompo parallel laufen könnten (soll wohl auch möglich sein), der Weg mit mehreren OGL-Fenstern und einer UDP-Kompo wäre mir lieber. Was jetzt noch hinzukommt ist, dass jede Form in einer DLL gekapselt sein soll, und ein Hostprogramm diese dann aufrufen soll. Das funktioniert mit einem Fenster alleine auch super, ansonsten tritt o.g. Problem auf.
Es wäre super wenn ihr eine Lösung dafür parat hättet, hab schon einiges ausprobiert und hab wohl irgendwie ein Brett vorm Kopf...
Euch allen noch einen schönen Abend
Flo
Zuletzt geändert von pokerpilot am Sa Jun 23, 2007 10:47, insgesamt 1-mal geändert.
Habe eine Lösung in einem anderen Thread gefunden! Den hatte ich gestern auch schon gelesen und ausprobiert, aber die entscheidende Funktion an der falschen Stelle eingesetzt (hatte gestern wohl schon einen Baum statt nur ein Brett vorm Kopf ). Jedenfalls war die Lösung des Problems, vor jedem Rendervorgang ein wglmakecurrent(dc,rc) aufzurufen, und das wars schon! Echt klasse, euer Forum!
Vielen Dank für die vielen tollen Beiträge, die mir schon so einiges Kopfzerbrechen aufgelöst haben! Ihr seid besser als Aspirin!
Mitglieder in diesem Forum: 0 Mitglieder und 24 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.