Lazarus und OpenGL für Anfänger

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
lzuser
Beiträge: 97
Registriert: Sa 20. Jun 2009, 16:00
OS, Lazarus, FPC: Win10 20H2, Laz 2.0.8 auch Linux Mint Mate 20, Laz 2.0.6
CPU-Target: 64Bit

Lazarus und OpenGL für Anfänger

Beitrag von lzuser »

Ich möchte in Lazarus auf einem Formular in ein Rechteck (z.B. Panel ?)
eine Grafik mit OpenGL-Unterstützung anlegen.

Das bei Lazarus mitgelieferte Beispiel lässt sich einwandfrei übersetzen.
Das ist mir aber für den Einsteig zu kompliziert.
Im OpenGL-Tutorial scheitere ich schon bei der Umsetzung des ersten Beispiels
in ein lauffähiges Programm mit einem Formular.
Auf der Sourceforge-Lazarus-CCR-Page gibt es die Quelltexte nicht mehr.

Ich würde mich über ein wenig einfachsten Quelltext mit ein paar
Erläuterungen als Einstieg freuen.
Oder: Wie sollte ich vorgehen?

Vielen Dank für alle Vorschläge.

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Lazarus und OpenGL für Anfänger

Beitrag von carli »


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: Lazarus und OpenGL für Anfänger

Beitrag von MAC »

erinnert mich mal nen paar einstiegs-quellcode zu verfassen wenn ich zeit hab :)
aber sonst kann ich nur wie carli dgl empfehlen. Hab mir da auch ziemlich viel beigebracht...

Code: Alles auswählen

Signatur := nil;

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: Lazarus und OpenGL für Anfänger

Beitrag von corpsman »

guckst du Hier findest du meine Samples zu diesem Thema.
--
Just try it

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Lazarus und OpenGL für Anfänger

Beitrag von ErnstVolker »

Hier muß ich auch mal nachfragen:

Die "DGLOpenGL.pas" habe ich mir runtergeladen und in Delphi eingebunden. Das Beispiel aus dem ersten Tutorial habe ich zum Einstieg
rüberkopiert (es war spät und sollt schnell gehen...) und es läuft auch unter Delphi 7.

Dann von Delphi nach Lazarus, aber es funktionierte nicht. Und unter Linux (Ubuntu 10.10) auch nicht. Ich habe momentan nicht den Rechner und die Zeit die Fehlermeldungen
genauer aufzulisten.

Deshalb meine Frage: Wie binde ich die dglOpenGL richtig in Lazarus ein? Muss ich sie vorher von Delphi nach Lazarus umwandeln oder muss ich die Compilerschalter abändern, oder beides?

MfG

Volker

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: Lazarus und OpenGL für Anfänger

Beitrag von corpsman »

Du musst unter Linux wie Windows Lazarus die TOpenGLControl Komponente installieren, dann DGLOpenGL.pas in das Verzeichnis in dem deine Anwendung liegt und z.b. das Sample von meiner HP (2 Posts weiter oben) rein kopieren und starten.

Fertig.

Aber egal wie, etwas Zeit solltest du dir schon nehmen..
--
Just try it

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Lazarus und OpenGL für Anfänger

Beitrag von ErnstVolker »

Hallo corpsman,

ich bin jetzt auf Linux und habe versucht "LazOpenGLContext 0.0.1" zu installieren. Ein TOpenGLControl finde ich nicht.

Da kommt beim IDE-Compilieren:

/usr/bin/ld: warning: /home/volker/.lazarus/bin/link.res contains output sections; did you forget -T?
/usr/bin/ld: cannot find -lGL
/usr/lib/lazarus/0.9.28.2/ide/lazarus.pp(129,1) Error: Error while linking
/usr/lib/lazarus/0.9.28.2/ide/lazarus.pp(129,1) Fatal: There were 1 errors compiling module, stopping

Da scheitert's schon mal...

Gruß

Volker

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: Lazarus und OpenGL für Anfänger

Beitrag von MAC »

also TOpenGLControl oder GLScene oder so sind nicht dafür notwendig.
man brauch einfach nur den Header. Der rest "vereinfacht" die arbeit nur (nehm ich mal an - hab es nicht getestet)

Code: Alles auswählen

Signatur := nil;

lzuser
Beiträge: 97
Registriert: Sa 20. Jun 2009, 16:00
OS, Lazarus, FPC: Win10 20H2, Laz 2.0.8 auch Linux Mint Mate 20, Laz 2.0.6
CPU-Target: 64Bit

Re: Lazarus und OpenGL für Anfänger

Beitrag von lzuser »

ErnstVolker hat geschrieben:Hier muß ich auch mal nachfragen:

Die "DGLOpenGL.pas" habe ich mir runtergeladen und in Delphi eingebunden. Das Beispiel aus dem ersten Tutorial habe ich zum Einstieg rüberkopiert

Ich habe dieses erste Tutorial-Beispiel mit Del6 umgesetzt und es lief sofort.
Dabei habe ich nichts weiter installiert, nur die "DGLOpenGL.pas" in das Programmverzeichnis kopiert.
Dann habe ich das Beispiel nach Lazarus (0.9.28.2 beta-WinXP) kopiert. Auch dort läuft es, bis auf einen Typen-Fehler:
Warum kommt bei Lazarus (bei Del6 nicht) für die folgende Zeile

