Linuxpfad: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) (→Einstieg in die Linux programmierung: Die gröbsten sprachpatzer entfernt) |
(Den Namen von Linus Torvalds falsch zu schreiben grenzt ja schon an Ketzerei ;)) |
||
(6 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | = | + | =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 Torvalds gemeint und nicht eine Distribution. | ||
− | == | + | |
− | + | ==Was ist der Unterschied zwischen einer Distribution und dem Linux-Kernel?== | |
− | + | ||
− | Was ist der Unterschied zwischen einer Distribution und | + | 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. | |
− | So enthält | ||
Eine Distribution ist z.B. RedHat Server, Fedora, Ubuntu, BSD, Gentoo, myOS, SLAX ... . | Eine Distribution ist z.B. RedHat Server, Fedora, Ubuntu, BSD, Gentoo, myOS, SLAX ... . | ||
− | Diese bieten auf den Kernel aufbauende und vorgefertigte(teilweise vorkompiliert, vorkonfiguriert, | + | Diese bieten auf den Kernel aufbauende und vorgefertigte (teilweise vorkompiliert, vorkonfiguriert, gepatchte) Pakete. |
− | Die Distributionen unterscheiden sich in vielerlei | + | 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 | + | 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, ...). | |
− | + | ||
− | Diese Distributionen verwenden in der Regel unterschiedliche | + | == 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. | |
− | + | ||
− | 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 Einsteiger ist dies oft schon zuviel erwartet und dann auch das ganze Rechtesystem mit root, usern und einiges mehr, Ubuntu hat in der | + | 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. |
− | Für erfahrende Linuxer ist Ubuntu mehr schlecht als recht, da diese dann einiges an Arbeit reinstecken müssen, um | + | Diese setzen dann je nach Bedarf auf Distribution wie Fedora, Gentoo, Debian,... . |
− | Diese setzen dann je nach | + | |
− | Genug Worte über Distributionen, Kernel und Paketen, wer noch mehr wissen will, der kann | + | Genug Worte über Distributionen, Kernel und Paketen, wer noch mehr wissen will, der kann [http://karmarama.developer-alliance.org/?site=artikel 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. | ||
+ | |||
+ | {{Hinweis|Siehe [[GLX]]}} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Die wichtigsten X11 Befehle sind: | Die wichtigsten X11 Befehle sind: | ||
*[[glXChooseVisual]] | *[[glXChooseVisual]] | ||
Zeile 37: | Zeile 39: | ||
*[[glXMakeCurrent]] | *[[glXMakeCurrent]] | ||
*[[glXSwapBuffers]] | *[[glXSwapBuffers]] | ||
− | + | ||
+ | |||
*[[XCreateSimpleWindow]] | *[[XCreateSimpleWindow]] | ||
*[[XDestroyWindow]] | *[[XDestroyWindow]] | ||
Zeile 60: | Zeile 63: | ||
*[[XGetAtomName]] | *[[XGetAtomName]] | ||
*[[XSync]] | *[[XSync]] | ||
− | + | ||
+ | |||
+ | |||
*[[XF86VidModeSwitchToMode]] | *[[XF86VidModeSwitchToMode]] | ||
*[[XF86VidModeSetViewPort]] | *[[XF86VidModeSetViewPort]] | ||
Zeile 66: | Zeile 71: | ||
Zum Start mit OpenGL unter X11 braucht man gerademal einen Bruchteil der aufgelisteten Funktionen. | Zum Start mit OpenGL unter X11 braucht man gerademal einen Bruchteil der aufgelisteten Funktionen. | ||
− | Wenn man einen eigenen Cursor oder | + | 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. | + | 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. | |
− | Nützliche Links | + | |
+ | =Nützliche Links= | ||
*[http://www.xfree86.org/current/manindex3.html Manual für C/C++] | *[http://www.xfree86.org/current/manindex3.html Manual für C/C++] | ||
*[http://www.freepascal.org/docs-html/packages/opengl/glx/index-6.html glX für FPC] | *[http://www.freepascal.org/docs-html/packages/opengl/glx/index-6.html glX für FPC] | ||
Zeile 76: | Zeile 82: | ||
*[https://svn.linuxprofessionals.org/filedetails.php?repname=karmarama&path=%2Ftrunk%2Fsrc%2Flinux%2Fkar_x11.cpp kar_x11.cpp] | *[https://svn.linuxprofessionals.org/filedetails.php?repname=karmarama&path=%2Ftrunk%2Fsrc%2Flinux%2Fkar_x11.cpp kar_x11.cpp] | ||
*[https://svn.linuxprofessionals.org/filedetails.php?repname=karmarama&path=%2Ftrunk%2Finclude%2Flinux%2Fkar_x11.hpp kar_x11.hpp] | *[https://svn.linuxprofessionals.org/filedetails.php?repname=karmarama&path=%2Ftrunk%2Finclude%2Flinux%2Fkar_x11.hpp kar_x11.hpp] | ||
+ | |||
+ | [[Kategorie:Trampelpfad]] |
Aktuelle Version vom 5. März 2011, 14:00 Uhr
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 Torvalds 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.