|
@@ -1,174 +1,95 @@
|
|
|
-library demo02;
|
|
|
+library demo01;
|
|
|
|
|
|
+// RU: Этот файл содержит некоторые настройки(например использовать ли статическую компиляцию) и определения ОС под которую происходит
|
|
|
+// компиляция.
|
|
|
+// EN: This file contains some options(e.g. whether to use static compilation) and defines of OS for which is compilation going.
|
|
|
{$I zglCustomConfig.cfg}
|
|
|
|
|
|
uses
|
|
|
zgl_application,
|
|
|
- zgl_types,
|
|
|
zgl_screen,
|
|
|
zgl_window,
|
|
|
zgl_timers,
|
|
|
- // RU: Модули для работы с файлами, файлами в памяти и zip-архивами.
|
|
|
- // EN: Units for using files, files in memory and zip archives.
|
|
|
- zgl_file,
|
|
|
- zgl_memory,
|
|
|
- // RU: Модуль для поддержки многопоточной загрузки ресурсов.
|
|
|
- // EN: Unit for multithreaded resource loading.
|
|
|
- zgl_resources,
|
|
|
- // RU: Модуль для работы со шрифтами.
|
|
|
- // EN: Unit for using fonts.
|
|
|
- zgl_font,
|
|
|
- // RU: Модули для работы с текстурами. zgl_textures является основным, следующие за ним предоставляют поддержку определённых форматов.
|
|
|
- // EN: Units for using textures. zgl_textures is a main unit, next units provide support of different formats.
|
|
|
- zgl_textures,
|
|
|
- zgl_textures_tga, // TGA
|
|
|
- zgl_textures_jpg, // JPG
|
|
|
- zgl_textures_png, // PNG
|
|
|
- // RU: Звуковая подсистема реализована в модулях ниже. Подход такой же как и с текстурами - основной модуль и модули поддержки форматов.
|
|
|
- // EN: Sound subsystem implemented in units below. Idea the same as for textures - there is a main unit and units for support different formats.
|
|
|
- zgl_sound,
|
|
|
- zgl_sound_wav, // WAV
|
|
|
- zgl_sound_ogg, // OGG
|
|
|
-
|
|
|
- zgl_primitives_2d,
|
|
|
- zgl_text,
|
|
|
- zgl_sprite_2d,
|
|
|
- zgl_utils
|
|
|
+ zgl_utils,
|
|
|
+ zgl_log
|
|
|
;
|
|
|
|
|
|
var
|
|
|
- dirRes : UTF8String = 'assets/';
|
|
|
+ DirApp : UTF8String;
|
|
|
+ DirHome : UTF8String;
|
|
|
|
|
|
- memory : zglTMemory;
|
|
|
+ TimeStart : LongWord = 0;
|
|
|
|
|
|
- // RU: У каждого ресурса есть свой определённый тип, который является указателем на структуру.
|
|
|
- // EN: Every resource has its own typem which is just a pointer to structure.
|
|
|
- fntMain : Byte;
|
|
|
- //
|
|
|
- texLogo : zglPTexture;
|
|
|
- texTest : array[ 0..3 ] of zglPTexture;
|
|
|
- //
|
|
|
- sndClick : zglPSound;
|
|
|
- sndMusic : zglPSound;
|
|
|
-
|
|
|
- resLoaded : Boolean;
|
|
|
-
|
|
|
-procedure TextureCalcEffect( pData : PByteArray; Width, Height : Word );
|
|
|
+procedure Init;
|
|
|
begin
|
|
|
- u_Sleep( 1000 );
|
|
|
+ // RU: Тут можно выполнять загрузку основных ресурсов.
|
|
|
+ // EN: Here can be loading of main resources.
|
|
|
+
|
|
|
end;
|
|
|
|
|
|
-procedure Init;
|
|
|
- var
|
|
|
- i : Integer;
|
|
|
+procedure Draw;
|
|
|
begin
|
|
|
- zgl_Enable( CORRECT_RESOLUTION );
|
|
|
- scr_CorrectResolution( 800, 600 );
|
|
|
-
|
|
|
- // RU: Более детальное рассмотрение параметров функций загрузки ресурсов есть в соответствующих примерах, тут же показана лишь основная суть.
|
|
|
- // EN: Description with more details about parameters of functions can be found in other demos, here is only main idea shown.
|
|
|
-
|
|
|
- snd_Init();
|
|
|
-
|
|
|
- // RU: Основное отличие приложений Android от других заключается в том, что все ресурсы хранятся зачастую хранятся внутри apk-файла(обычный zip-архив).
|
|
|
- // Поэтому перед загрузкой любых ресурсов необходимо сначала "открыть" этот apk-файл, а потом "закрыть".
|
|
|
- // EN: Main difference between Android application and others is containing resources in apk-file(just a zip archive).
|
|
|
- // And that is why before loading of any resources this apk-file should be "opened" first, and then "closed".
|
|
|
- file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
|
|
|
-
|
|
|
- // RU: Функции загрузки ресурсов именуются в формате "$(префикс)_LoadFrom$(откуда)", где "$(префикс)" может быть tex, snd, font и т.д., а "$(откуда)" - File и Memory.
|
|
|
- // EN: Functions for loading resources named in format "$(prefix)_LoadFrom$(where)", where "$(prefix)" can be tex, snd, font and so on, and $(where) - File and Memory.
|
|
|
- fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
|
|
|
- texLogo := tex_LoadFromFile( dirRes + 'zengl.png' );
|
|
|
- sndClick := snd_LoadFromFile( dirRes + 'click.wav' );
|
|
|
-
|
|
|
- // RU: Не забываем "закрыть" apk-файл.
|
|
|
- // EN: Don't forget to "close" apk-file.
|
|
|
- file_CloseArchive();
|
|
|
-
|
|
|
- // RU: Многопоточная загрузка ресурсов позволяет составить очередь и не ожидать загрузки выполняя другие операции, например рендеринг какой-то анимации.
|
|
|
- // Процесс загрузки в многопоточном режиме практически ничем не отличается от обычного за исключением вызова функций старта и окончания очереди.
|
|
|
- // EN: Multithreaded resource loading allows to make queue and do something while loading, e.g. rendering some animation.
|
|
|
- // Loading resources in multithreaded mode has almost no difference with standard mode, except using functions for beginning and ending queues.
|
|
|
- res_BeginQueue( 0 );
|
|
|
- file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
|
|
|
- // RU: Между res_BeginQueue и res_EndQueue могут использоваться все обычные функции загрузки ресурсов.
|
|
|
- // Для задержки экрана загрузки ресурсы будут загружены несколько раз, а для текстуры будет использована обработка с задержкой.
|
|
|
- // EN: All standard functions for loading resources can be used between res_BeginQueue and res_EndQueue.
|
|
|
- // Just for holding loading screen resources will be loaded multiple times, and texture will be post-processed with delay.
|
|
|
- zgl_Reg( TEXTURE_CURRENT_EFFECT, @TextureCalcEffect );
|
|
|
- for i := 0 to 3 do
|
|
|
- texTest[ i ] := tex_LoadFromFile( dirRes + 'back01.jpg', TEX_NO_COLORKEY, TEX_DEFAULT_2D or TEX_CUSTOM_EFFECT );
|
|
|
- file_CloseArchive();
|
|
|
- res_EndQueue();
|
|
|
+ // RU: Тут "рисуем" что угодно :)
|
|
|
+ // EN: Here "draw" anything :)
|
|
|
end;
|
|
|
|
|
|
-procedure Draw;
|
|
|
+procedure Update( dt : Double );
|
|
|
begin
|
|
|
- // RU: К ресурсам, которые загружаются в многопоточном режиме, можно обращаться только после завершения загрузки. Код ниже рисует экран загрузки если ресурсы ещё не загрузились.
|
|
|
- // EN: Resources which are loading in multithreaded mode can be used only after finishing the loading process. Code below renders loading screen if resources are not loaded yet.
|
|
|
- if res_GetCompleted() < 100 Then
|
|
|
- begin
|
|
|
- ssprite2d_Draw( texLogo, ( 800 - texLogo^.Width ) / 2, ( 600 - texLogo^.Height ) / 2, texLogo^.Width, texLogo^.Height, 0 );
|
|
|
- text_Draw( fntMain, 400, 300 + texLogo^.Height / 4, 'Loading... ' + u_IntToStr( res_GetCompleted() ) + '%', TEXT_HALIGN_CENTER );
|
|
|
- exit;
|
|
|
- end;
|
|
|
-
|
|
|
- ssprite2d_Draw( texTest[ 0 ], 0, 0, 800, 600, 0 );
|
|
|
- text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
|
|
|
- text_Draw( fntMain, 0, 16, 'VRAM Used: ' + u_FloatToStr( zgl_Get( RENDER_VRAM_USED ) / 1024 / 1024 ) + 'Mb' );
|
|
|
+ // RU: Эта функция наземенима для реализация плавного движения чего-либо, т.к. точность таймеров ограничена FPS.
|
|
|
+ // EN: This function is the best way to implement smooth moving of something, because accuracy of timers are restricted by FPS.
|
|
|
end;
|
|
|
|
|
|
-procedure Activate( active : Boolean );
|
|
|
+procedure Timer;
|
|
|
begin
|
|
|
- // RU: Из-за проблемы в OpenAL на платформе Android(в фоном режиме приложение продолжает грузить CPU), звуковую подсистему
|
|
|
- // необходимо останавливать и перезапускать, но только при потере/получении фокуса приложением.
|
|
|
- // EN: Because of problem inside OpenAL on Android(application continue load CPU in background), sound susbsytem should be
|
|
|
- // stopped and reloaded when application loses/gets the focus.
|
|
|
-
|
|
|
- if active Then
|
|
|
- begin
|
|
|
- // RU: Перезапускаем звуковую подсистему.
|
|
|
- // EN: Reload sound subsystem.
|
|
|
- snd_Init();
|
|
|
-
|
|
|
- file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
|
|
|
- sndClick := snd_LoadFromFile( dirRes + 'click.wav' );
|
|
|
- file_CloseArchive();
|
|
|
- end else
|
|
|
- snd_Free();
|
|
|
+ //
|
|
|
end;
|
|
|
|
|
|
procedure Restore;
|
|
|
- var
|
|
|
- i : Integer;
|
|
|
begin
|
|
|
- file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
|
|
|
-
|
|
|
- font_RestoreFromFile( fntMain, dirRes + 'font.zfi' );
|
|
|
- tex_RestoreFromFile( texLogo, dirRes + 'zengl.png' );
|
|
|
-
|
|
|
- file_CloseArchive();
|
|
|
-
|
|
|
- res_BeginQueue( 0 );
|
|
|
- file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
|
|
|
- for i := 0 to 3 do
|
|
|
- tex_RestoreFromFile( texTest[ i ], dirRes + 'back01.jpg' );
|
|
|
- file_CloseArchive();
|
|
|
- res_EndQueue();
|
|
|
+ // RU: Восстановление ресурсов нужно реализовывать тут.
|
|
|
+ // EN: Restoring of resources should be implemented here.
|
|
|
end;
|
|
|
|
|
|
procedure Java_zengl_android_ZenGL_Main( var env; var thiz ); cdecl;
|
|
|
begin
|
|
|
+ // RU: Для загрузки/создания каких-то своих настроек/профилей/etc. можно получить путь к домашенему каталогу пользователя, или к исполняемому
|
|
|
+ // файлу(для GNU/Linux - изменено, если будет программа содержать свой собственный путь, то путь до самого исполняемого файла будет прописан).
|
|
|
+ // На Android DIRECTORY_APPLICATION возвращает полный путь к apk-файлу
|
|
|
+
|
|
|
+ // 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).
|
|
|
+ // On Android DIRECTORY_APPLICATION returns full path to apk-file
|
|
|
+ DirApp := utf8_Copy( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
|
|
|
+ DirHome := utf8_Copy( PAnsiChar( zgl_Get( DIRECTORY_HOME ) ) );
|
|
|
+
|
|
|
+ // RU: Создаем таймер с интервалом 1000мс.
|
|
|
+ // EN: Create a timer with interval 1000ms.
|
|
|
+ TimeStart := timer_Add( @Timer, 100, t_Start);
|
|
|
+
|
|
|
+ // RU: Регистрируем процедуру, что выполнится сразу после инициализации ZenGL.
|
|
|
+ // EN: Register the procedure, that will be executed after ZenGL initialization.
|
|
|
zgl_Reg( SYS_LOAD, @Init );
|
|
|
+ // RU: Регистрируем процедуру, где будет происходить рендер.
|
|
|
+ // EN: Register the render procedure.
|
|
|
zgl_Reg( SYS_DRAW, @Draw );
|
|
|
- zgl_Reg( SYS_ACTIVATE, @Activate );
|
|
|
+ // RU: Регистрируем процедуру, которая будет принимать разницу времени между кадрами.
|
|
|
+ // EN: Register the procedure, that will get delta time between the frames.
|
|
|
+ zgl_Reg( SYS_UPDATE, @Update );
|
|
|
+ // RU: Очень важная для Android функция, которая вызывается при возврате фокуса приложению если необходимо восстановить ресурсы.
|
|
|
+ // EN: Very important function for Android, which will be called every time when application gets the focus and resources need to restore.
|
|
|
zgl_Reg( SYS_ANDROID_RESTORE, @Restore );
|
|
|
|
|
|
+ // RU: Указываем первоначальные настройки.
|
|
|
+ // изменено, указывать ни чего не надо, либо можем указать размеры экрана с которым будем работать.
|
|
|
+ // EN: Set screen options.
|
|
|
scr_SetOptions();
|
|
|
end;
|
|
|
|
|
|
exports
|
|
|
+ // RU: Эта функция должна быть реализована проектом, который использует ZenGL.
|
|
|
+ // EN: This function should be implemented by project which is use ZenGL.
|
|
|
Java_zengl_android_ZenGL_Main,
|
|
|
+
|
|
|
+ // RU: Функции реализуемые ZenGL, которые должны быть экспортированы.
|
|
|
+ // EN: Functions which are implemented by ZenGL and should be exported.
|
|
|
{$I android_export.inc}
|
|
|
End.
|