Pārlūkot izejas kodu

[iOS]added libGLU.a for tess_* functions

git-svn-id: http://zengl.googlecode.com/svn/branches/0.3.x@1881 6573c10b-8653-0410-9706-d32479e959fb
dr.andru 13 gadi atpakaļ
revīzija
5f27137fe7
100 mainītis faili ar 1949 papildinājumiem un 0 dzēšanām
  1. BIN
      bin/Android/armv5/libchipmunk.so
  2. BIN
      bin/Android/armv5/libmodplug.so
  3. BIN
      bin/Android/armv5/libogg.so
  4. BIN
      bin/Android/armv5/libopenal.so
  5. BIN
      bin/Android/armv5/libtheoradec.so
  6. BIN
      bin/Android/armv5/libvorbis.so
  7. BIN
      bin/Android/armv5/libzenjpeg.so
  8. BIN
      bin/Android/armv6/libchipmunk.so
  9. BIN
      bin/Android/armv6/libmodplug.so
  10. BIN
      bin/Android/armv6/libogg.so
  11. BIN
      bin/Android/armv6/libopenal.so
  12. BIN
      bin/Android/armv6/libtheoradec.so
  13. BIN
      bin/Android/armv6/libvorbis.so
  14. BIN
      bin/Android/armv6/libzenjpeg.so
  15. BIN
      bin/data/audio-play.png
  16. BIN
      bin/data/audio-stop.png
  17. BIN
      bin/data/back01.jpg
  18. BIN
      bin/data/back02.png
  19. BIN
      bin/data/back03.jpg
  20. BIN
      bin/data/back04.jpg
  21. BIN
      bin/data/click.wav
  22. BIN
      bin/data/emitter_diamond.zei
  23. BIN
      bin/data/emitter_fire00.zei
  24. BIN
      bin/data/emitter_fire01.zei
  25. BIN
      bin/data/emitter_fire02.zei
  26. BIN
      bin/data/emitter_rain.zei
  27. BIN
      bin/data/font-page0.png
  28. BIN
      bin/data/font.zfi
  29. BIN
      bin/data/ground.map
  30. BIN
      bin/data/ground.png
  31. BIN
      bin/data/miku.png
  32. BIN
      bin/data/music.ogg
  33. BIN
      bin/data/particle.png
  34. BIN
      bin/data/tiles.png
  35. BIN
      bin/data/tux_stand.png
  36. BIN
      bin/data/tux_walking.png
  37. BIN
      bin/data/video.ogv
  38. BIN
      bin/data/zengl.icns
  39. BIN
      bin/data/zengl.ico
  40. BIN
      bin/data/zengl.png
  41. BIN
      bin/data/zengl.zip
  42. BIN
      bin/i386-linux/libchipmunk.so.5.3.2
  43. BIN
      bin/i386-win32/chipmunk.dll
  44. BIN
      bin/i386-win32/libmodplug.dll
  45. BIN
      bin/i386-win32/libogg-0.dll
  46. BIN
      bin/i386-win32/libtheoradec-1.dll
  47. BIN
      bin/i386-win32/libvorbis-0.dll
  48. BIN
      bin/i386-win32/libvorbisfile-3.dll
  49. BIN
      bin/libchipmunk.5.3.2.dylib
  50. BIN
      bin/libmodplug.dylib
  51. BIN
      bin/x86_64-linux/libchipmunk.so.5.3.2
  52. BIN
      bin/x86_64-win64/chipmunk.dll
  53. BIN
      bin/x86_64-win64/libmodplug.dll
  54. BIN
      bin/x86_64-win64/libogg-0.dll
  55. BIN
      bin/x86_64-win64/libtheoradec-1.dll
  56. BIN
      bin/x86_64-win64/libvorbis-0.dll
  57. BIN
      bin/x86_64-win64/libvorbisfile-3.dll
  58. 8 0
      demos/Android/01 - Initialization/.classpath
  59. 33 0
      demos/Android/01 - Initialization/.project
  60. 25 0
      demos/Android/01 - Initialization/AndroidManifest.xml
  61. 3 0
      demos/Android/01 - Initialization/bin/jarlist.cache
  62. 81 0
      demos/Android/01 - Initialization/jni/demo01.lpr
  63. 113 0
      demos/Android/01 - Initialization/jni/demo01_linux.lpi
  64. 113 0
      demos/Android/01 - Initialization/jni/demo01_windows.lpi
  65. 7 0
      demos/Android/01 - Initialization/jni/linux_prebuild.sh
  66. 6 0
      demos/Android/01 - Initialization/jni/windows_prebuild.bat
  67. 14 0
      demos/Android/01 - Initialization/project.properties
  68. BIN
      demos/Android/01 - Initialization/res/drawable-hdpi/ic_launcher.png
  69. BIN
      demos/Android/01 - Initialization/res/drawable-ldpi/ic_launcher.png
  70. BIN
      demos/Android/01 - Initialization/res/drawable-mdpi/ic_launcher.png
  71. BIN
      demos/Android/01 - Initialization/res/drawable-xhdpi/ic_launcher.png
  72. 7 0
      demos/Android/01 - Initialization/res/layout/main.xml
  73. 6 0
      demos/Android/01 - Initialization/res/values/strings.xml
  74. 248 0
      demos/Android/01 - Initialization/src/zengl/android/ZenGL.java
  75. 69 0
      demos/Android/01 - Initialization/src/zengl/demo01/Demo01Activity.java
  76. 8 0
      demos/Android/02 - Resources/.classpath
  77. 33 0
      demos/Android/02 - Resources/.project
  78. 25 0
      demos/Android/02 - Resources/AndroidManifest.xml
  79. 3 0
      demos/Android/02 - Resources/bin/jarlist.cache
  80. 136 0
      demos/Android/02 - Resources/jni/demo02.lpr
  81. 113 0
      demos/Android/02 - Resources/jni/demo02_linux.lpi
  82. 113 0
      demos/Android/02 - Resources/jni/demo02_windows.lpi
  83. 12 0
      demos/Android/02 - Resources/jni/linux_prebuild.sh
  84. 11 0
      demos/Android/02 - Resources/jni/windows_prebuild.bat
  85. 14 0
      demos/Android/02 - Resources/project.properties
  86. BIN
      demos/Android/02 - Resources/res/drawable-hdpi/ic_launcher.png
  87. BIN
      demos/Android/02 - Resources/res/drawable-ldpi/ic_launcher.png
  88. BIN
      demos/Android/02 - Resources/res/drawable-mdpi/ic_launcher.png
  89. BIN
      demos/Android/02 - Resources/res/drawable-xhdpi/ic_launcher.png
  90. 7 0
      demos/Android/02 - Resources/res/layout/main.xml
  91. 6 0
      demos/Android/02 - Resources/res/values/strings.xml
  92. 248 0
      demos/Android/02 - Resources/src/zengl/android/ZenGL.java
  93. 69 0
      demos/Android/02 - Resources/src/zengl/demo02/Demo02Activity.java
  94. 8 0
      demos/Android/03 - Input/.classpath
  95. 33 0
      demos/Android/03 - Input/.project
  96. 25 0
      demos/Android/03 - Input/AndroidManifest.xml
  97. 3 0
      demos/Android/03 - Input/bin/jarlist.cache
  98. 123 0
      demos/Android/03 - Input/jni/demo03.lpr
  99. 113 0
      demos/Android/03 - Input/jni/demo03_linux.lpi
  100. 113 0
      demos/Android/03 - Input/jni/demo03_windows.lpi

BIN
bin/Android/armv5/libchipmunk.so


BIN
bin/Android/armv5/libmodplug.so


BIN
bin/Android/armv5/libogg.so


BIN
bin/Android/armv5/libopenal.so


BIN
bin/Android/armv5/libtheoradec.so


BIN
bin/Android/armv5/libvorbis.so


BIN
bin/Android/armv5/libzenjpeg.so


BIN
bin/Android/armv6/libchipmunk.so


BIN
bin/Android/armv6/libmodplug.so


BIN
bin/Android/armv6/libogg.so


BIN
bin/Android/armv6/libopenal.so


BIN
bin/Android/armv6/libtheoradec.so


BIN
bin/Android/armv6/libvorbis.so


BIN
bin/Android/armv6/libzenjpeg.so


BIN
bin/data/audio-play.png


BIN
bin/data/audio-stop.png


BIN
bin/data/back01.jpg


BIN
bin/data/back02.png


BIN
bin/data/back03.jpg


BIN
bin/data/back04.jpg


BIN
bin/data/click.wav


BIN
bin/data/emitter_diamond.zei


BIN
bin/data/emitter_fire00.zei


BIN
bin/data/emitter_fire01.zei


BIN
bin/data/emitter_fire02.zei


BIN
bin/data/emitter_rain.zei


BIN
bin/data/font-page0.png


BIN
bin/data/font.zfi


BIN
bin/data/ground.map


BIN
bin/data/ground.png


BIN
bin/data/miku.png


BIN
bin/data/music.ogg


BIN
bin/data/particle.png


BIN
bin/data/tiles.png


BIN
bin/data/tux_stand.png


BIN
bin/data/tux_walking.png


BIN
bin/data/video.ogv


BIN
bin/data/zengl.icns


BIN
bin/data/zengl.ico


BIN
bin/data/zengl.png


BIN
bin/data/zengl.zip


BIN
bin/i386-linux/libchipmunk.so.5.3.2


BIN
bin/i386-win32/chipmunk.dll


BIN
bin/i386-win32/libmodplug.dll


BIN
bin/i386-win32/libogg-0.dll


BIN
bin/i386-win32/libtheoradec-1.dll


BIN
bin/i386-win32/libvorbis-0.dll


BIN
bin/i386-win32/libvorbisfile-3.dll


BIN
bin/libchipmunk.5.3.2.dylib


BIN
bin/libmodplug.dylib


BIN
bin/x86_64-linux/libchipmunk.so.5.3.2


BIN
bin/x86_64-win64/chipmunk.dll


BIN
bin/x86_64-win64/libmodplug.dll


BIN
bin/x86_64-win64/libogg-0.dll


BIN
bin/x86_64-win64/libtheoradec-1.dll


BIN
bin/x86_64-win64/libvorbis-0.dll


BIN
bin/x86_64-win64/libvorbisfile-3.dll


+ 8 - 0
demos/Android/01 - Initialization/.classpath

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="gen"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+	<classpathentry kind="output" path="bin/classes"/>
+</classpath>

+ 33 - 0
demos/Android/01 - Initialization/.project

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>01 - Initialization</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

+ 25 - 0
demos/Android/01 - Initialization/AndroidManifest.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="zengl.demo01"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk android:minSdkVersion="7" />
+
+    <application
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name" >
+        <activity
+            android:name=".Demo01Activity"
+            android:label="@string/app_name"
+            android:configChanges="screenLayout|orientation|keyboardHidden|fontScale"
+            android:screenOrientation="landscape" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

+ 3 - 0
demos/Android/01 - Initialization/bin/jarlist.cache

@@ -0,0 +1,3 @@
+# cache for current jar dependecy. DO NOT EDIT.
+# format is <lastModified> <length> <SHA-1> <path>
+# Encoding is UTF-8

+ 81 - 0
demos/Android/01 - Initialization/jni/demo01.lpr

@@ -0,0 +1,81 @@
+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_main,
+  zgl_screen,
+  zgl_window,
+  zgl_timers,
+  zgl_utils
+  ;
+
+var
+  DirApp  : UTF8String;
+  DirHome : UTF8String;
+
+procedure Init;
+begin
+  // RU: Тут можно выполнять загрузку основных ресурсов.
+  // EN: Here can be loading of main resources.
+end;
+
+procedure Draw;
+begin
+  // RU: Тут "рисуем" что угодно :)
+  // EN: Here "draw" anything :)
+end;
+
+procedure Update( dt : Double );
+begin
+  // 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 Timer;
+begin
+  //
+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.
+  timer_Add( @Timer, 1000 );
+
+  // 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 );
+  // RU: Регистрируем процедуру, которая будет принимать разницу времени между кадрами.
+  // EN: Register the procedure, that will get delta time between the frames.
+  zgl_Reg( SYS_UPDATE, @Update );
+
+  // RU: Указываем первоначальные настройки.
+  // EN: Set screen options.
+  scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
+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}
+
+Begin
+End.

+ 113 - 0
demos/Android/01 - Initialization/jni/demo01_linux.lpi

@@ -0,0 +1,113 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="9"/>
+    <General>
+      <Flags>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <UseAppBundle Value="False"/>
+      <ResourceType Value="res"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <VersionInfo>
+      <StringTable ProductVersion=""/>
+    </VersionInfo>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+      <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+    </PublishOptions>
+    <RunParams>
+      <local>
+        <FormatVersion Value="1"/>
+      </local>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo01.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="demo01"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../libs/armeabi/demo01"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../../headers;../../../../headers/android"/>
+      <Libraries Value="../libs/armeabi"/>
+      <OtherUnitFiles Value="../../../../headers;../../../../extra;../../../../src;../../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../../lib/msvcrt/$(TargetCPU);../../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../../lib/zip/$(TargetCPU)-$(TargetOS)"/>
+      <UnitOutputDirectory Value="tmp"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+      <TargetCPU Value="arm"/>
+      <TargetOS Value="linux"/>
+      <Optimizations>
+        <OptimizationLevel Value="3"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <GenerateDebugInfo Value="False"/>
+        <UseLineInfoUnit Value="False"/>
+        <StripSymbols Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+      <Options>
+        <ExecutableType Value="Library"/>
+      </Options>
+    </Linking>
+    <Other>
+      <Verbosity>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+        <ShowGenInfo Value="False"/>
+      </Verbosity>
+      <CompilerMessages>
+        <UseMsgFile Value="True"/>
+      </CompilerMessages>
+      <CustomOptions Value="-CpARMv6
+-CfVFPv2
+-Xd
+-XParm-linux-androideabi-
+-FD/opt/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin
+-Fu/opt/android-ndk/platforms/android-3/arch-arm/usr/lib
+-FL/opt/android-ndk/platforms/android-3/arch-arm/usr/lib/libdl.so"/>
+      <CompilerPath Value="$(CompPath)"/>
+      <ExecuteBefore>
+        <Command Value="sh linux_prebuild.sh"/>
+      </ExecuteBefore>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 113 - 0
demos/Android/01 - Initialization/jni/demo01_windows.lpi

@@ -0,0 +1,113 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="9"/>
+    <General>
+      <Flags>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <UseAppBundle Value="False"/>
+      <ResourceType Value="res"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <VersionInfo>
+      <StringTable ProductVersion=""/>
+    </VersionInfo>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+      <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+    </PublishOptions>
+    <RunParams>
+      <local>
+        <FormatVersion Value="1"/>
+      </local>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo01.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="demo01"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../libs/armeabi/demo01"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../../headers;../../../../headers/android"/>
+      <Libraries Value="../libs/armeabi"/>
+      <OtherUnitFiles Value="../../../../headers;../../../../extra;../../../../src;../../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../../lib/msvcrt/$(TargetCPU);../../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../../lib/zip/$(TargetCPU)-$(TargetOS)"/>
+      <UnitOutputDirectory Value="tmp"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+      <TargetCPU Value="arm"/>
+      <TargetOS Value="linux"/>
+      <Optimizations>
+        <OptimizationLevel Value="3"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <GenerateDebugInfo Value="False"/>
+        <UseLineInfoUnit Value="False"/>
+        <StripSymbols Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+      <Options>
+        <ExecutableType Value="Library"/>
+      </Options>
+    </Linking>
+    <Other>
+      <Verbosity>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+        <ShowGenInfo Value="False"/>
+      </Verbosity>
+      <CompilerMessages>
+        <UseMsgFile Value="True"/>
+      </CompilerMessages>
+      <CustomOptions Value="-CpARMv6
+-CfVFPv2
+-Xd
+-XParm-linux-androideabi-
+-FD$(LazarusDir)..\android-ndk-r8\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin
+-Fu$(LazarusDir)..\android-ndk-r8\platforms\android-3\arch-arm\usr\lib
+-FL$(LazarusDir)..\android-ndk-r8\platforms\android-3\arch-arm\usr\lib\libdl.so"/>
+      <CompilerPath Value="$(CompPath)"/>
+      <ExecuteBefore>
+        <Command Value="windows_prebuild.bat"/>
+      </ExecuteBefore>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 7 - 0
demos/Android/01 - Initialization/jni/linux_prebuild.sh

@@ -0,0 +1,7 @@
+# copy libraries
+cp ../../../../bin/Android/armv6/libzenjpeg.so ../libs/armeabi/
+cp ../../../../bin/Android/armv6/libopenal.so ../libs/armeabi/
+cp ../../../../bin/Android/armv6/libogg.so ../libs/armeabi/
+cp ../../../../bin/Android/armv6/libvorbis.so ../libs/armeabi/
+cp ../../../../bin/Android/armv6/libtheoradec.so ../libs/armeabi/
+cp ../../../../bin/Android/armv6/libchipmunk.so ../libs/armeabi/

+ 6 - 0
demos/Android/01 - Initialization/jni/windows_prebuild.bat

@@ -0,0 +1,6 @@
+copy ..\..\..\..\bin\Android\armv6\libzenjpeg.so ..\libs\armeabi\
+copy ..\..\..\..\bin\Android\armv6\libopenal.so ..\libs\armeabi\
+copy ..\..\..\..\bin\Android\armv6\libogg.so ..\libs\armeabi\
+copy ..\..\..\..\bin\Android\armv6\libvorbis.so ..\libs\armeabi\
+copy ..\..\..\..\bin\Android\armv6\libtheoradec.so ..\libs\armeabi\
+copy ..\..\..\..\bin\Android\armv6\libchipmunk.so ..\libs\armeabi\

+ 14 - 0
demos/Android/01 - Initialization/project.properties

@@ -0,0 +1,14 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-7

BIN
demos/Android/01 - Initialization/res/drawable-hdpi/ic_launcher.png


BIN
demos/Android/01 - Initialization/res/drawable-ldpi/ic_launcher.png


BIN
demos/Android/01 - Initialization/res/drawable-mdpi/ic_launcher.png


BIN
demos/Android/01 - Initialization/res/drawable-xhdpi/ic_launcher.png


+ 7 - 0
demos/Android/01 - Initialization/res/layout/main.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical" >
+
+</LinearLayout>

+ 6 - 0
demos/Android/01 - Initialization/res/values/strings.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">01 - Initialization</string>
+
+</resources>

+ 248 - 0
demos/Android/01 - Initialization/src/zengl/android/ZenGL.java

@@ -0,0 +1,248 @@
+/*
+ *  Copyright © Andrey Kemka aka Andru
+ *  mail: [email protected]
+ *  site: http://andru-kun.inf.ua
+ *
+ *  This file is part of ZenGL.
+ *
+ *  ZenGL is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as
+ *  published by the Free Software Foundation, either version 3 of
+ *  the License, or (at your option) any later version.
+ *
+ *  ZenGL is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with ZenGL. If not, see http://www.gnu.org/licenses/
+*/
+package zengl.android;
+
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.opengles.GL10;
+
+import android.app.Activity;
+import android.content.Context;
+import android.opengl.GLSurfaceView;
+import android.text.InputType;
+import android.view.*;
+import android.view.inputmethod.BaseInputConnection;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
+import android.view.inputmethod.InputMethodManager;
+
+public class ZenGL extends GLSurfaceView
+{
+	private native void Main();
+	private native void zglNativeInit( String AppDirectory, String HomeDirectory );
+	private native void zglNativeDestroy();
+	private native void zglNativeSurfaceCreated();
+	private native void zglNativeSurfaceChanged( int width, int height );
+	private native void zglNativeDrawFrame();
+	private native void zglNativeActivate( boolean Activate );
+	private native boolean zglNativeCloseQuery();
+	private native void zglNativeTouch( int ID, float X, float Y, float Pressure );
+	private native void zglNativeInputText( String Text );
+	private native void zglNativeBackspace();
+
+	private zglCRenderer Renderer;
+	private String SourceDir;
+	private String DataDir;
+	private InputMethodManager InputManager;
+
+	public ZenGL( Context context, String appName, String appSourceDir )
+	{
+		super( context );
+
+		System.loadLibrary( "zenjpeg" );
+		System.loadLibrary( "openal" );
+		System.loadLibrary( "ogg" );
+		System.loadLibrary( "vorbis" );
+		System.loadLibrary( "theoradec" );
+		System.loadLibrary( "chipmunk" );
+		System.loadLibrary( appName );
+
+		SourceDir = appSourceDir;
+		DataDir = context.getFilesDir().getAbsolutePath();
+		Renderer = new zglCRenderer();
+		setRenderer( Renderer );
+
+		InputManager = (InputMethodManager)context.getSystemService( Context.INPUT_METHOD_SERVICE );
+		setFocusableInTouchMode( true );
+
+		zglNativeInit( SourceDir, DataDir );
+		Main();
+	}
+
+	public Boolean onCloseQuery()
+	{
+		return zglNativeCloseQuery();
+	}
+
+	@Override
+	public void onPause()
+	{
+		if ( InputManager.isAcceptingText() )
+			HideKeyboard();
+
+		super.onPause();
+		zglNativeActivate( false );
+	}
+
+	@Override
+	public void onResume()
+	{
+		super.onResume();
+		zglNativeActivate( true );
+	}
+
+	@Override
+	public boolean onTouchEvent( MotionEvent event )
+	{
+		int action = event.getAction();
+		int actionType = action & MotionEvent.ACTION_MASK;
+
+		switch ( actionType )
+		{
+			case MotionEvent.ACTION_DOWN:
+			{
+				int count = event.getPointerCount();
+				for ( int i = 0; i < count; i++ )
+				{
+					int pointerID = event.getPointerId( i );
+					zglNativeTouch( pointerID, event.getX( i ), event.getY( i ), event.getPressure( i ) );
+				}
+				break;
+			}
+
+			case MotionEvent.ACTION_UP:
+			{
+				int count = event.getPointerCount();
+				for ( int i = 0; i < count; i++ )
+				{
+					int pointerID = event.getPointerId( i );
+					zglNativeTouch( pointerID, event.getX( i ), event.getY( i ), 0 );
+				}
+				break;
+			}
+
+			case MotionEvent.ACTION_MOVE:
+			{
+				int count = event.getPointerCount();
+				for ( int i = 0; i < count; i++ )
+				{
+					int pointerID = event.getPointerId( i );
+					zglNativeTouch( pointerID, event.getX( i ), event.getY( i ), event.getPressure( i ) );
+				}
+				break;
+			}
+
+			case MotionEvent.ACTION_POINTER_DOWN:
+			{
+				int pointerID = ( action & MotionEvent.ACTION_POINTER_ID_MASK ) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
+				int pointerIndex = event.getPointerId( pointerID );
+				zglNativeTouch( pointerID, event.getX( pointerIndex ), event.getY( pointerIndex ), event.getPressure( pointerIndex ) );
+				break;
+			}
+
+			case MotionEvent.ACTION_POINTER_UP:
+			{
+				int pointerID = ( action & MotionEvent.ACTION_POINTER_ID_MASK ) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
+				int pointerIndex = event.getPointerId( pointerID );
+				zglNativeTouch( pointerID, event.getX( pointerIndex ), event.getY( pointerIndex ), 0 );
+				break;
+			}
+		}
+
+		return true;
+	}
+
+	public void Finish()
+	{
+		zglNativeDestroy();
+		((Activity)getContext()).finish();
+		System.exit( 0 );
+	}
+
+	public void ShowKeyboard()
+	{
+		InputManager.toggleSoftInput( InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_NOT_ALWAYS );
+	}
+
+	public void HideKeyboard()
+	{
+		InputManager.hideSoftInputFromWindow( this.getWindowToken(), 0 );
+	}
+
+	@Override
+	public InputConnection onCreateInputConnection( EditorInfo outAttrs )
+	{
+	    outAttrs.actionLabel = "";
+	    outAttrs.hintText = "";
+	    outAttrs.initialCapsMode = 0;
+	    outAttrs.initialSelEnd = outAttrs.initialSelStart = -1;
+	    outAttrs.label = "";
+	    outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI;
+	    outAttrs.inputType = InputType.TYPE_NULL;
+
+		return new zglInputConnection( this, false );
+	}
+
+	@Override
+	public boolean onCheckIsTextEditor()
+	{
+		return true;
+	}
+
+	@Override
+	public boolean onKeyDown( int keyCode, KeyEvent event )
+	{
+		if ( keyCode == KeyEvent.KEYCODE_ENTER )
+			HideKeyboard();
+		else if ( keyCode == KeyEvent.KEYCODE_DEL )
+			zglNativeBackspace();
+
+		return super.onKeyDown( keyCode, event );
+	}
+
+	public boolean onBackPressed()
+	{
+		return zglNativeCloseQuery();
+	}
+
+	class zglCRenderer implements Renderer
+	{
+		public void onSurfaceCreated( GL10 gl, EGLConfig config )
+		{
+			zglNativeSurfaceCreated();
+		}
+
+		public void onSurfaceChanged( GL10 gl, int width, int height )
+		{
+			zglNativeSurfaceChanged( width, height );
+		}
+
+		public void onDrawFrame( GL10 gl )
+		{
+			zglNativeDrawFrame();
+		}
+	}
+
+	class zglInputConnection extends BaseInputConnection
+	{
+		public zglInputConnection( View targetView, boolean fullEditor )
+		{
+			super( targetView, fullEditor );
+		}
+
+		@Override
+		public boolean commitText( CharSequence text, int newCursorPosition )
+		{
+			zglNativeInputText( (String)text );
+
+			return true;
+		}
+	}
+}

+ 69 - 0
demos/Android/01 - Initialization/src/zengl/demo01/Demo01Activity.java

@@ -0,0 +1,69 @@
+package zengl.demo01;
+
+import zengl.android.ZenGL;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.Window;
+import android.view.WindowManager;
+
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Configuration;
+
+public class Demo01Activity extends Activity
+{
+	private ZenGL zengl;
+
+	public void onCreate( Bundle savedInstanceState )
+	{
+		super.onCreate( savedInstanceState );
+
+		// RU: полноэкранный режим
+		// EN: set fullscreen mode
+		this.requestWindowFeature( Window.FEATURE_NO_TITLE );
+		getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN );
+
+		// RU: получаем путь к apk
+		// EN: get path to apk
+		String appSourceDir = "";
+		try
+		{
+			appSourceDir = getPackageManager().getApplicationInfo( "zengl.demo01", 0 ).sourceDir;
+		}
+		catch ( NameNotFoundException e ) {}
+
+		// RU: создаём zglCGLSurfaceView, делаем его текущим и передаём имя pascal-библиотеки
+		// EN: create new zglCGLSurfaceView, make it as a current view and pass name of pascal library
+		zengl = new ZenGL( this, "demo01", appSourceDir );
+		setContentView( zengl );
+	}
+
+	@Override
+	public void onPause()
+	{
+		if ( zengl != null )
+			zengl.onPause();
+		super.onPause();
+	}
+
+	@Override
+	public void onResume()
+	{
+		if ( zengl != null )
+			zengl.onResume();
+		super.onResume();
+	}
+
+	@Override
+	public void onBackPressed()
+	{
+		if ( zengl.onBackPressed() )
+			super.onBackPressed();
+	}	
+	
+	@Override
+	public void onConfigurationChanged( Configuration newConfig )
+	{
+		super.onConfigurationChanged( newConfig );
+	}
+}

+ 8 - 0
demos/Android/02 - Resources/.classpath

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="gen"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+	<classpathentry kind="output" path="bin/classes"/>
+</classpath>

+ 33 - 0
demos/Android/02 - Resources/.project

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>02 - Resources</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

+ 25 - 0
demos/Android/02 - Resources/AndroidManifest.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="zengl.demo02"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk android:minSdkVersion="7" />
+
+    <application
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name" >
+        <activity
+            android:name=".Demo02Activity"
+            android:label="@string/app_name"
+            android:configChanges="screenLayout|orientation|keyboardHidden|fontScale"
+            android:screenOrientation="landscape" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

+ 3 - 0
demos/Android/02 - Resources/bin/jarlist.cache

@@ -0,0 +1,3 @@
+# cache for current jar dependecy. DO NOT EDIT.
+# format is <lastModified> <length> <SHA-1> <path>
+# Encoding is UTF-8

+ 136 - 0
demos/Android/02 - Resources/jni/demo02.lpr

@@ -0,0 +1,136 @@
+library demo02;
+
+{$I zglCustomConfig.cfg}
+
+uses
+  zgl_application,
+  zgl_types,
+  zgl_main,
+  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
+  ;
+
+var
+  dirRes : UTF8String = 'assets/';
+
+  memory : zglTMemory;
+
+  // RU: У каждого ресурса есть свой определённый тип, который является указателем на структуру.
+  // EN: Every resource has its own typem which is just a pointer to structure.
+  fntMain  : zglPFont;
+  //
+  texLogo  : zglPTexture;
+  texTest  : zglPTexture;
+  //
+  sndClick : zglPSound;
+  sndMusic : zglPSound;
+
+  resLoaded : Boolean;
+
+procedure TextureCalcEffect( pData : PByteArray; Width, Height : Word );
+begin
+  u_Sleep( 1000 );
+end;
+
+procedure Init;
+  var
+    i : Integer;
+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( TEX_CURRENT_EFFECT, @TextureCalcEffect );
+  for i := 0 to 3 do
+      texTest  := tex_LoadFromFile( dirRes + 'back01.jpg', TEX_NO_COLORKEY, TEX_DEFAULT_2D or TEX_CUSTOM_EFFECT );
+  file_CloseArchive();
+  res_EndQueue();
+end;
+
+procedure Draw;
+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, 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' );
+end;
+
+procedure Java_zengl_android_ZenGL_Main( var env; var thiz ); cdecl;
+begin
+  zgl_Reg( SYS_LOAD, @Init );
+  zgl_Reg( SYS_DRAW, @Draw );
+
+  scr_SetOptions( 800, 600, REFRESH_MAXIMUM, TRUE, TRUE );
+end;
+
+exports
+  Java_zengl_android_ZenGL_Main,
+  {$I android_export.inc}
+
+Begin
+End.

+ 113 - 0
demos/Android/02 - Resources/jni/demo02_linux.lpi

@@ -0,0 +1,113 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="9"/>
+    <General>
+      <Flags>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <UseAppBundle Value="False"/>
+      <ResourceType Value="res"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <VersionInfo>
+      <StringTable ProductVersion=""/>
+    </VersionInfo>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+      <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+    </PublishOptions>
+    <RunParams>
+      <local>
+        <FormatVersion Value="1"/>
+      </local>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo02.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="demo02"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../libs/armeabi/demo02"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../../headers;../../../../headers/android"/>
+      <Libraries Value="../libs/armeabi"/>
+      <OtherUnitFiles Value="../../../../headers;../../../../extra;../../../../src;../../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../../lib/msvcrt/$(TargetCPU);../../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../../lib/zip/$(TargetCPU)-$(TargetOS)"/>
+      <UnitOutputDirectory Value="tmp"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+      <TargetCPU Value="arm"/>
+      <TargetOS Value="linux"/>
+      <Optimizations>
+        <OptimizationLevel Value="3"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <GenerateDebugInfo Value="False"/>
+        <UseLineInfoUnit Value="False"/>
+        <StripSymbols Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+      <Options>
+        <ExecutableType Value="Library"/>
+      </Options>
+    </Linking>
+    <Other>
+      <Verbosity>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+        <ShowGenInfo Value="False"/>
+      </Verbosity>
+      <CompilerMessages>
+        <UseMsgFile Value="True"/>
+      </CompilerMessages>
+      <CustomOptions Value="-CpARMv6
+-CfVFPv2
+-Xd
+-XParm-linux-androideabi-
+-FD/opt/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin
+-Fu/opt/android-ndk/platforms/android-3/arch-arm/usr/lib
+-FL/opt/android-ndk/platforms/android-3/arch-arm/usr/lib/libdl.so"/>
+      <CompilerPath Value="$(CompPath)"/>
+      <ExecuteBefore>
+        <Command Value="sh linux_prebuild.sh"/>
+      </ExecuteBefore>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 113 - 0
demos/Android/02 - Resources/jni/demo02_windows.lpi

@@ -0,0 +1,113 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="9"/>
+    <General>
+      <Flags>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <UseAppBundle Value="False"/>
+      <ResourceType Value="res"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <VersionInfo>
+      <StringTable ProductVersion=""/>
+    </VersionInfo>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+      <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+    </PublishOptions>
+    <RunParams>
+      <local>
+        <FormatVersion Value="1"/>
+      </local>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo02.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="demo02"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../libs/armeabi/demo02"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../../headers;../../../../headers/android"/>
+      <Libraries Value="../libs/armeabi"/>
+      <OtherUnitFiles Value="../../../../headers;../../../../extra;../../../../src;../../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../../lib/msvcrt/$(TargetCPU);../../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../../lib/zip/$(TargetCPU)-$(TargetOS)"/>
+      <UnitOutputDirectory Value="tmp"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+      <TargetCPU Value="arm"/>
+      <TargetOS Value="linux"/>
+      <Optimizations>
+        <OptimizationLevel Value="3"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <GenerateDebugInfo Value="False"/>
+        <UseLineInfoUnit Value="False"/>
+        <StripSymbols Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+      <Options>
+        <ExecutableType Value="Library"/>
+      </Options>
+    </Linking>
+    <Other>
+      <Verbosity>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+        <ShowGenInfo Value="False"/>
+      </Verbosity>
+      <CompilerMessages>
+        <UseMsgFile Value="True"/>
+      </CompilerMessages>
+      <CustomOptions Value="-CpARMv6
+-CfVFPv2
+-Xd
+-XParm-linux-androideabi-
+-FD$(LazarusDir)..\android-ndk-r8\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin
+-Fu$(LazarusDir)..\android-ndk-r8\platforms\android-3\arch-arm\usr\lib
+-FL$(LazarusDir)..\android-ndk-r8\platforms\android-3\arch-arm\usr\lib\libdl.so"/>
+      <CompilerPath Value="$(CompPath)"/>
+      <ExecuteBefore>
+        <Command Value="windows_prebuild.bat"/>
+      </ExecuteBefore>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 12 - 0
demos/Android/02 - Resources/jni/linux_prebuild.sh

@@ -0,0 +1,12 @@
+# copy libraries
+cp ../../../../bin/Android/armv6/libzenjpeg.so ../libs/armeabi/
+cp ../../../../bin/Android/armv6/libopenal.so ../libs/armeabi/
+cp ../../../../bin/Android/armv6/libogg.so ../libs/armeabi/
+cp ../../../../bin/Android/armv6/libvorbis.so ../libs/armeabi/
+cp ../../../../bin/Android/armv6/libtheoradec.so ../libs/armeabi/
+cp ../../../../bin/Android/armv6/libchipmunk.so ../libs/armeabi/
+# copy resources
+cp ../../../../bin/data/font* ../assets
+cp ../../../../bin/data/zengl.png ../assets
+cp ../../../../bin/data/click.wav ../assets
+cp ../../../../bin/data/back01.jpg ../assets

+ 11 - 0
demos/Android/02 - Resources/jni/windows_prebuild.bat

@@ -0,0 +1,11 @@
+copy ..\..\..\..\bin\Android\armv6\libzenjpeg.so ..\libs\armeabi\
+copy ..\..\..\..\bin\Android\armv6\libopenal.so ..\libs\armeabi\
+copy ..\..\..\..\bin\Android\armv6\libogg.so ..\libs\armeabi\
+copy ..\..\..\..\bin\Android\armv6\libvorbis.so ..\libs\armeabi\
+copy ..\..\..\..\bin\Android\armv6\libtheoradec.so ..\libs\armeabi\
+copy ..\..\..\..\bin\Android\armv6\libchipmunk.so ..\libs\armeabi\
+
+copy ..\..\..\..\bin\data\font* ..\assets
+copy ..\..\..\..\bin\data\zengl.png ..\assets
+copy ..\..\..\..\bin\data\click.wav ..\assets
+copy ..\..\..\..\bin\data\back01.jpg ..\assets

+ 14 - 0
demos/Android/02 - Resources/project.properties

@@ -0,0 +1,14 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must be checked in Version Control Systems.
+#
+# To customize properties used by the Ant build system edit
+# "ant.properties", and override values to adapt the script to your
+# project structure.
+#
+# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
+#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
+
+# Project target.
+target=android-7

BIN
demos/Android/02 - Resources/res/drawable-hdpi/ic_launcher.png


BIN
demos/Android/02 - Resources/res/drawable-ldpi/ic_launcher.png


BIN
demos/Android/02 - Resources/res/drawable-mdpi/ic_launcher.png


BIN
demos/Android/02 - Resources/res/drawable-xhdpi/ic_launcher.png


+ 7 - 0
demos/Android/02 - Resources/res/layout/main.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="vertical" >
+
+</LinearLayout>

+ 6 - 0
demos/Android/02 - Resources/res/values/strings.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">02 - Resources</string>
+
+</resources>

+ 248 - 0
demos/Android/02 - Resources/src/zengl/android/ZenGL.java

@@ -0,0 +1,248 @@
+/*
+ *  Copyright © Andrey Kemka aka Andru
+ *  mail: [email protected]
+ *  site: http://andru-kun.inf.ua
+ *
+ *  This file is part of ZenGL.
+ *
+ *  ZenGL is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU Lesser General Public License as
+ *  published by the Free Software Foundation, either version 3 of
+ *  the License, or (at your option) any later version.
+ *
+ *  ZenGL is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Lesser General Public License for more details.
+ *
+ *  You should have received a copy of the GNU Lesser General Public
+ *  License along with ZenGL. If not, see http://www.gnu.org/licenses/
+*/
+package zengl.android;
+
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.opengles.GL10;
+
+import android.app.Activity;
+import android.content.Context;
+import android.opengl.GLSurfaceView;
+import android.text.InputType;
+import android.view.*;
+import android.view.inputmethod.BaseInputConnection;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
+import android.view.inputmethod.InputMethodManager;
+
+public class ZenGL extends GLSurfaceView
+{
+	private native void Main();
+	private native void zglNativeInit( String AppDirectory, String HomeDirectory );
+	private native void zglNativeDestroy();
+	private native void zglNativeSurfaceCreated();
+	private native void zglNativeSurfaceChanged( int width, int height );
+	private native void zglNativeDrawFrame();
+	private native void zglNativeActivate( boolean Activate );
+	private native boolean zglNativeCloseQuery();
+	private native void zglNativeTouch( int ID, float X, float Y, float Pressure );
+	private native void zglNativeInputText( String Text );
+	private native void zglNativeBackspace();
+
+	private zglCRenderer Renderer;
+	private String SourceDir;
+	private String DataDir;
+	private InputMethodManager InputManager;
+
+	public ZenGL( Context context, String appName, String appSourceDir )
+	{
+		super( context );
+
+		System.loadLibrary( "zenjpeg" );
+		System.loadLibrary( "openal" );
+		System.loadLibrary( "ogg" );
+		System.loadLibrary( "vorbis" );
+		System.loadLibrary( "theoradec" );
+		System.loadLibrary( "chipmunk" );
+		System.loadLibrary( appName );
+
+		SourceDir = appSourceDir;
+		DataDir = context.getFilesDir().getAbsolutePath();
+		Renderer = new zglCRenderer();
+		setRenderer( Renderer );
+
+		InputManager = (InputMethodManager)context.getSystemService( Context.INPUT_METHOD_SERVICE );
+		setFocusableInTouchMode( true );
+
+		zglNativeInit( SourceDir, DataDir );
+		Main();
+	}
+
+	public Boolean onCloseQuery()
+	{
+		return zglNativeCloseQuery();
+	}
+
+	@Override
+	public void onPause()
+	{
+		if ( InputManager.isAcceptingText() )
+			HideKeyboard();
+
+		super.onPause();
+		zglNativeActivate( false );
+	}
+
+	@Override
+	public void onResume()
+	{
+		super.onResume();
+		zglNativeActivate( true );
+	}
+
+	@Override
+	public boolean onTouchEvent( MotionEvent event )
+	{
+		int action = event.getAction();
+		int actionType = action & MotionEvent.ACTION_MASK;
+
+		switch ( actionType )
+		{
+			case MotionEvent.ACTION_DOWN:
+			{
+				int count = event.getPointerCount();
+				for ( int i = 0; i < count; i++ )
+				{
+					int pointerID = event.getPointerId( i );
+					zglNativeTouch( pointerID, event.getX( i ), event.getY( i ), event.getPressure( i ) );
+				}
+				break;
+			}
+
+			case MotionEvent.ACTION_UP:
+			{
+				int count = event.getPointerCount();
+				for ( int i = 0; i < count; i++ )
+				{
+					int pointerID = event.getPointerId( i );
+					zglNativeTouch( pointerID, event.getX( i ), event.getY( i ), 0 );
+				}
+				break;
+			}
+
+			case MotionEvent.ACTION_MOVE:
+			{
+				int count = event.getPointerCount();
+				for ( int i = 0; i < count; i++ )
+				{
+					int pointerID = event.getPointerId( i );
+					zglNativeTouch( pointerID, event.getX( i ), event.getY( i ), event.getPressure( i ) );
+				}
+				break;
+			}
+
+			case MotionEvent.ACTION_POINTER_DOWN:
+			{
+				int pointerID = ( action & MotionEvent.ACTION_POINTER_ID_MASK ) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
+				int pointerIndex = event.getPointerId( pointerID );
+				zglNativeTouch( pointerID, event.getX( pointerIndex ), event.getY( pointerIndex ), event.getPressure( pointerIndex ) );
+				break;
+			}
+
+			case MotionEvent.ACTION_POINTER_UP:
+			{
+				int pointerID = ( action & MotionEvent.ACTION_POINTER_ID_MASK ) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
+				int pointerIndex = event.getPointerId( pointerID );
+				zglNativeTouch( pointerID, event.getX( pointerIndex ), event.getY( pointerIndex ), 0 );
+				break;
+			}
+		}
+
+		return true;
+	}
+
+	public void Finish()
+	{
+		zglNativeDestroy();
+		((Activity)getContext()).finish();
+		System.exit( 0 );
+	}
+
+	public void ShowKeyboard()
+	{
+		InputManager.toggleSoftInput( InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_NOT_ALWAYS );
+	}
+
+	public void HideKeyboard()
+	{
+		InputManager.hideSoftInputFromWindow( this.getWindowToken(), 0 );
+	}
+
+	@Override
+	public InputConnection onCreateInputConnection( EditorInfo outAttrs )
+	{
+	    outAttrs.actionLabel = "";
+	    outAttrs.hintText = "";
+	    outAttrs.initialCapsMode = 0;
+	    outAttrs.initialSelEnd = outAttrs.initialSelStart = -1;
+	    outAttrs.label = "";
+	    outAttrs.imeOptions = EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI;
+	    outAttrs.inputType = InputType.TYPE_NULL;
+
+		return new zglInputConnection( this, false );
+	}
+
+	@Override
+	public boolean onCheckIsTextEditor()
+	{
+		return true;
+	}
+
+	@Override
+	public boolean onKeyDown( int keyCode, KeyEvent event )
+	{
+		if ( keyCode == KeyEvent.KEYCODE_ENTER )
+			HideKeyboard();
+		else if ( keyCode == KeyEvent.KEYCODE_DEL )
+			zglNativeBackspace();
+
+		return super.onKeyDown( keyCode, event );
+	}
+
+	public boolean onBackPressed()
+	{
+		return zglNativeCloseQuery();
+	}
+
+	class zglCRenderer implements Renderer
+	{
+		public void onSurfaceCreated( GL10 gl, EGLConfig config )
+		{
+			zglNativeSurfaceCreated();
+		}
+
+		public void onSurfaceChanged( GL10 gl, int width, int height )
+		{
+			zglNativeSurfaceChanged( width, height );
+		}
+
+		public void onDrawFrame( GL10 gl )
+		{
+			zglNativeDrawFrame();
+		}
+	}
+
+	class zglInputConnection extends BaseInputConnection
+	{
+		public zglInputConnection( View targetView, boolean fullEditor )
+		{
+			super( targetView, fullEditor );
+		}
+
+		@Override
+		public boolean commitText( CharSequence text, int newCursorPosition )
+		{
+			zglNativeInputText( (String)text );
+
+			return true;
+		}
+	}
+}

+ 69 - 0
demos/Android/02 - Resources/src/zengl/demo02/Demo02Activity.java

@@ -0,0 +1,69 @@
+package zengl.demo02;
+
+import zengl.android.ZenGL;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.Window;
+import android.view.WindowManager;
+
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Configuration;
+
+public class Demo02Activity extends Activity
+{
+	private ZenGL zengl;
+
+	public void onCreate( Bundle savedInstanceState )
+	{
+		super.onCreate( savedInstanceState );
+
+		// RU: полноэкранный режим
+		// EN: set fullscreen mode
+		this.requestWindowFeature( Window.FEATURE_NO_TITLE );
+		getWindow().setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN );
+
+		// RU: получаем путь к apk
+		// EN: get path to apk
+		String appSourceDir = "";
+		try
+		{
+			appSourceDir = getPackageManager().getApplicationInfo( "zengl.demo02", 0 ).sourceDir;
+		}
+		catch ( NameNotFoundException e ) {}
+
+		// RU: создаём zglCGLSurfaceView, делаем его текущим и передаём имя pascal-библиотеки
+		// EN: create new zglCGLSurfaceView, make it as a current view and pass name of pascal library
+		zengl = new ZenGL( this, "demo02", appSourceDir );
+		setContentView( zengl );
+	}
+
+	@Override
+	public void onPause()
+	{
+		if ( zengl != null )
+			zengl.onPause();
+		super.onPause();
+	}
+
+	@Override
+	public void onResume()
+	{
+		if ( zengl != null )
+			zengl.onResume();
+		super.onResume();
+	}
+
+	@Override
+	public void onBackPressed()
+	{
+		if ( zengl.onBackPressed() )
+			super.onBackPressed();
+	}	
+	
+	@Override
+	public void onConfigurationChanged( Configuration newConfig )
+	{
+		super.onConfigurationChanged( newConfig );
+	}
+}

+ 8 - 0
demos/Android/03 - Input/.classpath

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="gen"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
+	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
+	<classpathentry kind="output" path="bin/classes"/>
+</classpath>

+ 33 - 0
demos/Android/03 - Input/.project

@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>03 - Input</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

+ 25 - 0
demos/Android/03 - Input/AndroidManifest.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="zengl.demo03"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk android:minSdkVersion="7" />
+
+    <application
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name" >
+        <activity
+            android:name=".Demo03Activity"
+            android:label="@string/app_name"
+            android:configChanges="screenLayout|orientation|keyboardHidden|fontScale"
+            android:screenOrientation="landscape" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest>

+ 3 - 0
demos/Android/03 - Input/bin/jarlist.cache

@@ -0,0 +1,3 @@
+# cache for current jar dependecy. DO NOT EDIT.
+# format is <lastModified> <length> <SHA-1> <path>
+# Encoding is UTF-8

+ 123 - 0
demos/Android/03 - Input/jni/demo03.lpr

@@ -0,0 +1,123 @@
+library demo03;
+
+{$I zglCustomConfig.cfg}
+
+uses
+  zgl_application,
+  zgl_main,
+  zgl_file,
+  zgl_screen,
+  zgl_window,
+  zgl_timers,
+  zgl_touch,
+  zgl_keyboard,
+  zgl_primitives_2d,
+  zgl_font,
+  zgl_text,
+  zgl_textures_png,
+  zgl_math_2d,
+  zgl_collision_2d,
+  zgl_utils
+  ;
+
+var
+  dirRes  : UTF8String = 'assets/';
+
+  fntMain   : zglPFont;
+
+  userInput  : UTF8String;
+  trackInput : Boolean;
+  inputRect  : zglTRect;
+  lineAlpha  : Byte;
+
+procedure Init;
+begin
+  zgl_Enable( CORRECT_RESOLUTION );
+  scr_CorrectResolution( 800, 600 );
+
+  file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
+
+  fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
+
+  file_CloseArchive();
+
+  inputRect.X := 400 - 192;
+  inputRect.Y := 300 - 100 - 32;
+  inputRect.W := 384;
+  inputRect.H := 96;
+end;
+
+procedure Draw;
+  var
+    w : Single;
+begin
+  text_Draw( fntMain, 0, 0, 'Escape - Exit' );
+
+  // RU: Координаты "пальцев" можно получить при помощи функций touch_X и touch_Y.
+  // EN: "Finger" coordinates can be got using functions touch_X and touch_Y.
+  text_Draw( fntMain, 0, 16, 'First finger X, Y: ' + u_IntToStr( touch_X( 0 ) ) + '; ' + u_IntToStr( touch_Y( 0 ) ) );
+  text_Draw( fntMain, 0, 32, 'Second finger X, Y: ' + u_IntToStr( touch_X( 1 ) ) + '; ' + u_IntToStr( touch_Y( 1 ) ) );
+
+  // RU: Выводим введённый пользователем текст.
+  // EN: Show the inputted text.
+  pr2d_Rect( inputRect.X, inputRect.Y, inputRect.W, inputRect.H, $FFFFFF, 255 );
+  if trackInput Then
+    begin
+      text_Draw( fntMain, 400, 300 - 100, 'Press Done to stop track text input:', TEXT_HALIGN_CENTER );
+      w := text_GetWidth( fntMain, userInput );
+      pr2d_Rect( 400 + w / 2 + 2, 300 - 70, 10, 20, $FFFFFF, lineAlpha, PR2D_FILL );
+    end else
+      text_Draw( fntMain, 400, 300 - 100, 'Tap here to enter text(maximum - 24 symbols):', TEXT_HALIGN_CENTER );
+  text_Draw( fntMain, 400, 300 - 70, userInput, TEXT_HALIGN_CENTER );
+end;
+
+procedure Timer;
+begin
+  if lineAlpha > 5 Then
+    DEC( lineAlpha, 10 )
+  else
+    lineAlpha := 255;
+
+  // RU: Проверить тапнул ли пользователь в пределах inputRect и начать отслеживать ввод текста.
+  // EN: Check if there was tap inside inputRect and start to track text input.
+  if touch_Tap( 0 ) and col2d_PointInRect( touch_X( 0 ), touch_Y( 0 ), inputRect ) Then
+    begin
+      trackInput := TRUE;
+      key_BeginReadText( userInput, 24 );
+    end;
+
+  // RU: Если была нажата кнопка Done прекращаем отслеживать ввод текста.
+  // EN: Finish to track text input if Done was pressed.
+  if key_Press( K_ENTER ) Then
+    begin
+      trackInput := FALSE;
+      key_EndReadText();
+    end;
+
+  // RU: Получаем введённый пользователем текст.
+  // EN: Get inputted by user text.
+  if trackInput Then
+    userInput := key_GetText();
+
+  // RU: Обязательно очищаем состояния всех подсистем ввода.
+  // EN: Necessarily clear all the states of input subsystems.
+  touch_ClearState();
+  key_ClearState();
+end;
+
+procedure Java_zengl_android_ZenGL_Main( var env; var thiz ); cdecl;
+begin
+  timer_Add( @Timer, 16 );
+
+  zgl_Reg( SYS_LOAD, @Init );
+  zgl_Reg( SYS_DRAW, @Draw );
+
+  scr_SetOptions( 800, 600, REFRESH_MAXIMUM, TRUE, TRUE );
+end;
+
+exports
+  Java_zengl_android_ZenGL_Main,
+  {$I android_export.inc}
+
+Begin
+End.

