Hedgeroid_explained.wiki
changeset 682 cc2971fe7264
parent 127 5548319002e9
child 762 5d1d8c47e2c1
equal deleted inserted replaced
681:ce0819a5ec57 682:cc2971fe7264
     2 
     2 
     3 Hedgewars for Android has several peculiarities and this page will try to explain what they are, what limitations they give and how I've 'solved' them.
     3 Hedgewars for Android has several peculiarities and this page will try to explain what they are, what limitations they give and how I've 'solved' them.
     4 
     4 
     5 ==The normal way==
     5 ==The normal way==
     6 
     6 
     7 The 'normal' way  of writing applications in Android is by using the Java language which runs in the Dalivk Virtual Machine. However there's an API which goes under the name of Java Native Interface(JNI), this basically gives a method of calling exported function from a library compile to native code, this C/C++/FreePascal
     7 The “normal” way  of writing applications in Android is by using the Java language which runs in the Dalivk Virtual Machine. However there's an API which goes under the name of Java Native Interface (JNI), this basically gives a method of calling exported function from a library compile to native code, this C/C++/FreePascal.
     8 Originally JNI in Android was meant to be used for performance critical operation like calculating psysics, because the overhead to make a call to some native code is very expensive and unless using native code really gives a huge benefit it isn't worth it. All of this is usable for developers using the 'Native Development Kit' (NDK) In newer versions of Android more functionality has been added to the NDK such as opengl 1.x/2.0 and with Gingerbread you can use almost all Android APIs. However there are a few reasons why I can not use this functionality.
     8 
       
     9 Originally JNI in Android was meant to be used for performance critical operation like calculating psysics, because the overhead to make a call to some native code is very expensive and unless using native code really gives a huge benefit it isn't worth it. All of this is usable for developers using the Native Development Kit (NDK) In newer versions of Android more functionality has been added to the NDK such as OpenGL 1.x/2.0 and with Gingerbread you can use almost all Android APIs. However there are a few reasons why I can not use this functionality.
     9 
    10 
    10 ==Problems with the NDK==
    11 ==Problems with the NDK==
    11 
    12 
    12 The biggest problem with using the newer NDK supported by Gingerbread is the fact that not many people have Android devices with Gingerbread, meaning I can happily code using the new NDK but only a very small percentage of people can use the app, not a very realistic idea then.
    13 The biggest problem with using the newer NDK supported by Gingerbread is the fact that not many people have Android devices with Gingerbread, meaning I can happily code using the new NDK but only a very small percentage of people can use the app, not a very realistic idea then.
    13 
    14 
    14 So we're stuck to using the older NDK, which is just fine as shown later on we can forward Java specific functionalities forward to the native side manually, how ever the NDK only supports C and C++ but the Hedgewars engine is written in FreePascal. Which comes down to the following:
    15 So we're stuck to using the older NDK, which is just fine as shown later on we can forward Java specific functionalities forward to the native side manually, how ever the NDK only supports C and C++ but the Hedgewars engine is written in FreePascal. Which comes down to the following:
    15 
    16 
    16 Where with C/C++ you write your code, run 'ndk-build' and after a few moments a working Android app pops out freepascal needed some more work. We need a crosscompiler, some utilities which link various, and figure out what libraries we can or cannot use.
    17 Where with C/C++ you write your code, run `ndk-build` and after a few moments a working Android app pops out FreePascal needed some more work. We need a crosscompiler, some utilities which link various, and figure out what libraries we can or cannot use.
    17 
    18 
    18 ==So what did we end up with?==
    19 ==So what did we end up with?==
    19 
    20 
    20 We ended up with a fairly simple way of compiling the engine but we cannot use pthreads, because we rely on SDL we can use SDL Threads which helps.. A working LUA Library no problems there
    21 We ended up with a fairly simple way of compiling the engine but we cannot use pthreads, because we rely on SDL we can use SDL Threads which helps. A working Lua library, no problems there.
    21 
    22 
    22 We also got an Official SDL port, however this one is still pretty rough, it hasn't been completed just yet however sound/visuals are working, which is the important bit. Altough one part of SDL wasn't ported yet, pelya the auther of the unofficial port has provided it for us, yey for him!
    23 We also got an Official SDL port, however this one is still pretty rough, it hasn't been completed just yet however sound/visuals are working, which is the important bit. Altough one part of SDL wasn't ported yet, pelya the author of the unofficial port has provided it for us, yay for him!
    23 
    24 
    24 All in all everything seems to work oke right now.
    25 All in all everything seems to work oke right now.
    25 
    26 
    26 This picture tries to describe how information flows through the three levels (Android, C/C++ wrapper, hedgewars engine)
    27 This picture tries to describe how information flows through the three levels (Android, C/C++ wrapper, hedgewars engine):
    27 
    28 
    28 http://www.xelification.com/tmp/hedgewarsflow.png
    29 http://www.xelification.com/tmp/hedgewarsflow.png
    29 
    30 
    30 ==Short list on what gets handled where==
    31 ==Short list on what gets handled where==
    31 
    32 
    32 Android
    33  * Android
    33   * Opengl context creation
    34   * Opengl context creation
    34   * Touch/key events generation
    35   * Touch/key events generation
    35   * Audio playback
    36   * Audio playback
    36   * Front end
    37   * Front end
    37 
    38  * SDL
    38 SDL
       
    39   * Touch/key events normalisation
    39   * Touch/key events normalisation
    40   * Wrapper for audio playback
    40   * Wrapper for audio playback
    41 
    41  * Hedgewars engine
    42 Hedgewars Engine
       
    43   * Touch/key events converted to hedgewars actions
    42   * Touch/key events converted to hedgewars actions