Code: Alles auswählen

StatusBar.Panels[1].Text:=gluErrorString(glGetError);


für "glGetError" die Fehlermeldung
Incompatible types: got "<procedure variable type of function:DWord;StdCall>" expected "LongWord"

Was muss ich wo ändern, um diesen Typ-Fehler abzustellen?

Vielen Dank eure Hinweise,
vor allem auf die Tutorials!

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Lazarus und OpenGL für Anfänger

Beitrag von mse »

lzuser hat geschrieben:StatusBar.Panels[1].Text:=gluErrorString(glGetError);

für "glGetError" die Fehlermeldung
Incompatible types: got "<procedure variable type of function:DWord;StdCall>" expected "LongWord"

Vermutlich

Code: Alles auswählen

StatusBar.Panels[1].Text:=gluErrorString(glGetError());

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Lazarus und OpenGL für Anfänger

Beitrag von ErnstVolker »

Hallo,

das Problem mit glGetError hatte ich auch. ()-setzen hinter glGetError hat geholfen, DANKE mse!!

Jetzt habe ich noch das Problem mit:

Code: Alles auswählen

Application.OnIdle := IdleHandler;


Hier kommt die Meldung:

Code: Alles auswählen

unit1.pas(57,36) Error: Wrong number of parameters specified for call to "IdleHandler"


Das Beispiel (Tutorial 1) läuft unter Delphi 7 einwandfrei.

Code: Alles auswählen

type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure IdleHandler(Sender: TObject; var Done: Boolean); //Hier die Definition des Prototypen
    procedure Timer1Timer(Sender: TObject);                     
.
.
.


Hier die Form.Create Methode:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  DC:= GetDC(Handle);
  if not InitOpenGL then Application.Terminate;
  RC:= CreateRenderingContext( DC,
                               [opDoubleBuffered],
                               32,
                               24,
                               0,0,0,
                               0);
  ActivateRenderingContext(DC, RC);
  SetupGL;
  Application.OnIdle := IdleHandler; //HIER SCHMECKT ES DEM COMPILER NICHT!!
end;


und hier "IdleHandler":

Code: Alles auswählen

procedure TForm1.IdleHandler(Sender: TObject; var Done: Boolean);
begin
  StartTime:= GetTickCount;
  Render;
  DrawTime:= GetTickCount - StartTime;
  Inc(TimeCount, DrawTime);
  Inc(FrameCount);
 
  if TimeCount >= 1000 then begin
    Frames:= FrameCount;
    TimeCount:= TimeCount - 1000;
    FrameCount:= 0;
    Caption:= InttoStr(Frames) + 'FPS';
    ErrorHandler;
  end;
  sleep(5);
  Done:= false;
end;


Was mache ich falsch?
Wo liegt hier der Unterschied zwischen Lazarus und Delphi?
Vielen Dank für einen Tipp!

Gruß

Volker

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Lazarus und OpenGL für Anfänger

Beitrag von mse »

ErnstVolker hat geschrieben:Wo liegt hier der Unterschied zwischen Lazarus und Delphi?

FPC benötigt ein zusätzliches "@".

Code: Alles auswählen

Application.OnIdle := @IdleHandler;

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Lazarus und OpenGL für Anfänger

Beitrag von ErnstVolker »

Hallo,
danke für das "@" ! Hat geholfen zum compiliern. Aber es erscheint nur ein Graues Fenster.
Keinerlei Einfärbung, nix.

Gab's dieses Problem auch bei Anderen?

Ich werd' mal das Beispiel von corpsman probieren.

Volker

ErnstVolker
Beiträge: 326
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Lazarus und OpenGL für Anfänger

Beitrag von ErnstVolker »

Corpsman's Beispiel funktioniert :D

Ich musste lediglich "ugraphics, uvectormath" auskommentieren.

Danke Danke!!

Jetzt geht's an's Quelltextstudieren...

Volker

lzuser
Beiträge: 97
Registriert: Sa 20. Jun 2009, 16:00
OS, Lazarus, FPC: Win10 20H2, Laz 2.0.8 auch Linux Mint Mate 20, Laz 2.0.6
CPU-Target: 64Bit

Re: Lazarus und OpenGL für Anfänger

Beitrag von lzuser »

Code: Alles auswählen

sleep(5);
 Done:= false;


Bisher Lösung über Timer
Jetzt Lösung über IdleHandler

Bei Lazarus und Delphi das gleiche kleine Problem:

Ich gebe Fehlermeldung und Framezahl jeweils in der StatusBar aus
(Bei der Ausgabe über die Caption genauso)
Sobald vor dem Done:=false
ein Sleep(...) steht, wird in der Statuszeile nichts angezeigt
Ohne Sleep(...) funktioniert es.

Irgend eine Idee?
Zuletzt geändert von Lori am So 20. Feb 2011, 19:14, insgesamt 1-mal geändert.
Grund: Highlighter

Antworten