Delphi 2007, aktuelle OpenGL Header hier aus dem Forum. Programm mit einem extra Form, auf dem sich ein Panel befindet auf dessen Handle OpenGL initialisiert wurde.
Wenn das Programm nun läuft und ich das Fenster mit OpenGL verschiebe oder Schließe werden alle anderen "normalen" Windowsfenster statt mit dem regulären Inhalt mit Teilen der OpenGL Ausgabe angezeigt. So auch die komplette Taskleiste und Systray Icons.
Das OpenGL Fenster wird mit
Parent:= NIL;
ParentWindow := GetDesktopWindow;
initialisiert, damit es unabhängig vom Rest des Programmes ist.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also so genau kann ich das jetzt nicht sagen, das die Informationen alle ein bisschen zerstückelt sind. Aber dein Renderfenster ist ein Unterfenster des Desktops? Und da denke ich, dass der Desktop sich deswegen solche Dinge gefallen lässt ohne sich neuzuzeichnen. Weil wenn es ein eigenständiges Fenster wäre, dann würde er das wissen und würde sich dort neu zeichnen.
Ein Fenster als Kind des Desktops zu setzen solltest du nur dann machen wenn es wirklich sein muss. Aber ich denke, wenn du dem Desktop beim Verschieben des Fenster ein WM_PAINT sendest könnte das evtl. schon ausreichen. Aber Vorsicht! Ist nur ein Tipp und es kann passieren, dass ein manueller Aufruf von WM_PAINT in einer Rekursionen endet. Vor allem weiß ich nicht was du sonst noch machst bzw was du überhaupt damit vor hast?
Ich will meinen OpenGL Kram wirklich einfach nur in einem neuen Fenster. Also nicht MDI/SDI sondern auch in der Taskleiste. Mehr soll das garnicht können. Dann kann man im Hauptprogramm bedienen, und im anderen Fenster anschauen.
Der RenderThread ruft einfach nur periodisch RenderAPicutre auf.
Also das Problem besteht auch, wenn man das Form in dem anderm Form drinnen lässt, und nicht den Desktop als Parent nimmt.
Es geht sogar soweit, dass wenn ihr das Form in dem anderem Form soweit nach rechts unten schiebt, dass ein Bereich nicht mehr zu sehen ist,
wird dieser trotzdem gerendert anstatt versteckt. Dieser Bereich ist dann auch der, der später von den anderen "Übermalten" Programmen nicht mehr neu gezeichnet wird.
Habt ihr Überhaupt schonmal einen OpenGL Bereich gehabt, der nicht fix an einer Stelle in eurem Programm verankert war?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Als erstes eines mal vorweg. Der Thread ruft RenderAPicture ja synchron auf, oder? Wenn nein, dann wundert es mich 1.) dass du etwas siehst und 2.) sollte das immer synchron aufgerufen werden oder alles im Thread stattfinden. Wobei ich den nutzen eines Threads dort auch nicht so ganz sehe. Aber das ist eine andere Sache.
Eine Sache die mich persönlich auch noch irritiert ist folgendes. Du erstellst ein Fenster welches ein Panel besitzt. Diesem weißt du aber die Größe des Bildschirmes zu. Da dein Fenster aber einen Rand haben müsste ist das Panel größer als der maximale sichtbare Bereich. Und dadurch, dass du das OpenGL komplett im Fenster darstellst ist das Panel auch überflüssig. Bzw wenn du ein Panel benutzt dann sollte das Panel auch die Größe haben die sichtbar ist. Also es sollte dann nicht irgendwo raus reichen.
Du hast auch nirgendswo Code mit dem du deine Ansicht einstellst. Das gluPerspective ist überall sauber auskommentiert.
DoubleBuffered bei einem Form zu setzen brauchst du bei OpenGL nicht. Könnte da sogar eher noch nachteilig sein.
Typischerweise hällt sich OpenGL aber ziemlich genau an die Bereiche die mit dem DC verbunden sind.
Also das Problem scheint nicht nur komplett an mir zu liegen (scheinbar):
Wenn ich das Template für OpenGL 1.5 laufen lasse http://www.delphigl.com/do_download.php?f=8 und das Fenster über die Taskleiste ziehe, wird diese auch nicht mehr neu gezeichnet, wenn man das Fenster weiter zieht.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Jetzt wirds aber langsam richtig komisch.
Also bei meinem Template läuft alles wunderbar. Ich hab auch noch nie von einem derartigen Verhalten gehört. Wenn unser Standard-Template so reagiert, dann scheint wohl irgendwas mit deinem Rechner nicht zu stimmen. Was für ein Betriebssystem hast du? Welcher GraKa? Und welchen GraKa-Treiber?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Windows XP Pro 32, ATI Mobility Radeo 9000 (Omega 3.8.330), Designs deaktiviert
evtl. liegt's wirklich an den Treibern, aber leider kann ich die "Offiziellen" nicht installieren, da meine GraKa halt Laptop-OEM ist, und der Hersteller (Maxdata) aktualisierte Treiber liefern muss anstelle von ATI, der hat aber nur knapp 3 Jahre alte auf dem FTP... (<-- und die haben mir das letzte Mal nur BlueScreen beschert, deswegen will ich die jetzt net unbedingt testen, weil ich dann noch net mal mehr in den Abgesicherten Modus herein kam...)
Ok, es schein wohl definitv an meinem Laptop zu liegen. Habe das Ganze eben auf einem anderen PC getestet, und das klappt es problemlos.
Bei mir kann man das OpenGL 1.5 Template auch nicht mit einem anderen Programm überdecken. *Seufz*
Interessant ist aber auch noch, dass ich mit dem Laptop (auch wieder mit dem Template) knapp 875-890 FPS schaffe, mit dem anderen PC (OnBoard ATI Radeon Xpress 200 mit Omega 3.8.273 eines Desktop PCs) aber nur knapp 60. Nun ja, da wird wohl V-Sync funktionieren...
Die Designs sind das nicht, weil ich arbeite immer ohne, habe aber auch mit getestet.
Es liegt definitv an den GraKa Treiber, da ich die Programme nun auf diversen anderen PCs getestet habe, und es dort auch geht. Zusätzlich habe ich mittelns eines alten Images meiner Platte mit den Originaltreibern verifizierten können, dass es damit auch funktioniert.
Also scheint einfach das Problem bei den Omegatreibern mit meiner Laptop-GraKa zu liegen.
Hab mir jetzt nen neuen Laptop geholt, der hat das Problem nicht. Der alte war eh schon 3 Jahre alt.
Thema ist damit also soweit erledigt, ich danke allen für die Tips und Anregungen.
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.