ZenGL Tutorial/de

From Lazarus wiki
Jump to navigationJump to search

Deutsch (de) English (en) español (es) français (fr) русский (ru)


ZenGL/de | Tutorial 1 | Tutorial 2 | Tutorial 3 | Edit

Download

ZenGL für Linux, Windows und Mac kann hier heruntergeladen werden: Download ZenGL.

Installation

Einfach die gepackte Datei mit einem "Zip-Programm" wie 7-7ip in einen beliebigen Ordner entpacken.

Pfade

Bevor man die einzelnen Module von ZenGL verwenden kann, müssen diese im Projekt zu den Pfaden der Units hinzugefügt werden.

Dazu einfach Unter "Projekt > Projekteinstellungen" klicken. Dann unter "Compilereinstellungen > Pfade'" bei "Andere Units (-Fu)(Trenner ist der Strichpunkt):"' die folgenden Verzeichnisse hinzufügen:

headers
extra
src
src\Direct3D
lib\jpeg\$(TargetCPU)-$(TargetOS)
lib\msvcrt\$(TargetCPU)
lib\ogg\$(TargetCPU)-$(TargetOS)
lib\zlib\$(TargetCPU)-$(TargetOS)

Kompilieren

Eine ZenGL Anwendung kann entweder statisch gelinkt werden, oder mittels so/dll/dylib. Mehr dazu im ZenGL-Wiki (englisch): compilation

ZenGL statisch verwenden

Die statische Verwendung hat den Vorteil, dass die Anwendung kleiner ist, man muss dann jedoch alle notwendigen Units inkludieren.

Darüber hinaus muss die Anwendung dann den Vorgaben der LGPL-Lizenz folgen. Das heisst, dass alle Teile einer Anwendung, die auf ZenGL-Code zurückgreifen, wiederum freigegeben werden müssen.

Die statische Verwendung von ZenGL erfolgt mittels

{$DEFINE STATIC}

im Quellcode.

ZenGL mit so/dll/dylib verwenden

Wenn man ZenGL mit so/dll/dylib verwendet, ist es nicht notwendig, den Quellcode seines Programmes freizugeben. Um die Applikation dynamisch zu linken, muss man lediglich die Zeile

{$DEFINE STATIC}

auskommentieren.

Windows DLL

Einfach "src\Lazarus\ZenGL.lpi" öffnen und mittels "Start > Neu kompilieren (Strg + F9)" die notwendige DLL erzeugen. Diese Datei mit Namen "ZenGL.dll" wird im Ordner "src\" erzeugt. Die Datei von Dort in den Ordner "bin\i386" kopieren, wo die Demoprogramme abgelegt sind. Nicht vergessen: Mann muss diese DLL Dateien immer mitgeben, wenn man sein Programm weitergibt!


Andere DLL-Dateien im "bin\"-Ordner, die man benutzt sind:chipmunk.dll ; libogg-0.dll ; libvorbis-0.dll ; libvorbis-3.dll.

Das erste Programm

Dies ist das erste Progamm, welche mit ZenGL erstellt wird. Man erstellt in Lazarus ein neues Projekt vom Typ "Free Pascal Program". Danach fügt man die Pfade, wie oben beschrieben, dem Projekt hinzu.

Auch muss der Syntax Modus in Projekt > Projekteinstellungen > Compilereinstellungen > Parsen auf Delphi (-Mdelphi) umgestellt werden. Beim Verwenden der dynamischen Variante nicht vergessen, die jeweiligen Bibliotheken ins Ausgabeverzeichnis zu kopieren!

Programmtitel, hinzufügen von Ressourcen:

program demo01;

{$R *.res}

Kompiliereinstellungen:

{$DEFINE STATIC}

Hinzufügen der notwendigen ZenGL-Units:

uses
  {$IFNDEF STATIC}
  zglHeader
  {$ELSE}
  zgl_main,
  zgl_screen,
  zgl_window,
  zgl_timers,
  zgl_utils
  {$ENDIF}
  ;

Variablen, wie in einem standard Pascal-Programm:

var
  DirApp  : String;
  DirHome : String;

Prozeduren:

procedure Init;
begin
  // Hier die Ressourcen laden.
end;

procedure Draw;
begin
  // Malen.
end;

procedure Update( dt : Double );
begin
  // Diese Procedure ist der beste Weg, um weiche Bewegung zu implementieren.
end;

procedure Timer;
begin
  // Caption zeigt die Frames pro Sekunde an:
  wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );
end;

procedure Quit;
begin
 //
end;

Hier startet das Programm:

Begin
  {$IFNDEF STATIC}
  zglLoad( libZenGL );
  {$ENDIF}
  DirApp  := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) );

  // Erzeugen eines Timers mit Intervall 1000ms.
  timer_Add( @Timer, 1000 );

  // Registrieren der Prozedur die bei der ZengGL-Initialisierung ausgeführt wird.
  zgl_Reg( SYS_LOAD, @Init );
  // Registrieren der Render-Prozedur.
  zgl_Reg( SYS_DRAW, @Draw );
  // Registrieren der Update-Prozedur.
  zgl_Reg( SYS_UPDATE, @Update );
  // Registrieren der Quit-Prozedure (wird beim Schließen der Anwendung ausgeführt).
  zgl_Reg( SYS_EXIT, @Quit );
  
  // UTF-8-Unterstützung einschalten.
  zgl_Enable( APP_USE_UTF8 );

  // Fenstertitel festlegen.
  wnd_SetCaption( '01 - Initialization' );

  // Mauszeiger anzeigen:
  wnd_ShowCursor( TRUE );

  // Optionen für den "Screen" festlegen.
  scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );

  //ZenGL initalisieren.
  zgl_Init();
End.

der fertige Code

Das Ergebnis ist eine Vorlage für ZenGL-Projekte:

program template;

{$DEFINE STATIC}

{$R *.res}

uses
  {$IFNDEF STATIC}
  zglHeader
  {$ELSE}
  zgl_main,
  zgl_screen,
  zgl_window,
  zgl_timers,
  zgl_utils
  {$ENDIF}
  ;

var
  DirApp, DirHome : String;

procedure Init;
begin
end;

procedure Draw;
begin
end;

procedure Update( dt : Double );
begin
end;

procedure Timer;
begin
  wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );
end;

procedure Quit;
begin
end;

Begin
  {$IFNDEF STATIC}
  zglLoad( libZenGL );
  {$ENDIF}
  DirApp  := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) );
  timer_Add( @Timer, 1000 );
  zgl_Reg( SYS_LOAD, @Init );
  zgl_Reg( SYS_DRAW, @Draw );
  zgl_Reg( SYS_UPDATE, @Update );
  zgl_Reg( SYS_EXIT, @Quit );
  zgl_Enable( APP_USE_UTF8 );
  wnd_SetCaption( '01 - Initialization' );
  wnd_ShowCursor( TRUE );
  scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
  zgl_Init();
End.