Das Originaltutorial befindet sich hier.
Andorra 2D - Compilieren mit Lazarus
Aller Anfang ist schwer
Um Andorra 2D mit Lazarus kompilieren zu können, sind einige Besonderheiten zu beachten. Hat man diese überwunden, so steht einem jedoch nichts mehr im Wege Andorra 2D sogar unter Linux einzusetzen. Dieses Tutorial setzt eine lauffähige Version von Lazarus sowie einige Kenntnisse im Umgang damit voraus. Falls es also Probleme mit Lazarzus geben sollte, die nicht direkt mit Andorra 2D zusammenhängen (wie z.B. "Lazarus meckert '
Unit Interfaces nicht gefunden', was soll ich tun?"), so richten Sie diese bitte nicht an mich. Aufrichtig wie ich bin, muss ich auch zugeben, selbst noch nicht sehr viel mit Lazarus gearbeitet zu haben. Wenn Sie also noch irgendwelche Fehler oder Verbesserungsvorschläge für den Lazarussupport habe, so zögern Sie nicht, mich darüber in Kenntnis zu setzen.
Das Kompilieren des Plugins
Die erste Hürde, welche wir überwinden müssen, ist die Tatsache, dass die mit Delphi kompilierten Plugin-DLLs nicht mit Lazarus kompatibel sind. Dies ist ja auch logisch - schließlich handelt es sich bei dem Delphi internen Compilier und dem Free Pascal Compiler (welcher von Lazarus verwendet wird) um zwei Programme, die völlig unabhängig voneinander Entwickelt wurden. Aus diesem Grund ist die Klassenstruktur, welche von Free Pascal erstellt wurde inkompatibel zur Klassenstruktur von Delphi. Nun tauscht Andorra 2D allerdings Objekte zwischen Bibliothek und Hostapplikation aus, was unweigerlich zu Speicherzugriffverletzungen führt.
Wir umgehen dieses Problem einfach dadurch, indem wir die Plugin-Bibliothek neu mit Lazarus erstellen. Dazu öffnen wir die Datei "AndorraOGLLaz.lpi" aus dem Verzeichnis "src/
dll/
opengl/" mit Lazarus. Bevor wir diese Datei jedoch einfach so kompilieren können, müssen wir erst einmal die Suchpfade sowie Ausgabeverzeichnisse entsprechend einstellen.
Dazu tragen wir über "Projekt->Compilereinstellungen->Pfade->Andere Unitdateien->..." den Pfad zu dem
OpenGL-Header sowie den Pfad zu den Andorra 2D Quellcodedateien ein. Falls es Probleme mit nicht gefundenen Unitdateien geben sollte, kann es helfen die "Pfad-Templates" einfach einmal hinzuzufügen. Besonders unter Linux wollte Andorra 2D nur mit diesen kompilieren.
http://andorra.sourceforge.net/tutots/lazarus/img1.png
Unter im Pfade-Dialog sollte zudem unter "Unitausgabepfad" sollte "../../
dcu/" eingetragen sein und unter "Projekt->Projekteinstellungen->Zieldateiname" "../../../bin/". Nun können wir es wagen die Bibliothek mit einem Klick auf "Start->Alles neu erstellen" zu erzeugen. Wenn Sie mit der Erfolgsmeldung "Projekt "AndorraOGLLaz" erfolgreich gebaut.
" beglückt werden, sollten Sie sich noch vergewissern, dass das Plugin auch wirklich neu erstellt worden ist. Werfen Sie dazu einen Blick in das Zielverzeichnis und überprüfen Sie das Änderungsdatum von "AndorraOGLLaz.dll".
Wie Sie vielleicht bemerkt haben, weicht der Dateiname der Lazarus-
DLL von dem der Delphi-
DLL ab um Verwechslung zu vermeiden.
Wenn bis hier her alles geklappt hat, steht einem Ausflug in die Welt von Andorra 2D mit der Hilfe von Lazarus nicht mehr viel im Wege.
Unser Lazarus Andorra 2D Projekt
Nun möchten wir ein einfaches Andorra 2D Projekt mit Lazarus erstellen. Dazu erstellen wir über "Datei->Neu" ein neues "Application"-Projekt und fügen wie beim kompilieren des
OpenGL-Plugins den Andorra 2D Suchpfad hinzu. Außerdem kann es unter Verwendung eines anderen Widgetsets als "
Win32/Win64" (also zum Beispiel unter Linux) notwendig werden das
Package "LazOpenGLContext" zu Ihrem Projekt hinzuzufügen.
http://andorra.sourceforge.net/tutots/lazarus/img2.png
Zu Fenstersystemen und Gerätekontexten
Diese Notwendigkeit hat folgenden Hintergrund: Unter Verwendung des normalen Windows-Widgetsets kann Andorra 2D der Pluginbibliothek einfach ein
Handle (das ist so zu sagen die Inventarnummer unseres Fensters) übergeben. Danach kümmert sich das Plugin selbst um die Erzeugung des entsprechenden Devicecontexts (was unter Windows mit wenigen Zeilen abgehakt ist). Dabei handelt es sich um den Bereich, auf den die Grafikkarte bzw. das verwendete Grafiksystem zeichnen kann. Das Devicecontext muss jedoch vom verwendeten Fenstersystem verwaltet werden. Nun gibt es unter Linux die verschiedensten Fenstersysteme (von denen man ja einige bei Lazarus als Widgetset auswählen kann). Nun müsste das Plugin für jedes dieser Systeme eine Contexterzeugungsroutine bereithalten, was natürlich ein enormer Aufwand wäre. Zum Glück haben sich die fleißigen Entwickler von Lazarus auch hier etwas einfallen lassen: Die Komponente "TOpenGLControl", welches ein Devicecontext angepasst an unser ausgewähltes Fenstersystem und Betriebsystem für unsere Anwendung erstellt. Auf dieses kann das Plugin dann direkt zeichnen. Alternative Windowframeworks, wie zum Beispiel das GLFW-Framework arbeiten nach der gleichen Methode. Mehr Informationen wird es in einem Tutorial "Andorra 2D Windowframeworks" geben.
Ein wenig Code...
Nun Benötigen wir nur noch ein klein wenig Code um Andorra 2D unter Lazarus testen zu können:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
AdDraw := TAdDraw.Create(self);
AdDraw.DllName := 'AndorraOGLLaz.dll';
Application.OnIdle := @Idle;
AdDraw.Initialize;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
AdDraw.Free;
end;
procedure TForm1.Idle(Sender: TObject; var Done:boolean);
begin
AdDraw.ClearSurface(0);
AdDraw.BeginScene;
with AdDraw.Canvas do
begin
Font := AdDraw.Fonts.GenerateFont('Arial', 24, []);
TextOut(0,0,'Andorra 2D...');
Font := AdDraw.Fonts.GenerateFont('Arial', 10, []);
TextOut(0,30,'...works with Lazarus too');
end;
AdDraw.EndScene;
AdDraw.Flip;
end;
Um Problemen vorzubeugen, hat es sich als nützlich erwiesen die Zeile
{$mode objfpc}{$H+}
am Anfang der
Unit durch
{$MODE DELPHI}
zu ersetzen.
http://andorra.sourceforge.net/tutots/lazarus/img3.png
Copyright und Lizenz
(c) by Andreas Stöckel Februar 2008
Der Inhalt dieses Tutorials steht unter der
GNU Lizenz für freie Dokumentation.
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein