Non LCL Anwendung und unit Graphics

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
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:

Non LCL Anwendung und unit Graphics

Beitrag von corpsman »

Hossa, ich wollte mir eine Non LCL Anwendung schreiben und in dieser aber dennoch TBitmap benutzen.

Also habe ich die Unit "Graphics" eingebunden, dann schreibt mir der Compiler jedoch :

/usr/bin/ld: warning: /sda5/sda5/Tools/Projects/Atomic_Bomberman/link.res contains output sections; did you forget -T?
/home/corpsman/lazarus/lcl/units/i386-linux/wsimglist.o: In function `REGISTERCUSTOMIMAGELIST':
./widgetset/wsimglist.pp:266: undefined reference to `WSRegisterCustomImageList'
/home/corpsman/lazarus/lcl/units/i386-linux/wsmenus.o: In function `REGISTERMENUITEM':
./widgetset/wsmenus.pp:204: undefined reference to `WSRegisterMenuItem'
/home/corpsman/lazarus/lcl/units/i386-linux/wsmenus.o: In function `REGISTERMENU':
./widgetset/wsmenus.pp:215: undefined reference to `WSRegisterMenu'
/home/corpsman/lazarus/lcl/units/i386-linux/wsmenus.o: In function `REGISTERMAINMENU':
./widgetset/wsmenus.pp:226: undefined reference to `WSRegisterMainMenu'
/home/corpsman/lazarus/lcl/units/i386-linux/wsmenus.o: In function `REGISTERPOPUPMENU':
./widgetset/wsmenus.pp:237: undefined reference to `WSRegisterPopupMenu'
/home/corpsman/lazarus/lcl/units/i386-linux/wscontrols.o: In function `REGISTERDRAGIMAGELIST':
./widgetset/wscontrols.pp:343: undefined reference to `WSRegisterDragImageList'
/home/corpsman/lazarus/lcl/units/i386-linux/wscontrols.o: In function `REGISTERCONTROL':
./widgetset/wscontrols.pp:353: undefined reference to `WSRegisterControl'
/home/corpsman/lazarus/lcl/units/i386-linux/wscontrols.o: In function `REGISTERWINCONTROL':
./widgetset/wscontrols.pp:363: undefined reference to `WSRegisterWinControl'
/home/corpsman/lazarus/lcl/units/i386-linux/wscontrols.o: In function `REGISTERGRAPHICCONTROL':
./widgetset/wscontrols.pp:373: undefined reference to `WSRegisterGraphicControl'
/home/corpsman/lazarus/lcl/units/i386-linux/wscontrols.o: In function `REGISTERCUSTOMCONTROL':
./widgetset/wscontrols.pp:384: undefined reference to `WSRegisterCustomControl'
/home/corpsman/lazarus/lcl/units/i386-linux/wsforms.o: In function `REGISTERSCROLLINGWINCONTROL':
./widgetset/wsforms.pp:189: undefined reference to `WSRegisterScrollingWinControl'
/home/corpsman/lazarus/lcl/units/i386-linux/wsforms.o: In function `REGISTERSCROLLBOX':
./widgetset/wsforms.pp:200: undefined reference to `WSRegisterScrollBox'
/home/corpsman/lazarus/lcl/units/i386-linux/wsforms.o: In function `REGISTERCUSTOMFRAME':
./widgetset/wsforms.pp:211: undefined reference to `WSRegisterCustomFrame'
/home/corpsman/lazarus/lcl/units/i386-linux/wsforms.o: In function `REGISTERCUSTOMFORM':
./widgetset/wsforms.pp:222: undefined reference to `WSRegisterCustomForm'
/home/corpsman/lazarus/lcl/units/i386-linux/wsforms.o: In function `REGISTERHINTWINDOW':
./widgetset/wsforms.pp:233: undefined reference to `WSRegisterHintWindow'
Atomic.lpr(167,1) Error: Error while linking
Atomic.lpr(167,1) Fatal: There were 1 errors compiling module, stopping


Was mache ich da nun, gibts da ne nonlcl graphics , oder geht das einfach nicht ?
--
Just try it

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: Non LCL Anwendung und unit Graphics

Beitrag von theo »

Grafik ohne LCL geht mit der LCL nicht (oder so... ;-)
Du kannst fpImage verwenden oder mein opbitmap http://www.theo.ch/lazarus/opbitmap64.zip
Ich weiss ja nicht was du machen willst.

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Non LCL Anwendung und unit Graphics

Beitrag von Targion »

Es ist möglich, Bitmaps ohne GUI zu nutzen. Du kannst die Unit "graphics" verwenden, indem du "Interfaces" als erstes in der "uses"-Klausel der Hauptanwendung einfügst und das Widgetset in den Compilereinstellungen auf "NoGUI" stellst. (NoGUI ist zwar noch alpha, funktioniert aber dennoch perfekt, zumindest bei mir *g*)
Zuletzt geändert von Targion am Fr 11. Sep 2009, 17:56, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: Non LCL Anwendung und unit Graphics

Beitrag von theo »

@Targion: Er wollte aber ohne LCL auskommen. Die unit Graphics ist nun mal Teil der LCL.

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: Non LCL Anwendung und unit Graphics

Beitrag von corpsman »

Also eigentlich will ich ja nur TBItmap nutzen.

Ich hab mir hier eine Anwendung gebastelt die auf OpenGL mittels SDL zugreift.

Und ich will TBitmaps laden, und diese dann an OpenGL übergeben.

SDL kann das zwar direckt, aber ich kann die Bitmaps ja dann nicht mehr beeinflussen.

Und deswegen hatte ich mir eine "Testanwendung" gebastelt in der ich den Weg

TBitmap -> TLazIntfImage -> OpenGL gegangen bin.

Und in meiner Demo gings auch wunderbar. Doch in der Non LCL Anwendung natürlich nicht.

Das mit den Interfaces probiere ich mal...
--
Just try it

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Non LCL Anwendung und unit Graphics

Beitrag von Targion »

theo hat geschrieben:@Targion: Er wollte aber ohne LCL auskommen. Die unit Graphics ist nun mal Teil der LCL.

Non-LCL ist kaum möglich, da selbst TFont schon von Widgetset abhängt. Unter Linux ist das besonders ärgerlich, da man dann ein Terminalprogramm von GTK+ oder Qt abhängen hat. NoGUI ist da der perfekte Weg.
Bitmap komplett ohne LCL geht tatsächlich nur mit deinem OPBitmap.

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: Non LCL Anwendung und unit Graphics

Beitrag von theo »

Targion hat geschrieben: NoGUI ist da der perfekte Weg.


Naja, ich hab's mal ausprobiert. Auf den Canvas malen kann ich damit aber nicht.

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Non LCL Anwendung und unit Graphics

Beitrag von Targion »

Hmm... Bei mir ging es mit TBitmap. Ich probiere das nochmal aus. (ich habe vor längerer Zeit jedes TBitmap durch OPBitmap ersetzt)

Benutzeravatar
theo
Beiträge: 10499
Registriert: Mo 11. Sep 2006, 19:01

Re: Non LCL Anwendung und unit Graphics

Beitrag von theo »

Targion hat geschrieben:Hmm... Bei mir ging es mit TBitmap. Ich probiere das nochmal aus.


Würde mich echt wundern. Afaik erledigt jeweils das Widget Set die konkrete Malerei (Kreise, Linien etc.), ich kann mich nat. irren.
NoGui ist jedenfalls nur ein hauchdünner "wrapper" - eher eine Art Platzhalter-, da drin ist das bestimmt nicht.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Non LCL Anwendung und unit Graphics

Beitrag von Socke »

theo hat geschrieben:
Targion hat geschrieben:Hmm... Bei mir ging es mit TBitmap. Ich probiere das nochmal aus.


Würde mich echt wundern. Afaik erledigt jeweils das Widget Set die konkrete Malerei (Kreise, Linien etc.), ich kann mich nat. irren.
NoGui ist jedenfalls nur ein hauchdünner "wrapper" - eher eine Art Platzhalter-, da drin ist das bestimmt nicht.

Ich kenne mich da zwar überhaupt nicht aus, aber es wäre möglich, dass die LCL jedwede Malerei durch das Widgetset erledigt - so wie Theo sagt. Das würde bedeuten, dass du zum malen entweder eine andere externe Bibliothek verwenden musst oder alles selbst (bitweise) erledigen musst.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

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: Non LCL Anwendung und unit Graphics

Beitrag von corpsman »

na was ein glück das ich das TBitmap ja nur aus einer Datei lade, und dann auf die Pixeldaten zugreife, das müste ja gehen ;)
--
Just try it

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

Re: Non LCL Anwendung und unit Graphics

Beitrag von Mathias »

Ich hab mir hier eine Anwendung gebastelt die auf OpenGL mittels SDL zugreift.
Dies versuche ich auch gerade. Was gib es für eine Alternative, wen man JPG, PNG, GIF, etc. laden will, ohne TPicture oder TBitmap, was alles die LCL braucht.
Oder muss man da wohl oder übel auf clibs ausweichen, wen man an den Bitstream ran kommen will ?
Der Bitstream wurde schon reichen, um das ganze an OpenGL zu übergeben.



Dieser Link scheint tot zu sein.
http://www.theo.ch/lazarus/opbitmap64.zip
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4893
Registriert: Fr 8. Apr 2011, 09:01

Re: Non LCL Anwendung und unit Graphics

Beitrag von wp_xyz »

Mathias hat geschrieben:
So 1. Okt 2023, 16:45
Was gib es für eine Alternative, wen man JPG, PNG, GIF, etc. laden will, ohne TPicture oder TBitmap, was alles die LCL braucht.
fp-image, wie theo schon sagte. Da gibt es Reader für alle möglichen Formaten (die auch von der LCL mitverwendet werden).https://wiki.freepascal.org/fcl-image#R ... image_file zeigt, wie man ein Bild in ein TFPMemoryImage lädt, und auf die einzelnen Pixel kannst du dann mit MemoryImage.Colors[x, y] zugreifen, wobei die Pixel, anders als bei der LCL, aus 4 Kanälen (Red, Green, Blue und Alpha) mit je 16 Bit Auflösung bestehen (TFPColor = record Red, Green, Blue, Alpha: Word;). Du kannst dir auch einen Canvas erzeugen (https://wiki.freepascal.org/fcl-image#B ... nvas_Setup) und dann darauf nach Herzenslust Linien, Kreise, Rechtecke zeichnen. Text ist etwas schwieriger, aber die fcl-image-Seite hat auch dafür ein Beispiel.

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

Re: Non LCL Anwendung und unit Graphics

Beitrag von Mathias »

Das sieht spanned aus, da hat es sicher etwas dabei, wen ich mal Texturen für OpenGL laden muss.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: Non LCL Anwendung und unit Graphics

Beitrag von Warf »

Aus meiner limitierten Erfahrung mit Game engines ist das sogar relativ simpel, man lädt keine jpgs, pngs, Gifs etc. Die sind eh alle viel zu komplex und damit zu langsam.
Fast alle Game engines benutzen intern ein raw Format wie TGA oder, wenn man vorberechnete mipmaps braucht und kein Problem mit Microsoft Formaten hat halt dds

In einer Game engine funktioniert das dann so das man die Texturen zwar in einem bestimmten Format in die Game engine lädt, die dann aber für die Benutzung des Spiels als TGA in den Spiel resourcen abgelegt werden und dann zur Laufzeit von der grafikengine daraus geladen werden

TGA ist super easy s format, da es nur aus einem Header + Rohdaten im rgb(a) Format besteht. Man kann also direkt die Datei in einen RGB(a) array reinladen und hat direkten Pixel Zugriff, und kann die auch direkt in den Grafik Speicher laden um in OpenGL zu verwenden

Antworten