Mein Problem: Ich habe eine Anwendung in Delphi programmiert welche mehrere OpenGl- Fenster verwendet (innerhalb einer Delphi- Form). Weiterhin hat diese Anwendung eine andere Form, welche auch über ein OpenGl- Fenster verfügt. Diese Anwendung läuft auf meinem Notebook (Win2k + Ati- GraKa) einwandfrei. Sobald ich das Programm auf andere Rechner (Habe div. Rechner probiert: Win2k; Win98se, Ati-GraKa, TNT2-GraKa) übertrage habe ich folgende Effekte: Die Bilder werden teilweise nicht richtig gezeichnet (Bleiben schwarz). Beim Wechsel in die SubForm wird in dieser das Bild sauber gezeichnet. Springe ich zurück, werden die Bilder innerhalb der Form mit den mehreren OGL- Fenstern 'durcheinandergewürfelt, d.h. in falschen Fenstern gezeichnet. Teilweise wird auch garnichts gezeichnet. Ich habe mittlerweile verschiedene 'Fenster- Komponenten' aus div. OGL- Foren probiert. Der Effekt ist immer derselbe. Ich habe mein Programm in der Zwischenzeit aus Frust schon umgeschrieben und verwende nur noch ein Fenster pro Form (mehrere Zeichenbereiche), würde aber gerne wieder auf die ursprüngliche Variante zurückgehen.
Hat jemand schon 'mal soetwas programmiert???? Ich habe irgendwo gelesen das es da Restriktionen seitens Windows gibt; Stimmt das?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich hatte einen solchen Effekt bisher noch nicht. Und von einer Einschränkung in Windows habe ich bisher auch noch nichts. Vielleicht solltest du mal deinen Rendercode etwas überdenken. Also die Stelle an der du renderst. (Wo befindet sich der Renderloop?) Und überprüfe mal, dass du überall richtig das MakeCurrent richtig setzt und vor allem, dass sich die einzelnen MakeCurrents nicht selber stören. Nicht, dass ein anderes aufgerufen wird wärend du noch renderst. (Threads, ...) Ansonsten wüsste ich , so ohne beispiel (Anwendung, sourcen) auch nicht an was es liegen könnte.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Wie LossyEx bereits gesagt hat, machst du vielleicht was in deinem Renderloop falsch.Ich geh allerdings mal davon aus, das schon ein Fehler bei der Erstellung der Renderkontexte gemacht wird.Du solltest auf jeden Fall für jeden Renderkontext einen eigenen DC nutzen, also ungefähr so :
Code:
var
DC1, DC2 : HDC;
RC1, RC2 : HGLRC;
...
DC1 := GetDC(Form1.Handle);
DC2 := GetDC(Form2.Handle);
RC1 := CreateRenderingContext(..,DC1,...);
RC2 := CreateRenderingContext(..,DC2,...);
Dein Rendercode sollte dann ungefähr so aussehen :
Code:
ActivateRenderingContext(DC1,RC1);
// Zeichne Szene in Form1
SwapBuffers(DC1);
DeActivateRenderingContext;
ActivateRenderingContext(DC2,RC2);
// Zeichne Szene in Form2
SwapBuffers(DC2);
DeActivateRenderingContext;
So dürften eigentlich keine Renderkontexte durcheinander gewürfelt werden, da sie ja alle expliziz an den Devicekontext des entsprechenden Fenster gebunden sind.
DeActivateRenderingContext deaktiviert doch alle RenderKontexte ???
wglMakeCurrent(RC1, 0);
wäre besser zum deaktivieren, somit kannst du einzelne Kontexts deaktivieren. Ich hab das so momenan in meinem neuen Editor so gelöst. Ich hab 4 Panels zur Ausgabe genommen in einem TForm.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Es wäre wahrscheinlich das Beste, wenn du deine Quellen (kompilierbar. Mit allen benötigten Quellen) mal irgendwo hoch lädst, dass man da mal drüber schauen könnte. Dann könnten wir uns schnell einen Überblick verschaffen und würden des Rätzels Lösung finden.
Mitglieder in diesem Forum: 0 Mitglieder und 23 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.