Linuxpfad
Inhaltsverzeichnis
Einführung
Zuerst sollte man den Begriff Linux näher erläutern, denn dieser wird doch häufig falsch genutzt. Mit Linux ist der Kernel von Linus Torwald gemeint und nicht eine Distribution.
Was ist der Unterschied zwischen einer Distribution und dem Linux-Kernel?
Der Linux-Kernel ist das Herzstück, er enthält alle Treiber und Module für das Ansprechen und Verwalten der Hardware. So enthält dieser z.B. Scheduler für CPU und Festplatte, Speichermanager und sogar Dateisysteme wie ext2. Eine Distribution ist z.B. RedHat Server, Fedora, Ubuntu, BSD, Gentoo, myOS, SLAX ... . Diese bieten auf den Kernel aufbauende und vorgefertigte (teilweise vorkompiliert, vorkonfiguriert, gepatchte) Pakete. Die Distributionen unterscheiden sich in vielerlei Hinsicht, einige wollen minimalistisch sein, andere wollen Windows von Microsoft nachahmen und andere wiederum bieten Serverlösungen an. Hinter Distributionen stecken oft Communities, einzelne Leute oder im Falle von RedHat Server und Fedora größere Firmen. Diese Distributionen verwenden in der Regel unterschiedliche Packetmanagmentsysteme(apt, emerge,...), unterschiedliche Bibliotheken und Desktop Systeme (xfc, gnome, kde, ...).
Exkursion: Welche Distribution für wenn?
Für viele Distributionen ist die wichtigste Regel nur Opensource-Pakete zu enthalten um den Geist von Opensource zu wahren. Andere wie z.B. Ubuntu halten es mit dieser Regel nicht so genau und liefern Binärtreiber von z.B. Nvidia oder ATI mit. Diese sind bei den anderen Distributionen nicht dabei und müssen von Hand installiert werden.
Für Einsteiger ist dies oft schon zuviel erwartet und dann auch das ganze Rechtesystem mit root, usern und einiges mehr, Ubuntu hat in der Richtung vieles vereinfacht und kann somit locken. Für erfahrende Linuxer ist Ubuntu mehr schlecht als recht, da diese dann einiges an Arbeit reinstecken müssen, um das System an ihre Wünsche anzupassen. Diese setzen dann je nach Bedarf auf Distribution wie Fedora, Gentoo, Debian,... .
Genug Worte über Distributionen, Kernel und Paketen, wer noch mehr wissen will, der kann diesem Link folgen und sich über die Suchmaschine des Vertrauens weiter schlau machen.
Einstieg in die Linuxprogrammierung
An dieser Stelle wird erwartet, dass die Distribution der Wahl sowie den entsprechenden Grafikkartentreiber installiert ist. Wenn letzterer nicht installiert ist, läuft OpenGL automatisch unter Mesa. Mesa ist ein Software Renderer, der eine volle OpenGL 3.0 Unterstützung auf der CPU realisiert.
Wenn man OpenGL programmiert, dann lädt man die Funktionen aus der OpenGL32.dll (Windows) oder aus der libGL.so (Linux). Diese sind jedoch nur Wrapper, die auf die entsprechenden Funktionen in Mesa oder aus dem Hardwaretreiber (z.B. nvogl32.dll, /usr/lib/ati/libGL.so) zeigt. Wenn wir unter Linux programmieren, dann werden wir immer wieder auf den Buchstaben X oder auf X11 stossen. X steht hier für den Desktop Manager, das X-Window-System. Er stellt uns Fenster, Rendercontext, Pixelformat, Maus und andere Dinge zur Verfügung. In OpenGL gibt es wgl... für Windows-basierte und glX... für X11(Linux) basierte Befehle.
Siehe GLX |
Die wichtigsten X11 Befehle sind:
- XCreateSimpleWindow
- XDestroyWindow
- XMapWindow
- XCreateBitmapFromData
- XFreeCursor
- XCreatePixmapCursor
- XFreePixmap
- XChangeWindowAttributes
- XInternAtom
- XSetWMProtocols
- XStoreName
- XResizeWindow
- XFlush
- XMoveWindow
- XUndefineCursor
- XOpenDisplay
- XCloseDisplay
- XDefaultScreen
- XPending
- XNextEvent
- XGetAtomName
- XSync
Zum Start mit OpenGL unter X11 braucht man gerademal einen Bruchteil der aufgelisteten Funktionen. Wenn man einen eigenen Cursor oder gar keinen Cursor haben will, die Auflösung verändern möchte, Fenster positionieren, auf einen der Displays verschieben oder die Überschrift und Ausmaße des Fenster ändern will, dann hat man bereits alle Funktionen. Die Befehle befinden sich in den Units x, glx, xlib, xutil und xf86vmode, welche alle mit Freepascal ausgeliefert werden. Delphi selber läuft nur unter Windows, Kylix (der Linuxcompiler von Borland) wurde eingestellt und ist veraltet. Somit ist für plattformunabhängige Entwicklung darauf zu achten, dass der Code auch mit den Freepascal-Compiler (im Delphimodus) kompiliert. Für die C/C++ler gelten folgende Header: includes <X11/Xlib.h>,<GL/glx.h> und <X11/extensions/xf86vmode.h>.
Lazarus bietet für die plattformübergreifende Verwendung von OpenGL eine Komponente "TOpenGLContext" an, die sich um die Initialisierung eines OpenGL-Kontexts kümmert.