Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jun 13, 2021 01:10

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: OpenGL verlangsamt Programm
BeitragVerfasst: So Jan 24, 2021 19:09 
Offline
DGL Member

Registriert: Sa Jan 03, 2015 13:28
Beiträge: 23
Programmiersprache: Lazarus/FPC
Hallo zusammen,

Ich entwickle in Lazarus eine Bildverarbeitungssoftware die ziemlich komplexe Berechnungen durchführt, die teilweise einige Zeit beanspruchen, je nach Bildgröße und ~inhalt.
Vor einiger Zeit habe ich es, mithilfe der dglOpenGL und einigen freundlichen Menschen hier im Forum, hinbekommen, ein animiertes GPU gestütztes Vorschaufenster mit GLSL Shadern einzubauen, was wundervolle Dinge ermöglicht.
Soweit, so gut, Cross Platform Tests sahen bisher auch vielversprechend aus.
Nun jedoch musste ich feststellen daß allein das Erstellen eines Contexts das restliche Programm so sehr ausbremst daß komplexe Bildberechnungen mehr als 3 mal so lange dauern als wenn kein Context erstellt wird (eine Operation die sonst 1,4 Sekunden dauert, dauert nun mehr als 7 Sekunden).
Alleine die Zeile
Code:
  1. ogc := TContext.Create(Panel2);
reicht aus um das Programm zu verlangsamen, selbst wenn ich danach gleich
Code:
  1. DeactivateRenderingContext;
  2. FreeAndNil(ogc);
aufrufe.
Habe ich irgendwas vergessen, gibt es noch mehr Befehle die ich zum "Abschalten" von OpenGL aufrufen muss? Wenn ich zwei Instanzen des Programms laufen lasse, wobei in der einen OpenGL aktiviert ist und in der anderen nicht, kann ich direkt das Tempo vergleichen, also es scheint ein Problem innerhalb des Programms zu sein, die zweite Instanz ist nicht davon betroffen.
Bin für jede Hilfe dankbar.


Noch ein paar Details über mein System:
Windows 10 64 bit
Lazarus 2.0.6, compiliere 32 Bit Anwendung
FPC Version 3.0.4
LCL Widgetset: Win32


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL verlangsamt Programm
BeitragVerfasst: Di Feb 02, 2021 13:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jun 05, 2013 15:12
Beiträge: 150
Wohnort: Glinde
Programmiersprache: Delphi 7
Ohne Code wied es schwer zu sagen, was genau passiert.
Ich habe auch ein paar Projekte in Lazarus, aber verlangsamt wurde dort noch nix.

Hier ein Beispiel was passieren könnte.
Du erstellt immer neue Rendercontext, obwohl du nur einen brauchst. "(je nachdem wie viele Fenster du Hast)"
Ich erstelle einen Context zum Programmstart. Und zeichne einfach nix hinein, wenn ich es nicht brauche.

Du zeichest oder berechnest irgendwo noch daten für das Vorschaubild.

Mehr kann ich auch nicht raten.

_________________
幸福は笑う人に来て ~~ koufuku wa warau hito ni kite
Das Glück kommt zu denen die lachen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: OpenGL verlangsamt Programm
BeitragVerfasst: Do Feb 04, 2021 21:40 
Offline
DGL Member

Registriert: Sa Jan 03, 2015 13:28
Beiträge: 23
Programmiersprache: Lazarus/FPC
Vielen Dank, Polarwolf, das war schonmal eine große Hilfe und ein Schubser in die richtige Richtung.
Ich habe tatsächlich den Rendercontext immer wieder neu erstellt und dann bei Bedarf wieder gelöscht, allerdings glaube ich nicht daß das das Problem verursacht hat (Aufgrund der wählbaren Shader-Optionen erstelle ich auch den Shader bei jeder Änderung neu).
Habe auch versucht, ein ganz schmales Programm zu schreiben um das Problem reproduzierbar zu machen, dabei gab es allerdings keine Verzögerungen.

Polarwolf hat geschrieben:
Du zeichest oder berechnest irgendwo noch daten für das Vorschaubild.

Das hat geholfen! Teilweise lag es wohl daran daß die draw-Routine dem OnPaint Event des Panels zugewiesen war (habe auch einen Timer der bei jedem Tick rendert während er aktiv ist), was bei Neuberechnungen von Bildern und Aktualisieren des Image-Objekts, welches sich auf dem RenderPanel befindet, wohl das draw Ereignis ausgelöst hat und damit einen Teil der Verzögerung.
Ohne OnPaint Event humpelt das Ganze schon deutlich weniger.
Wenn ich weitere Problemquellen/Lösungen finde, werde ich sie hier wieder posten, vielleicht hilft es ja dem nächsten OpenGL Amateur ;)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.044s | 18 Queries | GZIP : On ]