glDepthFunc(GL_LESS);// Nur Fragmente mit niedrigerem Z-Wert (näher an Betrachter) "durchlassen"
glClearColor(0,0,0,0);// Löschfarbe für Farbpuffer setzen
BuildFont('MS Sans Serif');// Displayfont erstellen
Application.OnIdle:= ApplicationEventsIdle;// Idleevent für Rendervorgang zuweisen
StartTick := GetTickCount;// Zeitpunkt des Programmstarts für FPS-Messung speichern
aber ich sehe leider nichts auf dem Panel meiner Form 2 auch wenn die berechnungen funktionieren.
das habe ich schon getestet.
er geht auch in den Render Loop, aber ein Ausgabe? ne
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Das Visible hat nichts mit dem OnCreate zu tun. Sobald deine Anwendung startet wird Form1 erstellt und direkt hinterher Form2. Das bedeutet du musst die OpenGL Initialisierung entweder in das OnShow packen oder in dem OnShow einmal ActivateRenderContext aufrufen um den RC an den aktiven Thread (gibt bei dir nur den VCL Thread) zu binden. Ehrlich gesagt wundert es mich gerade auch etwas warum du überhaupt etwas auf Form1 siehst. Weil eigentlich ein RC nach dem ersten RC aktiviert wird.
Falls du etwas mit OpenGL im OnResize tust solltest aber nach dem erfolgreichen Initialisieren eine Variable des Forms füllen und diese im OnResize überprüfen. Also erst etwas tun wenn es erfolgreich erledigt wurde.
Kannst du eigentlich häufig zwischen den Forms hin und herwechseln? Ich frage das deswegen, da ActivateRenderContext alle OpenGL Funktionspointer lädt. Das Dauert durchaus etwas. Was aber in deinem wahrscheinlich gar nicht nötig wäre. Evtl sollte dort auch eine globale Variable seine Dienste tun. Also nach dem ersten Laden diese Variable setzen und falls diese gesetzt ist dann den dritten Parameter bei ActivateRenderContext auf False. Dann geht das Aktivieren ziemlich schnell.
Ich hatte echt nicht daran gedacht das das Formcreate garnicht durchlaufen wird^^
Jetzt habe ich nur noch ein Problem, was mir sehr schleierhaft ist.
Am anfang lade ich für die Form1 meine Texturen, und es geht alles einwandfrei.
Jetzt wechsel ich in die Form2 --> es geht alles einwandfrei
Jetzt wechsel ich in die Form1 --> Alle meine Texturen sind weg, und ich muss meine Procedure Textureload neu aufrufen.
Warum?
Wer gibt denn bitte meine Texturen frei?
(ist ein Array of GLUint)
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Du hast 2 RCs und jeder RC hat seine eigenen Texturen. Wenn du einen RC löscht dann sind auch die Texturen weg. Dann musst du diese wieder laden. Aber da du hin und her wechselt (wonach ich oben ja auch gefragt habe), mache mal bitte folgendes.
Im OnCreate erstellst du deine RCs.
Im OnShow rufst du ActivateRenderContext(xx, xx, false) auf.
Beim Wechsel machst du nichts weiter also Form1 zu verstecken und Form2 zu zeigen.
Im OnDestroy eines Fensters gibst du den RC und DC wieder frei.
Wenn Form2 erzeugt wird und der RC erstellt ist rufst du folgendes auf. wglShareLists(Form2.RC, Form1.RC); (Oder mal vertauschen. Weiß nicht genau) Damit teilst dem RC von Form2 mit, dass er alle Texturen des RCs von Form1 benutzen soll.
Wenn du später einmal alle beiden Fenster gleichzeitig darstellen willst musst du vor JEDEM Zeichnen den entsprechenden Kontext aktivieren. Pro Thread kann nur ein Kontext aktiv sein. Deswegen müsste man das so machen. Und dann so wie ich das oben gepostet habe. Derzeit musst du den nur ein Mal aktivieren, da nicht beie gleichzeitig zeichnen sondern das durch die sichtbarkeit geregelt wird.
Mitglieder in diesem Forum: Bing [Bot] und 5 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.