demo01.pas 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. program demo01;
  2. // RU: Этот файл содержит некоторые настройки(например использовать ли статическую компиляцию) и определения ОС под которую происходит компиляция.
  3. // EN: This file contains some options(e.g. whether to use static compilation) and defines of OS for which is compilation going.
  4. {$I zglCustomConfig.cfg}
  5. uses
  6. {$IFDEF USE_ZENGL_STATIC}
  7. // RU: При использовании статической компиляции необходимо подключать модули ZenGL содержащие необходимый функционал.
  8. // EN: Using static compilation needs to use ZenGL units with needed functionality.
  9. zgl_main,
  10. zgl_screen,
  11. zgl_window,
  12. zgl_timers,
  13. zgl_utils
  14. {$ELSE}
  15. // RU: Используя ZenGL в качестве библиотеки(so, dll или dylib) нужен всего один заголовочный файл.
  16. // EN: Using ZenGL as a shared library(so, dll or dylib) needs only one header.
  17. zglHeader
  18. {$ENDIF}
  19. ;
  20. var
  21. DirApp : UTF8String;
  22. DirHome : UTF8String;
  23. procedure Init;
  24. begin
  25. // RU: Тут можно выполнять загрузку основных ресурсов.
  26. // EN: Here can be loading of main resources.
  27. end;
  28. procedure Draw;
  29. begin
  30. // RU: Тут "рисуем" что угодно :)
  31. // EN: Here "draw" anything :)
  32. end;
  33. procedure Update( dt : Double );
  34. begin
  35. // RU: Эта функция наземенима для реализация плавного движения чего-либо, т.к. точность таймеров ограничена FPS.
  36. // EN: This function is the best way to implement smooth moving of something, because accuracy of timers are restricted by FPS.
  37. end;
  38. procedure Timer;
  39. begin
  40. // RU: Будем в заголовке показывать количество кадров в секунду.
  41. // EN: Caption will show the frames per second.
  42. wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );
  43. end;
  44. procedure Quit;
  45. begin
  46. //
  47. end;
  48. Begin
  49. // RU: Код ниже загружает библиотеку если статическая компиляция не используется.
  50. // EN: Code below loads a library if static compilation is not used.
  51. {$IFNDEF USE_ZENGL_STATIC}
  52. {$IFDEF LINUX}
  53. // RU: В GNU/Linux все библиотеки принято хранить в /usr/lib, поэтому libZenGL.so должна быть предварительно установлена.
  54. // Но zglLoad сначала проверить есть ли libZenGL.so рядом с исполняемым файлом.
  55. //
  56. // EN: In GNU/Linux all libraries placed in /usr/lib, so libZenGL.so must be installed before it will be used.
  57. // But zglLoad will check first if there is libZenGL.so near executable file.
  58. if not zglLoad( libZenGL ) Then exit;
  59. {$ENDIF}
  60. {$IFDEF WINDOWS}
  61. if not zglLoad( libZenGL ) Then exit;
  62. {$ENDIF}
  63. {$IFDEF DARWIN}
  64. // RU: libZenGL.dylib следует предварительно поместить в каталог MyApp.app/Contents/Frameworks/, где MyApp.app - Bundle вашего приложения.
  65. // Также следует упомянуть, что лог-файл будет создаваться в корневом каталоге поэтому либо отключайте его, либо указывайте свой путь и имя, как описано в справке.
  66. //
  67. // EN: libZenGL.dylib must be placed into this directory MyApp.app/Contents/Frameworks/, where MyApp.app - Bundle of your application.
  68. // Also you must know, that log-file will be created in root directory, so you must disable a log, or choose your own path and name for it. How to do this you can find in documentation.
  69. if not zglLoad( libZenGL ) Then exit;
  70. {$ENDIF}
  71. {$ENDIF}
  72. // RU: Для загрузки/создания каких-то своих настроек/профилей/etc. можно получить путь к домашенему каталогу пользователя, или к исполняемому файлу(не работает для GNU/Linux).
  73. // EN: For loading/creating your own options/profiles/etc. you can get path to user home directory, or to executable file(not works for GNU/Linux).
  74. DirApp := utf8_Copy( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  75. DirHome := utf8_Copy( PAnsiChar( zgl_Get( DIRECTORY_HOME ) ) );
  76. // RU: Создаем таймер с интервалом 1000мс.
  77. // EN: Create a timer with interval 1000ms.
  78. timer_Add( @Timer, 1000 );
  79. // RU: Регистрируем процедуру, что выполнится сразу после инициализации ZenGL.
  80. // EN: Register the procedure, that will be executed after ZenGL initialization.
  81. zgl_Reg( SYS_LOAD, @Init );
  82. // RU: Регистрируем процедуру, где будет происходить рендер.
  83. // EN: Register the render procedure.
  84. zgl_Reg( SYS_DRAW, @Draw );
  85. // RU: Регистрируем процедуру, которая будет принимать разницу времени между кадрами.
  86. // EN: Register the procedure, that will get delta time between the frames.
  87. zgl_Reg( SYS_UPDATE, @Update );
  88. // RU: Регистрируем процедуру, которая выполнится после завершения работы ZenGL.
  89. // EN: Register the procedure, that will be executed after ZenGL shutdown.
  90. zgl_Reg( SYS_EXIT, @Quit );
  91. // RU: Устанавливаем заголовок окна.
  92. // EN: Set the caption of the window.
  93. wnd_SetCaption( '01 - Initialization' );
  94. // RU: Разрешаем курсор мыши.
  95. // EN: Allow to show the mouse cursor.
  96. wnd_ShowCursor( TRUE );
  97. // RU: Указываем первоначальные настройки.
  98. // EN: Set screen options.
  99. scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
  100. // RU: Инициализируем ZenGL.
  101. // EN: Initialize ZenGL.
  102. zgl_Init();
  103. End.