wxGLCanvase und wxLogError
-
Hallo,
ich zeichne mit wxGLCanvas momentan sehr viele Bilder. Das klappt auch.
Jetzt habe ich in meiner Klasse einen Befehl eingebaut um die gl-Fehler abzufragen und am Bildscihrm auszugeben.void wxStefan3dCanvas::OnPaint(wxPaintEvent& event) { if (IsShownOnScreen()) { // Das aktuelle OpenGL-Fenster auswählen SetCurrent(); // DC öffnen wxPaintDC dc(this); // Malen nach Zahlen! // Malen nach Zahlen! // Malen nach Zahlen! // Fehler von OpenGL abholen Stefan3dErrorNumber MyError = MyParentEngine->ErrorNumberGet(); if ((MyError!=Stefan3dErrorNoError) && (ErrorLast!=MyError)) { wxString err; err << _("Error") << _T(": Stefan3d ") << MyError; wxLogError(err); } ErrorLast = MyError; // Damit ein Fehler pro Durchgang nicht 10000 Mal kommt! // Auf den Bildschirm SwapBuffers(); } else { event.Skip(); } Refresh(false); }
Wie man erkennen kann gebe ich die Fehler einfach per wxLogError() aus.
Um zu testen habe ich mit glPushMatrix(); einen Overflow erzeugt. Mein Debugger führt mich auch zu dem wxLogError() aber leider passiert keine Ausgabe. Erst wenn ich das Programm beende, werden alle Meldungen, die ich mit wxLogError erzeugt habe am Bildschirm sichtbar.
Nebenbei habe ich auch noch das Problem, dass in meinem Hauptframe das rote X oben rechts (Windows:Close) nicht funktioniert. Man drückt, aber es passiert nichts.
Ich vermute mal, das hat beides die gleiche Ursache:
Vor lauter Refresh werden bestimmte Events nicht abgearbeitet?
Falls das so richtig ist, wie kann ich wxWidgets dazu zwingen zwischen den Refresh (also dem Rendern) seine ToDo-Liste (wxWidgets hat doch sowas intern, glaube ich) abzuarbeiten?Frage am Rande: Ist es der einzige sinnvolle Weg bei wxGLCanvas mit Refresh zu arbeiten? Oder gibt es da noch bessere Lösungen (ich meine keinen Timer. Timer wirkt zu "unflüssig").
Danke im Voraus fürs "Hirn-leihen",
Stefan
-
Das mit den Messages habe ich schon mal gelöst mit
wxLog::FlushActive();
Aber der Close-Knopf in Windows ist immer noch inaktiv.
Jemand eine Idee?
Gruß,
Stefan