AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi [Andorra 2D] Compilieren mit Lazarus
Tutorial durchsuchen
Ansicht
Themen-Optionen

[Andorra 2D] Compilieren mit Lazarus

Ein Tutorial von igel457 · begonnen am 3. Mär 2008 · letzter Beitrag vom 17. Aug 2009
 
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#1

[Andorra 2D] Compilieren mit Lazarus

  Alt 3. Mär 2008, 14:30
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.
Andreas
"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
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz