Lazarus und OpenGL für Anfänger

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
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 »

ErnstVolker hat geschrieben:Corpsman's Beispiel funktioniert :D

Ich musste lediglich "ugraphics, uvectormath" auskommentieren.

Volker


Danke für den Hinweis, ich nutze die Units zwar häufig, aber die haben in Clear_Engine nichts verloren. Hab das gleich mal auf meiner HP Korrigiert.
--
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: Lazarus und OpenGL für Anfänger

Beitrag von MAC »

lzuser hat geschrieben:

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?


1. Application.ProcessMessages;
2. sleep weglassen, brauchst du sowieso nicht...

Code: Alles auswählen

Signatur := nil;

ErnstVolker
Beiträge: 327
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,

ich versuche gerade das Beispiel von Corpsman unter Linux an den Start zu bekommen.

Lazarus mosert dass TOpenGLControl nicht da wäre.

Installation des Package bringt beim compilieren oben bereits erwähnte Fehlermeldung:

/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

Weis jemand Rat?

Volker

shokwave
Beiträge: 470
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Lazarus und OpenGL für Anfänger

Beitrag von shokwave »

ErnstVolker hat geschrieben:/usr/bin/ld: cannot find -lGL

Das bedeutet, das die Library "GL" nicht gefunden wurde( also libGL.so). Du musst also ein Paket installieren, welches die Datei enthält. (bei mir unter Ubuntu 10.10 gibt es das Paket libgl1-mesa-dev)
mfg Ingo

ErnstVolker
Beiträge: 327
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 »

Danke shokwave!

libgl1-mesa-dev hat geholfen. Jetzt ist zumindest das TOpenGLControl installiert.

Sofern ich mich unter Linux dann an corpsman's Beispiel orientiere, erhalte ich ein leeres Fenster beim Ausführen.

Unter Window's funktioniert es. Es erscheint ein Fenster mit schwarzer Oberfläche und einer roten Linie.
Bei Linux nix, nur Fenster.

Was ist da falsch?

Parallel tüftel ich unter Windows und Linux mit OpenCV. Als IDE kommt CodeBlocks zum Einsatz. Nur ein einfaches Beispiel: Das Anzeigen eines Bildes.
Hier erstaunt mich, daß meine Lazarusprogramme auch unter Linux aus dem "Dateimanager" mit Doppelklick gestartet werden können, die C++ Programme nicht. Die laufen nur in der IDE.
Unter Windows kann ich auch durch Doppelklick starten. Transportiere ich die exe jedoch auf einen anderen Rechner, fehlen DLL's.
Bei Ubuntu habe ich die entsprechenden .so-Dateien in das Release-Verzeichnis kopiert, es tut sich nix, unter Windows -bei dll Weitergabe- schon.
Das scheint am dynamischen / statischen Linken zu liegen.
Wie unterscheidet man statisches/dynamisches Linken in Lazarus? Kann man in CodeBlocks angeben, dass Bibliotheken statisch gelinkt werden sollen?

Hat schon mal jemand OpenCV unter Lazarus genutzt?
Man könnte sich vermutlich die ganzen Header und cpp-Dateien mit h2pas Übersetzen und mit der Hand nacharbeiten. Aber wie bindet man die lib-Dateien entsprechend ein?
Hat sich jemand von Euch mal eine Liste mit den "wichtigsten" Unterschieden zwischen FPC und C++ oder C erstellt? Hilft vielleicht beim Nacharbeiten? War so ein Gedanke...

Danke nochmal an shokwave!!

Gruß

Volker

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 »

Hui, ne Menge Fragen.

Ich beantworte einfach mal, was ich weiß:

.so-Dateien in das EXE-Verzeichnis stecken geht nicht, (das wäre auch zu unsicher),
stattdessen sollten sie nach /usr/lib oder /usr/local/lib schieben. Am besten gibt man einfach Paket-Abhängigkeiten an und steckt eigene .so-Dateien auch in Pakete. (oder .tar, das nach / entpackt wird)

.a-Dateien werden statisch gelinkt,
.so/.dll-Dateien hingegen immer dynamisch.

Lazarus-Komponenten für OpenGL hab ich noch nie benutzt, ich nutz SDL und das geht.
Probier mal "glxgears" in der Linux-Konsole, damit du siehst, ob OpenGL überhaupt geht.

ErnstVolker
Beiträge: 327
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 »

Guten Abend,

ich bin's mal wieder. Hatte mit den Bandscheiben Ärger und konnte nicht gut sitzen, deshalb kein Lazarus.

Ich beschäftige mich mal wieder mit OpenCV. Ich habe mir die Version 2.4.13.6 besorgt und dazu Beispiele für Lazarus. Das funktioniert auch soweit.

Man benötigt aber zum Ausführen des Programms einige opencv-Dll's.Die habe ich aus den Quellen heraus in den Programmordner kopiert, dann läuft's.

In den Quellen gibt es aber auch einen Unterordner mit *.lib-Dateien. Die haben gleiche Namen wie die DLL's. Sind wohl Bibliotheken (??? Vorstufen ??? für DLL's?).

Wenn das ausführbare Programm ohne die opencv-Dll's auskommen soll, muss man dann gegen diese Bibliotheken linken? Wenn ja, wie stellt man das in der IDE ein?

Vielen Dank für Eure Antworten

Volker

Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Lazarus und OpenGL für Anfänger

Beitrag von Warf »

