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 ?
Grafik ohne LCL geht mit der LCL nicht (oder so...
Du kannst fpImage verwenden oder mein opbitmap http://www.theo.ch/lazarus/opbitmap64.zip" onclick="window.open(this.href);return false;
Ich weiss ja nicht was du machen willst.
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.
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.
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.
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
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.
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.
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