OpenGL Memory Leak ?

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
Chefkoch
Beiträge: 12
Registriert: Do 2. Sep 2010, 15:48

OpenGL Memory Leak ?

Beitrag von Chefkoch »

Guten abend!
Ich beschäftige mich gerade mit OpenGL bin da aber noch ein rechter Anfänger. Jedoch treffe ich bereits auf ein für mich unlösbares Problem: egal wie simpel ich meine OGL-Anwendung gestalte(also z.b. nur ein Quad rendere) allokiert das Programm immer mehr RAM bis zu einer Obergrenze von 2GB(!!) daraufhin stürzt es dann ab. Der Prozess bis die genannten 2GB erreicht werden dauert unterschiedlich lange, dies hängt auch damit zusammen, dass es "Rücksprünge" im allokierten Arbeitsspeicher gibt. Bisher konnte ich feststellen, dass ein Aufruf von glClear() den oben beschrieben Prozess signifikant beschleunigt. Mein System: Nvidia 540gtm 2GB, 8GB RAM und Windows 7 64 bit desweiteren verwende ich den OGL Header von delphigl. Ich poste hier noch "meinen" (der einfachheit halber ist dieser aus einem Tutorial von delphigl übernommen) Source.

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  DC:= GetDC(Form1.Handle);
  if not InitOpenGL then Application.Terminate;
  RC:= CreateRenderingContext( DC,
                               [opDoubleBuffered],
                               32,
                               24,
                               0,0,0,
                               0);
  ActivateRenderingContext(DC, RC);
  glClearColor(0, 0, 0, 0);
  glEnable(GL_DEPTH_TEST);
  Application.OnIdle := @Idle;
end;
 
procedure TForm1.Idle(Sender: TObject; var Done: Boolean);
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
 
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
 
  glTranslatef(0, 0, -5);
 
  glBegin(GL_QUADS);
    glColor3f(1, 0, 0); glVertex3f(0, 0, 0);
    glColor3f(0, 1, 0); glVertex3f(1, 0, 0);
    glColor3f(0, 0, 1); glVertex3f(1, 1, 0);
    glColor3f(1, 1, 0); glVertex3f(0, 1, 0);
  glEnd;
 
  SwapBuffers(DC);
 
  Done := False;
end;

p.s. ja ich deaktiviere den Renderkontext bei OnDestroy ; )

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
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: OpenGL Memory Leak ?

Beitrag von corpsman »

Du nutzt dglOpenGL.pas, das ist schon mal gut.

Dann installiere dir mal die Komponente OpenGLControl ( ist bei Lazarus unter components )

und teste mal mein Sample

evtl. geht dass.
--
Just try it

Chefkoch
Beiträge: 12
Registriert: Do 2. Sep 2010, 15:48

Re: OpenGL Memory Leak ?

Beitrag von Chefkoch »

Ich habe jetzt dein Sample versucht. Diese verwendet ja bereits die LazOpenGLControl, jedoch ist das "Allokierungsverhalten" des Programms dasselbe d.h. der verwendete Arbeitsspeicher macht die ganze Zeit über Sprünge. Mittlerweile versuchte ich auch das Programm mal mit gDEBugger zu debuggen. Interessanterweise sagt gDEBugger dass es keine memory leaks gibt.
Mittlerweile hab ich auch andere OGL Samples versucht (Samples aus den Tutorials von DelphiGL) aber auch diese haben die Lecks, deshalb nehme ich mal an dass es was mit OGL oder meiner Maschine zu tun hat. Jemand eine Idee?

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
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: OpenGL Memory Leak ?

Beitrag von corpsman »

Hmm, also evtl liegts an dem 64-Bit System, besonders Windows hat damit gewaltige Probleme..

Ich hoffe du nutzt die SVN Version von Lazarus, wenn nicht teste alles noch mal mit dieser, ansich dürfte sich aber nicht viel am Binary ändern, da der FPC Compiler der selbe ist...

Wie wärs wenn du deine Anwendung für 32-bit kompilierst und dann mal unter deinem 64-bit System testest ?

Du siehst, ich rate auch nur rum.
--
Just try it

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: OpenGL Memory Leak ?

Beitrag von MAC »

also ich hab win 7 64 bit und nvideo 560 Ti (1GB ram)
selber hab ich auch schon mit dglopengl.pas programmiert. Allerding habe ich damit nie probleme dieser Art bekommen...

Was ich versuchen würde ist folgendes zu checken:
1. Lazarus version ??? vlt SVN, irgendein Bug...
2. dglopengl.pas
3. Dir das Beispiel auf DGL 1 zu 1 (wenn es das nicht schon ist, weil es schon ähnlich aussieht ^^)
4. Grafikkartentreiber testen...

Code: Alles auswählen

Signatur := nil;

Chefkoch
Beiträge: 12
Registriert: Do 2. Sep 2010, 15:48

Re: OpenGL Memory Leak ?

Beitrag von Chefkoch »

Lazarus: 0.9.31
FPC: 2.4.4 (Wollte eig den 2.5.1 Compiler jedoch wollte der unter meinem OS nich laufen....)
Ich installiere gerade den 32-Bit Compiler. Nach einem Test editiere ich den Beitrag hier.
2. dglopengl.pas
3. Dir das Beispiel auf DGL 1 zu 1 (wenn es das nicht schon ist, weil es schon ähnlich aussieht ^^)
4. Grafikkartentreiber testen...

Die Treiber sind aktuell und am Header kanns auch nicht liegen, da andere OGL-Anwendungen dasselbe Problem haben.
[Edit]
Lazarus meint der Compiler für 32Bit würde das Ziel Win32Bit nicht unterstützen... Nach ein weig rumprobieren ließ sich dass Programm dann kompilieren: keine Veränderung
[Edit]

Chefkoch
Beiträge: 12
Registriert: Do 2. Sep 2010, 15:48

Re: OpenGL Memory Leak ?

Beitrag von Chefkoch »

Weiß niemand weiter?

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: OpenGL Memory Leak ?

Beitrag von Scotty »

Wahrscheinlich liegt es am weggelassenen Code. Wenn du hier nicht alles posten willst, hilft vielleicht ein Heaptrace bei der Suche.

Chefkoch
Beiträge: 12
Registriert: Do 2. Sep 2010, 15:48

Re: OpenGL Memory Leak ?

Beitrag von Chefkoch »

Bitte ordentlich lesen... Andere OGL Anwendungen haben dasselbe Problem, somit ist der weggelassene Code unrelevant.
Die Sache mit dem Heaptrace werde ich noch versuchen.

Entschuldigt für die späte Antwort, ich war im Urlaub.

Antworten