Difference between revisions of "ZenGL Tutorial/de"

From Lazarus wiki
m (Fixed syntax highlighting; deleted category included in page template)
 
(2 intermediate revisions by 2 users not shown)
Line 14: Line 14:
 
Dazu einfach Unter "''Projekt > Projekteinstellungen''" klicken. Dann unter "''Compilereinstellungen > Pfade'" bei "''Andere Units (-Fu)(Trenner ist der Strichpunkt):"' die folgenden Verzeichnisse hinzufügen:
 
Dazu einfach Unter "''Projekt > Projekteinstellungen''" klicken. Dann unter "''Compilereinstellungen > Pfade'" bei "''Andere Units (-Fu)(Trenner ist der Strichpunkt):"' die folgenden Verzeichnisse hinzufügen:
  
<delphi>headers
+
<syntaxhighlight lang=text>
 +
headers
 
extra
 
extra
 
src
 
src
Line 21: Line 22:
 
lib\msvcrt\$(TargetCPU)
 
lib\msvcrt\$(TargetCPU)
 
lib\ogg\$(TargetCPU)-$(TargetOS)
 
lib\ogg\$(TargetCPU)-$(TargetOS)
lib\zlib\$(TargetCPU)-$(TargetOS)</delphi>
+
lib\zlib\$(TargetCPU)-$(TargetOS)</syntaxhighlight>
  
 
== Kompilieren==
 
== Kompilieren==
Line 33: Line 34:
  
 
Die statische Verwendung von ZenGL erfolgt mittels
 
Die statische Verwendung von ZenGL erfolgt mittels
<delphi>{$DEFINE STATIC}</delphi>
+
<syntaxhighlight lang=pascal>{$DEFINE STATIC}</syntaxhighlight>
 
im Quellcode.
 
im Quellcode.
  
 
=== ZenGL mit so/dll/dylib verwenden ===
 
=== 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
 
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
<delphi>{$DEFINE STATIC}</delphi> auskommentieren.
+
<syntaxhighlight lang=pascal>{$DEFINE STATIC}</syntaxhighlight> auskommentieren.
  
 
==== Windows DLL ====
 
==== Windows DLL ====
Line 54: Line 55:
  
 
Programmtitel, hinzufügen von Ressourcen:
 
Programmtitel, hinzufügen von Ressourcen:
<delphi>program demo01;
+
<syntaxhighlight lang=pascal>program demo01;
  
{$R *.res}</delphi>
+
{$R *.res}</syntaxhighlight>
  
 
Kompiliereinstellungen:
 
Kompiliereinstellungen:
<delphi>{$DEFINE STATIC}</delphi>
+
<syntaxhighlight lang=pascal>{$DEFINE STATIC}</syntaxhighlight>
  
 
Hinzufügen der notwendigen ZenGL-Units:
 
Hinzufügen der notwendigen ZenGL-Units:
<delphi>uses
+
<syntaxhighlight lang=pascal>uses
 
   {$IFNDEF STATIC}
 
   {$IFNDEF STATIC}
 
   zglHeader
 
   zglHeader
Line 72: Line 73:
 
   zgl_utils
 
   zgl_utils
 
   {$ENDIF}
 
   {$ENDIF}
   ;</delphi>
+
   ;</syntaxhighlight>
  
 
Variablen, wie in einem standard Pascal-Programm:
 
Variablen, wie in einem standard Pascal-Programm:
<delphi>
+
<syntaxhighlight lang=pascal>
 
var
 
var
 
   DirApp  : String;
 
   DirApp  : String;
   DirHome : String;</delphi>
+
   DirHome : String;</syntaxhighlight>
  
 
Prozeduren:
 
Prozeduren:
<delphi>procedure Init;
+
<syntaxhighlight lang=pascal>procedure Init;
 
begin
 
begin
 
   // Hier die Ressourcen laden.
 
   // Hier die Ressourcen laden.
Line 105: Line 106:
 
begin
 
begin
 
  //
 
  //
end;</delphi>
+
end;</syntaxhighlight>
  
 
Hier startet das Programm:
 
Hier startet das Programm:
<delphi>Begin
+
<syntaxhighlight lang=pascal>Begin
 
   {$IFNDEF STATIC}
 
   {$IFNDEF STATIC}
 
   zglLoad( libZenGL );
 
   zglLoad( libZenGL );
Line 141: Line 142:
 
   //ZenGL initalisieren.
 
   //ZenGL initalisieren.
 
   zgl_Init();
 
   zgl_Init();
End.</delphi>   
+
End.</syntaxhighlight>   
  
 
=== der fertige Code ===
 
=== der fertige Code ===
  
 
Das Ergebnis ist eine Vorlage für ZenGL-Projekte:
 
Das Ergebnis ist eine Vorlage für ZenGL-Projekte:
<delphi>program template;
+
<syntaxhighlight lang=pascal>program template;
  
 
{$DEFINE STATIC}
 
{$DEFINE STATIC}
Line 165: Line 166:
  
 
var
 
var
   DirApp : String; DirHome : String;
+
   DirApp, DirHome : String;
  
 
procedure Init;
 
procedure Init;
Line 204: Line 205:
 
   scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
 
   scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
 
   zgl_Init();
 
   zgl_Init();
End.</delphi>
+
End.
 
+
</syntaxhighlight>
 
 
[[Category:Graphics/de]]
 

Latest revision as of 09:28, 3 March 2020

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.