+ 113 - 0
demos/Android/03 - Input/jni/demo03_linux.lpi

@@ -0,0 +1,113 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="9"/>
+    <General>
+      <Flags>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <UseAppBundle Value="False"/>
+      <ResourceType Value="res"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <VersionInfo>
+      <StringTable ProductVersion=""/>
+    </VersionInfo>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+      <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+    </PublishOptions>
+    <RunParams>
+      <local>
+        <FormatVersion Value="1"/>
+      </local>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo03.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="demo03"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../libs/armeabi/demo03"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../../headers;../../../../headers/android"/>
+      <Libraries Value="../libs/armeabi"/>
+      <OtherUnitFiles Value="../../../../headers;../../../../extra;../../../../src;../../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../../lib/msvcrt/$(TargetCPU);../../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../../lib/zip/$(TargetCPU)-$(TargetOS)"/>
+      <UnitOutputDirectory Value="tmp"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+      <TargetCPU Value="arm"/>
+      <TargetOS Value="linux"/>
+      <Optimizations>
+        <OptimizationLevel Value="3"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <GenerateDebugInfo Value="False"/>
+        <UseLineInfoUnit Value="False"/>
+        <StripSymbols Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+      <Options>
+        <ExecutableType Value="Library"/>
+      </Options>
+    </Linking>
+    <Other>
+      <Verbosity>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+        <ShowGenInfo Value="False"/>
+      </Verbosity>
+      <CompilerMessages>
+        <UseMsgFile Value="True"/>
+      </CompilerMessages>
+      <CustomOptions Value="-CpARMv6
+-CfVFPv2
+-Xd
+-XParm-linux-androideabi-
+-FD/opt/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin
+-Fu/opt/android-ndk/platforms/android-3/arch-arm/usr/lib
+-FL/opt/android-ndk/platforms/android-3/arch-arm/usr/lib/libdl.so"/>
+      <CompilerPath Value="$(CompPath)"/>
+      <ExecuteBefore>
+        <Command Value="sh linux_prebuild.sh"/>
+      </ExecuteBefore>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

+ 113 - 0
demos/Android/03 - Input/jni/demo03_windows.lpi

@@ -0,0 +1,113 @@
+<?xml version="1.0"?>
+<CONFIG>
+  <ProjectOptions>
+    <Version Value="9"/>
+    <General>
+      <Flags>
+        <SaveOnlyProjectUnits Value="True"/>
+        <MainUnitHasCreateFormStatements Value="False"/>
+        <MainUnitHasTitleStatement Value="False"/>
+      </Flags>
+      <SessionStorage Value="InProjectDir"/>
+      <MainUnit Value="0"/>
+      <UseAppBundle Value="False"/>
+      <ResourceType Value="res"/>
+    </General>
+    <i18n>
+      <EnableI18N LFM="False"/>
+    </i18n>
+    <VersionInfo>
+      <StringTable ProductVersion=""/>
+    </VersionInfo>
+    <BuildModes Count="1">
+      <Item1 Name="Default" Default="True"/>
+    </BuildModes>
+    <PublishOptions>
+      <Version Value="2"/>
+      <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+      <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
+    </PublishOptions>
+    <RunParams>
+      <local>
+        <FormatVersion Value="1"/>
+      </local>
+    </RunParams>
+    <Units Count="1">
+      <Unit0>
+        <Filename Value="demo03.lpr"/>
+        <IsPartOfProject Value="True"/>
+        <UnitName Value="demo03"/>
+      </Unit0>
+    </Units>
+  </ProjectOptions>
+  <CompilerOptions>
+    <Version Value="11"/>
+    <Target>
+      <Filename Value="../libs/armeabi/demo03"/>
+    </Target>
+    <SearchPaths>
+      <IncludeFiles Value="$(ProjOutDir);../../../../headers;../../../../headers/android"/>
+      <Libraries Value="../libs/armeabi"/>
+      <OtherUnitFiles Value="../../../../headers;../../../../extra;../../../../src;../../../../lib/jpeg/$(TargetCPU)-$(TargetOS);../../../../lib/msvcrt/$(TargetCPU);../../../../lib/ogg/$(TargetCPU)-$(TargetOS);../../../../lib/theora/$(TargetCPU)-$(TargetOS);../../../../lib/zlib/$(TargetCPU)-$(TargetOS);../../../../lib/zip/$(TargetCPU)-$(TargetOS)"/>
+      <UnitOutputDirectory Value="tmp"/>
+    </SearchPaths>
+    <Parsing>
+      <SyntaxOptions>
+        <SyntaxMode Value="Delphi"/>
+      </SyntaxOptions>
+    </Parsing>
+    <CodeGeneration>
+      <SmartLinkUnit Value="True"/>
+      <TargetCPU Value="arm"/>
+      <TargetOS Value="linux"/>
+      <Optimizations>
+        <OptimizationLevel Value="3"/>
+      </Optimizations>
+    </CodeGeneration>
+    <Linking>
+      <Debugging>
+        <GenerateDebugInfo Value="False"/>
+        <UseLineInfoUnit Value="False"/>
+        <StripSymbols Value="True"/>
+      </Debugging>
+      <LinkSmart Value="True"/>
+      <Options>
+        <ExecutableType Value="Library"/>
+      </Options>
+    </Linking>
+    <Other>
+      <Verbosity>
+        <ShowNotes Value="False"/>
+        <ShowHints Value="False"/>
+        <ShowGenInfo Value="False"/>
+      </Verbosity>
+      <CompilerMessages>
+        <UseMsgFile Value="True"/>
+      </CompilerMessages>
+      <CustomOptions Value="-CpARMv6
+-CfVFPv2
+-Xd
+-XParm-linux-androideabi-
+-FD$(LazarusDir)..\android-ndk-r8\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin
+-Fu$(LazarusDir)..\android-ndk-r8\platforms\android-3\arch-arm\usr\lib
+-FL$(LazarusDir)..\android-ndk-r8\platforms\android-3\arch-arm\usr\lib\libdl.so"/>
+      <CompilerPath Value="$(CompPath)"/>
+      <ExecuteBefore>
+        <Command Value="windows_prebuild.bat"/>
+      </ExecuteBefore>
+    </Other>
+  </CompilerOptions>
+  <Debugging>
+    <Exceptions Count="3">
+      <Item1>
+        <Name Value="EAbort"/>
+      </Item1>
+      <Item2>
+        <Name Value="ECodetoolError"/>
+      </Item2>
+      <Item3>
+        <Name Value="EFOpenError"/>
+      </Item3>
+    </Exceptions>
+  </Debugging>
+</CONFIG>

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels