Ich habe gerade versucht OpenGL in zwei unterscheidlichen Forms eines Projekts zu verwenden. In einem Form habe ich schon einen haufen programmiert und wollte jetzt noch ein zweites Form dazumachen. Habe den Header in die neue Unit kopiert und wollte anfangen, aber jetzt wird im ersten Form nurnoch eine schwarze Fläche gerendert. An was liegt das? Wie kann ich OpenGL ohne Fehler auch im 2. Form verwenden?
Okay, ich hab noch ein bisschen rumprobiert. Ich habe jetzt selbst eine Lösung gefunden, weiß aber nicht, ob das so das Gelbe vom Ei ist. Undzwar erzeuge ich das zweite Form erst wenn ich es anzeigen will und zerstöre dann auch das erste. Umgekehrt natürlich dasselbe. Was haltet ihr davon?
Außerdem noch eine Frage zu einer Fehlermeldung: Wenn ich das zweit Form anzeige, wieder ins erste wechsle und dann erneut das zweite erzeugen will kommt eine Fehlermeldung: Zugriffverletzung bei Adresse 004033D1 in Modul 'Projekt1.exe'. Lesen von Adresse FF000008. Das Form wird dann aber auch trotzdem erzeugt... Wisst ihr warum mich Delphi nicht auf exe zugreifen lassen will?
//Edit: Vielleicht habe ich dieses Thread doch im falschen Board erstellt!? Wäre Allgemein besser?
Registriert: Fr Jul 14, 2006 13:08 Beiträge: 117 Wohnort: Berlin
moin jonathanschmid,
Ich denk mal Du hast deinen Renderkontext , also das Handle von Form1 "verloren" als du das zweite Form aufgemacht hast und OGL neu initialisiert hast. Du brauchst du eigentlich nur ein andes Handle übergeben, zum Rendern auf einer anderen Formularfläche (Form2) und wenn das form1 wieder aktiviert wird, nimmst du dann diese Handle deiner "Zeichenfläche".
und genau deswegen greift OGL dann nach dem Ausblenden von Form2 ins Leere.
habs zwar selber noch nie probiert, aber naja, Versuch macht klug, oder ?
Uwe
_________________ Die 3 Totfeinde eines Programmierers ? a) Tageslicht b) frische Luft c) ..und das ständige Gebrüll der Vögel
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also eine AccessViolation zu gut Deutsch Zugriffsverletzung tritt immer dann ein, wenn du versuchst auf etwas zuzugreifen was aber gar nicht existiert. Ein Klassischer Fall wäre zum Beispiel ein Objekt sagen wir mal ein TForm. Dieses wird erzeugt, dann mit Free freigegeben und schließend greift aber jemand noch einmal auf das Fenster zu. Die Variable des Fensters beinhält noch die Adresse wo sich der Speicherbereich des TForms mal befunden hat aber der Speicher an sich existiert nicht mehr. Also gibt es dann eine Zugriffsverletzung. Das zum Allgemeinen.
Als erstes gleich einmal vorweg. Wir haben auch ein Sample in dem 2 Kontexte benutzt werden. Finden kannst du dieses unter "Files" -> "Templates". Ich denke mal es könnte hilfreich sein da mal einen Blich rein zu werfen. Sonst musst du natürlich darauf achten, dass deine Formulare jeweils einen eigenen Kontex erstellen und diesen beim Beenden wieder frei geben. Du musst bevor du auf einem Kontext zeichnen kannst diesen dann auch erst einmal aktivieren. Das musst du vor jedem Zeichnen machen und mit der Methode "ActivateRenderingContext". Dabei solltest du für den Parameter "loadext" immer ein False übergeben. Damit kannst du verhindern, dass bei jedem Zeichnen die paar hundert Methoden neu geladen werden. Allerdings solltest du dann direkt nach dem Erstellen es ein mal mit loadext = true aufrufen oder ein mal die Methoden ReadExtension und ReadImplementedProperties. Damit du deine Extension ein mal lädst und sie verwenden kannst.
Zu allem anderen Fehlt leider ein bisschen Code. So können wir sonst nur raten.
PS: Es ist natürlich immer Sinnvoll etwas nur dann zu tun wenn es auch wirklich notwendig ist. Außer der Aufwand dies zu realisieren ist wesentlich größer als der Vorteil den dies hätte. Aber dann hätte man wohl ein Designproblem in seinem Programm. (So viel zu den Weiseheiten des Steffen X. nach dem ersten Kaffee)
Vielen Dank für eure vielen Antworten! Ich bin zum Teil zwar nicht ganz mitgekommen, aber sie haben mir trotzdem sehr, sehr geholfen!! Ich konnte jetzt mein Problem lösen. Danke nochmal.
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.