ErnstVolker hat geschrieben:In den Quellen gibt es aber auch einen Unterordner mit *.lib-Dateien. Die haben gleiche Namen wie die DLL's. Sind wohl Bibliotheken (??? Vorstufen ??? für DLL's?).

.lib's sind statische Bibliotheken. Im gegensatz zu dynamischen Bibliotheken (dll's) werden diese im kompilierschritt in die Executeable gelinkt, und sind somit teil deines programms. DLL's hingegen sind shared libraries und müssen vorliegen um benutzt zu werden.

Statische bibliotheken haben den vorteil das man keine dll's braucht, dynamische bibliotheken haben aber auch ihre vorteile. Zum einen benötigst du den Code nur einmal, also 10 programme die die selbe DLL brauchen müssen nicht alle die DLL mitliefern (Geteilte DLL's liegen bei windows im system32 ordner). Unter Linux z.b. installieren programme Ihre abbhängigkeiten über einen Paketmanager, der stellt sicher das die libs nicht mehrfach mitgeliefert werden. Ein weiterer vorteil von DLL's ist das sie unabhängig vom programm sind. Wenn also z.B. eine Sicherheitslücke Publik werden sollte (z.B. du benutzt die OpenSSL) kannst du ganz einfach die Lib updaten mit den security fixes, ohne jede anwendung die diese Lib verwendet auch upzudaten. Und DLL's können dynamisch geladen werden.
Wenn du deine software nur für Windows kompilieren möchtest würde ich dir empfehlen bei statischen bibliotheken zu bleiben, unter Linux mit paketmanagern macht das grade für eine so häufig verwendete Bibliothek wie die OpenCV überhaupt keinen sinn, und da solltest du dann dynamische bibliotheken nehmen.

Außerdem, da kenn ich mich nicht so gut aus, könnte es sein das es Lizenzrechtlich einen Unterschied machen kann ob du dein dyn oder statische lib benutzt, das solltest du auf jedenfall auch vorher prüfen

Wenn das ausführbare Programm ohne die opencv-Dll's auskommen soll, muss man dann gegen diese Bibliotheken linken? Wenn ja, wie stellt man das in der IDE ein?

Mit der IDE hat das erst mal gar nix zu tun, sondern ist rein sache des Compilers. Der FPC unterstützt dafür die LinkLib direktive. Beispiel:

Code: Alles auswählen

unit libtest;
 
{$MODE ObjFpc}{$H+}
 
interface
{$LINKLIB c}
 
function strlen(P: pchar): longint; cdecl; external;
 
implementation
 
end.

Dieser code linkt (statisch) die LibC in den code, und stellt die funktion strlen aus dieser bereit.
Für dein beispiel musst du den dateinamen in das LinkLib schreiben (statt dem c) und die strlen definition durch die signatur der funktionen in der Library austauschen. Dann sollte beim kompilieren der FPC sich um alles kümmern

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

Re: Lazarus und OpenGL für Anfänger

Beitrag von Mathias »

Hier ist alles beschrieben, wie man Lazarus fit für OpenGL macht.

https://wiki.delphigl.com/index.php/Laz ... einrichten

Hier das komplette Tutorial:
https://wiki.delphigl.com/index.php/Laz ... 3_Tutorial
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1432
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Lazarus und OpenGL für Anfänger

Beitrag von fliegermichl »

Oder das Package GLScene verwenden. Da sind tonnenweise Demos drin. Auf meine Bitte hin hat der Betreuer vom Online Package Manager das mit aufgenommen.

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

Re: Lazarus und OpenGL für Anfänger

Beitrag von Mathias »

Ich würde LazOpenGLContext x.x.x verwenden, da dies bei Lazarus dabei ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Niesi
Lazarusforum e. V.
Beiträge: 332
Registriert: So 26. Jun 2016, 19:44
OS, Lazarus, FPC: Linux Mint Cinnamon (Windows wenn notwendig), Lazarus 3.0 FPC 3.3.1

Re: Lazarus und OpenGL für Anfänger

Beitrag von Niesi »

Mathias hat geschrieben:Ich würde LazOpenGLContext x.x.x verwenden, da dies bei Lazarus dabei ist.


Hallo Mathias,

ich werde mich jetzt mit OpenGL beschäftigen, habe am Wochenende damit angefangen - bisher habe ich fast immer Berechnungsprogramme und Zeichnungsverwaltung zurechtgemacht, aber meinen Sohn kriege ich damit eher nicht.

Ich wollte mal Danke sagen für das Tutorial, sieht sehr gut und umfangreich aus, bisher hat auch alles einwandfrei funktioniert. Am schwierigsten war herauszufnden, wie ich mir die Sourcen als 7Z runterladen konnte - aber auch das hat dann geklappt. Und alles läuft auf meinem nicht ganz neuem Notebook ...

Danke und Gruß
Harald
Wissen ist das einzige Gut, das sich vermehrt, wenn es geteilt wird ...

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

Re: Lazarus und OpenGL für Anfänger

Beitrag von Mathias »

Wie kommst du auf 7Z, bei mir kommen die Sourcen auf github als normale Zip ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Lazarus und OpenGL für Anfänger

Beitrag von Winni »

Hi!

Ja, das Schleifen-Merkwürden!

Einfach mal auffordern seine event pipe abzuarbeiten:

Code: Alles auswählen

 
application.processmessages;
sleep(irgendwas);
 


Winni

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Lazarus und OpenGL für Anfänger

Beitrag von mschnell »

Sleep im Mainthread ist quasi verboten, weil es das ganze Programm aufhält.
-Michael

Antworten