OpenGL => openglcontrol example

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

OpenGL => openglcontrol example

Beitrag von PeterS »

Hallo,

ich habe mal - als Fingerübung - das Example openglcontrol auf den aktuellen Stand gebracht.
Also ausgehend von einem leeren, neuen Projekt alles neu "befüllt".

Siehe Anhang.
Dateianhänge
openglcontrol_v2.zip
(749.55 KiB) 44-mal heruntergeladen

TSchnuckenbock
Beiträge: 118
Registriert: Do 20. Jul 2017, 23:47
OS, Lazarus, FPC: Win7 und Win10
CPU-Target: xxBit
Wohnort: Südheide (Schnuckenland)

Re: OpenGL => openglcontrol example

Beitrag von TSchnuckenbock »

Bei mir auf Win10 mit 64Bit und Lazarus 3.2 geht's kompilieren problemlos und läuft.

Beim Anschauen des Codes sind mir auf die Schnelle zwei Dinge aufgefallen, die du vielleicht mal Checken solltest:

1.) Im FormDestroy würde ich bei der Schleife mit Low und High beim Array arbeiten:

Code: Alles auswählen

for i := Low(Textures) to High(Textures) do begin
    Textures[i]:= 0;
    FreeAndNil( MyglTextures[i]);
end; 
...  
2.) In FormResize mit assigned prüfen

Code: Alles auswählen

procedure TExampleFormV2.FormResize(Sender: TObject);
begin
  if assigned(OpenGLControl1) then
      OpenGLControl1.SetBounds( Scale96ToForm( 16),
                                Scale96ToForm( 30),
                                Width -Scale96ToForm( 120),
                                Height -Scale96ToForm( 70));
end;                                
Nachtrag: Ich habe gerade in meinen gesammelten Werken rumgestöbert und dabei festgestellt, daß ich das Projekt in 2008 oder 2009 auch mal lauffähig gemacht hatte.
Da war das mit dem " <> nil" auch drinne im Originalcode....und ich hatte es so gelassen...;-)

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

Re: OpenGL => openglcontrol example

Beitrag von Mathias »

ich habe mal - als Fingerübung - das Example openglcontrol auf den aktuellen Stand gebracht.
Also ausgehend von einem leeren, neuen Projekt alles neu "befüllt".
Bei mir läuft das Original-Beispiel. welches bei Lazarus dabei ist.

Linux 64Bit.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: OpenGL => openglcontrol example

Beitrag von PeterS »

Mathias hat geschrieben: Fr 21. Jun 2024, 09:16
ich habe mal - als Fingerübung - das Example openglcontrol auf den aktuellen Stand gebracht.
Also ausgehend von einem leeren, neuen Projekt alles neu "befüllt".
Bei mir läuft das Original-Beispiel. welches bei Lazarus dabei ist.
Linux 64Bit.
Das Original Example compiliert und läuft bei mir auch einwandfrei.

Ist (nur unter Windows ?) halt merkwürdig, daß erstmal ein CMD Fenster aufpoppt.
Und das OpenGL Control wird im Original-Beispiel zu Fuß "created".
Ebenso wie all die Buttons.

Ansonsten, der neue Code berücksichtigt das Windows-Scaling.
Und verwendet Anchors für die Buttons.
Zuletzt geändert von PeterS am Fr 21. Jun 2024, 14:22, insgesamt 2-mal geändert.

PeterS
Beiträge: 161
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 3.8
CPU-Target: win32

Re: OpenGL => openglcontrol example

Beitrag von PeterS »

TSchnuckenbock hat geschrieben: Do 20. Jun 2024, 16:14 2.) In FormResize mit assigned prüfen

Code: Alles auswählen

procedure TExampleFormV2.FormResize(Sender: TObject);
begin
  if assigned(OpenGLControl1) then
  ...
Besteht denn die Gefahr daß das OpenGL-Objekt bei OnResize mal ungültig ist ?
In diesem neuen Code wird es doch "autocreatet", durch die FORM-Datei .. ???

TSchnuckenbock
Beiträge: 118
Registriert: Do 20. Jul 2017, 23:47
OS, Lazarus, FPC: Win7 und Win10
CPU-Target: xxBit
Wohnort: Südheide (Schnuckenland)

Re: OpenGL => openglcontrol example

Beitrag von TSchnuckenbock »

Eventuell ist der check mit dem assigned überflüssig. Ich könnte mir spontan vorstellen, daß es vielleicht schmettern könnte, wenn man beim Beenden des Programms noch mal im FormResize landet.
Du kannst es ja mal weglassen, und schauen was passiert.

Bei der (unbenutzten?) Funktion "LoadFileToMemStream" war mir auch aufgefallen, daß es da eventuell ein Speicherleck geben könnte, wenn der Result, also der TMemoryStream, nicht irgendwo nach dem Aufrufen wieder vernichtet wird.

Aber alles ohne Gewähr...das war nur mein fixer Blick auf den Code.

Was das CMD-Fenster im Original-Code anbelangt: Ich könnte mir vorstellen, daß das vor Jahrzehnten noch irgendwie erforderlich gewesen sein könnte.
FreePascal und Lazarus haben sich in den viele Jahren seit ihrer Schöpfung massiv weiterentwickelt. Ich glaube ich hatte das erstemal mir damals die Version 0.9.6 installiert. Das müßte dann laut Wikipedia im Jahre 2005 gewesen sein. Seitdem ist viel passiert.
Man stolpert auch immer wieder über Pascal-Code aus der Delphi-Anfangs-Zeit oder gar Turbo-Pascal, was dann irgendwie immer wieder rübergerettet wurde zu neueren Versionen. Damals mußte man z.B. auch viel mit Pointern rummachen, wo es heute viel einfachere fertige Klassen für gibt.

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

Re: OpenGL => openglcontrol example

Beitrag von Mathias »

Wen es nach mir ginge, könnte man die Examples alle entfernen. Dies ist alles unnötiger Ballast. Vor allem merkt man dies, wen man mehrere Lazarus Installationen parallel hat.
Und heute wo fast jeder Internet hat, konnte man die Examples als Download anbieten.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6848
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: OpenGL => openglcontrol example

Beitrag von af0815 »

zu dem herausnehmen der Examples gibt es schon Bestrebungen im englischen Forum, nur ist es leiser drum geworden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten