ZenGL Tutorial/fr

From Lazarus wiki
Jump to navigationJump to search

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


ZenGL | Tutoriel 1 | Tutoriel 2 | Tutoriel 3 | Edit

Téléchargement

Vous pouvez obtenir ZenGL pour Linux, Windows et Mac depuis la page d'accueil ZenGL.

Installation

Vous pouvez extraire l'archive compressée téléchargée avec un utulitaire tel que 7-Zip dans un dossier de votre choix.

Source Path

Avant d'utiliser un des modules, assurez-vous d'avoir défini le chemin correct vers les sources de ZenGL.

Aller vers "Project > Project Options". Dans "Compiler Options > Paths" et vous pouvez les ajouter dans "Other Unit Files" :

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

Compilation

Une application peut être compilée statiquement ou avec un .so/.dll/.dylib.

Approfondissez en lisant la compilation de ZenGL de le Wiki ZenGL.

Compilation statique de ZenGL

L'avantage de la compilation statique est une taille plus réduite de votre application, mais cela demande d'inclure toutes les unités.

{$DEFINE STATIC}

ZenGL en utilisant un .so/.dll/.dylib

L'utilisation d'un .so/.dll/.dylib ne vous demande pas d'ouvrir les sources de votre application. Pour faire cela, supprimer ou mettre en commentaire la directive de compilation $DEFINE STATIC. Vous avez aussi besoin de compiler la bibliothèque ZenGL.

//{$DEFINE STATIC}

dll Windows

Ouvrir "src\Lazarus\ZenGL.lpi" puis aller vers "Run > Compile (Ctrl + F9)".

Après, dans le dossier "src\", vous devriez voir le fichier "ZenGL.dll", à copier/coller dans le dossier "bin\i386" où tous les binaires de démos sont compilés. Vous devez toujours copier les bibliothèques dans le dossier de sortie de vos programmes si vous utilisez des .dll.

Maintenant vous pouvez compiler les démos, en commentant la directive $DEFINE STATIC.

Les autres fichiers .dll dans le dossier "bin\" que vous opouvez utiliser sont : chipmunk.dll ; libogg-0.dll ; libvorbis-0.dll ; libvorbis-3.dll

Premier programme

C'est le premier programme de démo inclus dans ZenGL. D'abord, créez un nouveau "programme Free Pascal". Ajoutez le chemin au source comme décrit précédemment.

Vous devez aussi changer le mode de syntaxe dans Project > Project Options > Compiler Options > Parsing to Delphi (-Mdelphi).

Rappelez-vous que si vous utilisez .so/.dll/.dylib, il faut copier les bibliothèques binaires dans le dossier de sortie de votre programme.

Titre du programme, ajoutez les ressources:

program demo01;

{$R *.res}

Définissez le mode de compilation (mettre en commentaire pour utiliser .so/.dll/.dylib):

{$DEFINE STATIC}

Ceci ajoute les unités ZenGL :

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

Des variables comme dans un programme Pascal standard :

var
  DirApp  : String;
  DirHome : String;

Pour les procédures, ajoutez votre code ici :

procedure Init;
begin
  // Here you can load the main resources.
end;

procedure Draw;
begin
  // Here you can "draw" anything.
end;

procedure Update( dt : Double );
begin
  // This function is the best way to implement smooth moving of something, because timers are restricted by FPS.
end;

procedure Timer;
begin
  // This caption will show the frames per second.
  wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );
end;

procedure Quit;
begin
 //
end;

Le programme commence ici:

Begin
  {$IFNDEF STATIC}
  zglLoad( libZenGL );
  {$ENDIF}
  // For loading/creating your own options/profiles/etc. you can get the path to the user home
  // directory, or to the executable file (does not work on GNU/Linux).
  DirApp  := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) );

  // Create a timer with an interval of 1000ms.
  timer_Add( @Timer, 1000 );

  // Register the procedure that will be executed after ZenGL initialization.
  zgl_Reg( SYS_LOAD, @Init );
  // Register the render procedure.
  zgl_Reg( SYS_DRAW, @Draw );
  // Register the procedure that will get the delta time between the frames.
  zgl_Reg( SYS_UPDATE, @Update );
  // Register the procedure that will be called after ZenGL shuts down.
  zgl_Reg( SYS_EXIT, @Quit );
  
  // Enable usage of UTF-8, because this unit saved in UTF-8 encoding and here used
  // string variables.
  zgl_Enable( APP_USE_UTF8 );

  // Set the caption of the window.
  wnd_SetCaption( '01 - Initialization' );

  // Show the mouse cursor.
  wnd_ShowCursor( TRUE );

  // Set screen options.
  scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );

  // Initialize ZenGL.
  zgl_Init();
End.

Code résultant

Le résultat est une modèle pour les projets ZenGL :

program template;

{$DEFINE STATIC}

{$R *.res}

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

var
  DirApp  : String; 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.