OpenGLControl und Lazarus 1.9.0 flackert bei Invalidate

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

OpenGLControl und Lazarus 1.9.0 flackert bei Invalidate

Beitrag von Mathias »

Wen ich den Code im Anhang mit Lazarus 1.8.4 kompiliere, dann läuft alles flacker frei, wie erwartet.
Kompiliere ich aber den Code mit der neusten Trunk 1.9.0, dann flackert meine Scene.

Da Problem wird bei folgenden Code ausgelöst.

Code: Alles auswählen

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  OpenGLControl.Invalidate;
end;   

Ersetze ich Invalidate durch DrawScene, läuft es auch mit 1.9.0 .

Code: Alles auswählen

  DrawScene;


Kann sonst noch wer dieses Problem nachvollziehen ?
Ich verwende Linux Mint 19.0 64Bit.
Kann es jemand noch mit Windows testen ?
Dateianhänge
Goto_Null.tar.gz
(127.31 KiB) 80-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: OpenGLControl und Lazarus 1.9.0 flackert bei Invalidate

Beitrag von wp_xyz »

Kein Flackern bei mir (Win 10/64 bit, Laz trunk/fpc 3.0.4 32 bit, oder Laz trunk /fpc trunk 32 bit). Allerdings fehlt manchmal zu Beginn der Animation ein Teil des Sechsecks - siehe Screenshot.
Dateianhänge
Goto_null.png

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OpenGLControl und Lazarus 1.9.0 flackert bei Invalidate

Beitrag von Mathias »

Das fehlende Teil ist io.
Es flackert der Weisse Hintergrund des Forms durch. Und dies nicht bei jedem Frames.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1496
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: OpenGLControl und Lazarus 1.9.0 flackert bei Invalidate

Beitrag von corpsman »

Auf meinem Mint Mate flackerts auch, selbe Lösung des Problems wie bei dir.
--
Just try it

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OpenGLControl und Lazarus 1.9.0 flackert bei Invalidate

Beitrag von Mathias »

Dann wird es wohl einen Bug-Report geben.

Ich werde am Abend das Project auf einem Minimum abspecken, unter Umständen muss nicht mal was gerendert werden. Ein SwapBuffer müsste reichen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: OpenGLControl und Lazarus 1.9.0 flackert bei Invalidate

Beitrag von wp_xyz »

Nimm doch gleich das mitgelieferte Beispiel (components/opengl/example/testopenglcontext1) - das flackert in meiner Mint-VM (gtk2) extrem (auf Win10 überhaupt nicht). Falls das ein neues Verhalten ist wäre es auch Interessant und hilfreich, wenn du im svn zurückgehst, und die Revision herausfindest, bei der der Fehler erstmals aufgetritt.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OpenGLControl und Lazarus 1.9.0 flackert bei Invalidate

Beitrag von Mathias »

Nimm doch gleich das mitgelieferte Beispiel (components/opengl/example/testopenglcontext1) - das flackert in meiner Mint-VM (gtk2) extrem

Flackern ginge noch, der Würfel kommt gar nicht, ausser wen ich das Fenster mit der Maus endlos Resize, dann erscheint der Würfel zwischendurch.
Mit Lazarus 1.8.4, läuft es einwandfrei.

Ich wollte schon mein Tutorial ändern aber so wie es aussieht, ist es ein Bug von OpenGLControl.

PS: Habe gerade ein Bug-Report erstellt: https://bugs.freepascal.org/view.php?id=34094
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OpenGLControl und Lazarus 1.9.0 flackert bei Invalidate

Beitrag von Mathias »

@ wp_xyz
Ich habe gerade dein Text im Bug-report übersetzt.
Keine Probleme in Windows (Win 10) mit dem Laz Beispielprojekt. Massives Flimmern in Linux Mint (gtk2).

Kein Flimmern, weder in Win noch in Linux mit der von Ihnen bereitgestellten Demo. Wahrscheinlich fehlt etwas. Bitte fügen Sie ein kompilierbares Projekt hinzu, nicht nur ein Code-Snippet.

Das stimmt, flackern tut das Bild nicht, aber dafür ist der Würfel nicht sichtbar.

Jetzt kommt der Würfel nicht mal mehr mit Resizen mi der Maus.
Wen ich richtig gelesen habe, kam vorhin ein Update von XOrg bei Mint.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OpenGLControl und Lazarus 1.9.0 flackert bei Invalidate

Beitrag von Mathias »

Ich habe mal ein "diff" zwischen Stable und Trunk ausgeführt.

Ein paar Änderungen gab es da schon.
Vor allem gibt es Differenzen mit "Handle: HWND" .
Dateianhänge
OpenGLControl__diff.txt
(11.58 KiB) 59-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: OpenGLControl und Lazarus 1.9.0 flackert bei Invalidate

Beitrag von wp_xyz »

Mathias hat geschrieben:@ wp_xyz
Ich habe gerade dein Text im Bug-report übersetzt.
Keine Probleme in Windows (Win 10) mit dem Laz Beispielprojekt. Massives Flimmern in Linux Mint (gtk2).

Kein Flimmern, weder in Win noch in Linux mit der von Ihnen bereitgestellten Demo. Wahrscheinlich fehlt etwas. Bitte fügen Sie ein kompilierbares Projekt hinzu, nicht nur ein Code-Snippet.

Das stimmt, flackern tut das Bild nicht, aber dafür ist der Würfel nicht sichtbar.

Jetzt kommt der Würfel nicht mal mehr mit Resizen mi der Maus.
Wen ich richtig gelesen habe, kam vorhin ein Update von XOrg bei Mint.

Aber in dem von dir geposteten Code wird überhaupt nichts gezeichnet (FormCreate erzeugt das OpenGLControl, OpenGLControlPaint swappt die Buffer, und OnTimer ruft OpenGLCOntrol.Invalidate auf - nirgendwo "echter" OpenGL-Code)- daher habe ich geschrieben, ob nicht vielleicht etwas fehlt. Poste ein komplettes Projekt, dann kannst du dich vorher überzeugen, dass der Fehler reproduziert werden kann, und sparst dem Entwickler, der sich dieses Reports annimmt, die Arbeit, das projekt aus deinen Fragmenten neu aufzubauen und vielleicht etwas zu übersehen.

Mathias hat geschrieben:Ich habe mal ein "diff" zwischen Stable und Trunk ausgeführt.

Ein paar Änderungen gab es da schon.
Vor allem gibt es Differenzen mit "Handle: HWND" .

Weiß nicht, ich dachte eher, etwas im WidgetSet, weil unter Windows das Flackern ja nicht auftritt.

In solchen Fällen mache ich immer ein svn update zu einer älteren Revision (ich mache das mit TortoiseSVN, den Kommandozeilenbefehl dafür weiß ich nicht), übersetze das Testprogramm und prüfe, ob der Fehler auftritt. Wenn ja, gehe ich eine ähnlich Anzahl an Revisions zurück, andernfalls suche ich eine Revision etwa in der Mitte zwischen damals und heute und mache wieder dasselbe: also svn update zu dieser Revision und Testprogramm prüfen. Usw. Je nachdem, ob der Fehler auftritt oder nicht, geht es um die Hälfte zum letzten erfolgreichen/fehlerhaften Test vor bzw zurück (so wie bei jeder binären Suche). Damit hat man in absehbarer Zeit die Resivion gefunden, die den Fehler erzeugt. An dem diff zwischen letzter guter und erster fehlerhafter Revision sieht man, was geändert wurde, und dann fällt meistens der Groschen.

In der Regel reicht es, nach jeder Iteration nur das Testprogramm zu übersetzen, aber gerade wenn viele Revisionen übersprungen werden, muss man auch Lazarus neu bauen, evtl. sogar sauber. Das schlägt dann auf die Zeit. Und manchmal habe ich mir auch schon die Trunk-Installation zerschossen. Also sei gewarnt. Aber anders geht es nicht, vor allem wenn man den problematischen Code nicht selbst geschrieben hat.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OpenGLControl und Lazarus 1.9.0 flackert bei Invalidate

Beitrag von Mathias »

Hier hat anscheinend jemand ein ähnliches Problem. dieser Report wurde mitte Juni erfasst.
https://bugs.freepascal.org/view.php?id=33864
Ich habe die Links dort probiert, die flackern bei mir auch.

Ich habe bei meinem Report ein neues einfaches Example hoch geladen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten