demo01.pas 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  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 UNIX}
  7. cthreads,
  8. {$ENDIF}
  9. {$IFDEF USE_ZENGL_STATIC}
  10. // RU: При использовании статической компиляции необходимо подключать модули ZenGL содержащие необходимый функционал.
  11. // EN: Using static compilation needs to use ZenGL units with needed functionality.
  12. zgl_window,
  13. zgl_screen,
  14. zgl_timers,
  15. zgl_utils,
  16. zgl_log
  17. {$ELSE}
  18. // RU: Используя ZenGL в качестве библиотеки(so, dll или dylib) нужен всего один заголовочный файл.
  19. // EN: Using ZenGL as a shared library(so, dll or dylib) needs only one header.
  20. // zglHeader
  21. {$ENDIF}
  22. ;
  23. var
  24. DirApp : UTF8String;
  25. DirHome : UTF8String;
  26. TimeStart : Byte = 0;
  27. procedure Init;
  28. begin
  29. // RU: Тут можно выполнять загрузку основных ресурсов.
  30. // EN: Here can be loading of main resources.
  31. end;
  32. procedure Draw;
  33. begin
  34. // RU: Тут "рисуем" что угодно :)
  35. // EN: Here "draw" anything :)
  36. end;
  37. procedure Update( dt : Double );
  38. begin
  39. // RU: Эта функция наземенима для реализация плавного движения чего-либо, т.к. точность таймеров ограничена FPS.
  40. // EN: This function is the best way to implement smooth moving of something, because accuracy of timers are restricted by FPS.
  41. end;
  42. // RU: Пример использования таймера.
  43. // EN: An example of using a timer.
  44. procedure Timer;
  45. begin
  46. // RU: Будем в заголовке показывать количество кадров в секунду.
  47. // EN: Caption will show the frames per second.
  48. wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );
  49. end;
  50. procedure KeyMouseEvent;
  51. begin
  52. // RU: Функция обработки клавиатуры, мыши, джойстика и тачпада. Все события связанные с ними очищаются после её обработки.
  53. // Все попытки обработать клавиатуру, мышь или тачпад в других функциях могут привести к непредвиденным ситуациям.
  54. // EN: Keyboard, mouse, joystick and touchpad handling function. All events associated with them are cleared after processing it.
  55. // Any attempt to handle the keyboard, mouse, or touchpad in other functions may lead to unexpected situations.
  56. end;
  57. procedure Quit;
  58. begin
  59. // RU: События которые надо произвести по завершению программы.
  60. // EN: Events to be performed at the end of the program.
  61. end;
  62. Begin
  63. (*
  64. // RU: Код ниже загружает библиотеку если статическая компиляция не используется.
  65. // EN: Code below loads a library if static compilation is not used.
  66. {$IFNDEF USE_ZENGL_STATIC}
  67. {$IFDEF LINUX}
  68. // RU: В GNU/Linux все библиотеки принято хранить в /usr/lib, поэтому libZenGL.so должна быть предварительно установлена.
  69. // Но zglLoad сначала проверить есть ли libZenGL.so рядом с исполняемым файлом.
  70. //
  71. // EN: In GNU/Linux all libraries placed in /usr/lib, so libZenGL.so must be installed before it will be used.
  72. // But zglLoad will check first if there is libZenGL.so near executable file.
  73. if not zglLoad( libZenGL ) Then exit;
  74. {$ENDIF}
  75. {$IFDEF WINDOWS}
  76. if not zglLoad( libZenGL ) Then exit;
  77. {$ENDIF}
  78. {$IFDEF DARWIN}
  79. // RU: libZenGL.dylib следует предварительно поместить в каталог MyApp.app/Contents/Frameworks/, где MyApp.app - Bundle вашего приложения.
  80. // Также следует упомянуть, что лог-файл будет создаваться в корневом каталоге поэтому либо отключайте его, либо указывайте свой путь и имя, как описано в справке.
  81. //
  82. // EN: libZenGL.dylib must be placed into this directory MyApp.app/Contents/Frameworks/, where MyApp.app - Bundle of your application.
  83. // 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.
  84. if not zglLoad( libZenGL ) Then exit;
  85. {$ENDIF}
  86. {$ENDIF}
  87. *)
  88. // RU: Для загрузки/создания каких-то своих настроек/профилей/etc. можно получить путь к домашенему каталогу пользователя, или к исполняемому файлу(не работает для GNU/Linux).
  89. // 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).
  90. DirApp := utf8_Copy( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  91. DirHome := utf8_Copy( PAnsiChar( zgl_Get( DIRECTORY_HOME ) ) );
  92. // RU: Устанавливаем интервал на обработку событий клавиатуры, мыши, тачпада. И регистрируем процедуру.
  93. // Вызывать zgl_SetEventInterval не обязательно. Значение 16 стоит по умолчанию.
  94. // EN: We set the interval for processing keyboard, mouse, touchpad events. And we register the procedure.
  95. // Calling zgl_SetEventInterval is optional. The default is 16.
  96. zgl_SetEventsInterval(16);
  97. zgl_Reg(SYS_EVENTS, @KeyMouseEvent);
  98. // RU: Создаем таймер с интервалом 1000мс.
  99. // EN: Create a timer with interval 1000ms.
  100. TimeStart := timer_Add( @Timer, 1000, Start );
  101. // RU: Регистрируем процедуру, что выполнится сразу после инициализации ZenGL.
  102. // EN: Register the procedure, that will be executed after ZenGL initialization.
  103. zgl_Reg( SYS_LOAD, @Init );
  104. // RU: Регистрируем процедуру, где будет происходить рендер.
  105. // EN: Register the render procedure.
  106. zgl_Reg( SYS_DRAW, @Draw );
  107. // RU: Регистрируем процедуру, которая будет принимать разницу времени между кадрами.
  108. // EN: Register the procedure, that will get delta time between the frames.
  109. zgl_Reg( SYS_UPDATE, @Update );
  110. // RU: Регистрируем процедуру, которая выполнится после завершения работы ZenGL.
  111. // EN: Register the procedure, that will be executed after ZenGL shutdown.
  112. zgl_Reg( SYS_EXIT, @Quit );
  113. // RU: Устанавливаем заголовок окна.
  114. // EN: Set the caption of the window.
  115. wnd_SetCaption(utf8_Copy('01 - Initialization'));
  116. // RU: Разрешаем курсор мыши.
  117. // EN: Allow to show the mouse cursor.
  118. wnd_ShowCursor( TRUE ); // по умолчанию стоит
  119. // RU: Указываем первоначальные настройки.
  120. // EN: Set screen options.
  121. zgl_SetParam(800, 600, false, false);
  122. scr_SetOptions(); // это тоже не обязательно вызывать, по умолчанию прописано при инициализации
  123. // RU: Инициализируем ZenGL.
  124. // EN: Initialize ZenGL.
  125. zgl_Init();
  126. End.