Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Fehler beim OpenGL stoppen (https://www.delphipraxis.net/28075-fehler-beim-opengl-stoppen.html)

Nuclear-Ping 19. Aug 2004 12:09


Fehler beim OpenGL stoppen
 
Hallo,

auf einer extra Form lasse ich per OpenGL Berechnungsergebnisse grafisch ausgeben und der Benutzer kann diese dann mit der Maus rotieren, zoomen und bewegen.

Mein Problem was ich jetzt dabei habe ist, dass das Programm die OpenGL-Ausgaben weiterberechnet, selbst wenn die Form geschlossen wird. Also dachte ich mir, dass die Lösung des Problems darin liegt, in FormClose einfach das OpenGL wieder zu beenden:

Delphi-Quellcode:
procedure TOpenGLOutput.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  OpenGLInit := FALSE;

  DeactivateRenderingContext;
  DestroyRenderingContext (RC);
  CloseOpenGL;
end;
Allerdings bricht er mit einer Exception ab, markiert "DeactivateRenderingContext" und meint dazu "Unbalanced deactivation".

Wo ist hier das Problem und wie kann ich das OpenGL korrekt beenden, wenn die Form geschlossen wird?

Grüße,
Mario

Nuclear-Ping 20. Aug 2004 13:08

Re: Fehler beim OpenGL stoppen
 
Ok, hat sich erledigt.

Hab es aus dem FormClose genommen und leite jetzt die Initialisation / Finalisation "per Hand" ein, vorher war es in OnFormCreate / OnFormClose, oder auf Delphisch:

Delphi-Quellcode:
{ ************************************************************ }
procedure TGS_frkMain.Display3DActionExecute(Sender: TObject);
{ ************************************************************ }
begin
  if (Length (CalculationResults) <= 0) then
    Exit;

  with TGS_frkOpenGL.Create (Self) do
    begin
      AssignResults (CalculationResults);
      InitializeOpenGL; // OpenGL initialisieren

      ShowModal;

      ShutDownOpenGL; // OpenGL finalisieren
      Free;
    end;
end;

...

{ ************************************************************ }
procedure TGS_frkOpenGL.ShutDownOpenGL;
{ ************************************************************ }
begin
  Application.OnIdle := nil;
 
  OpenGLInit := FALSE;

  DeactivateRenderingContext;
  DestroyRenderingContext (RC);
  CloseOpenGL;
end;
Nun meckert er nix mehr rum und tut, wie er soll. :)

Grüße,
Mario


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz