summaryrefslogtreecommitdiff
path: root/platform/android/.old
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/.old')
-rw-r--r--platform/android/.old/SCsub22
-rw-r--r--platform/android/.old/audio_driver_android.cpp104
-rw-r--r--platform/android/.old/audio_driver_android.h29
-rw-r--r--platform/android/.old/context_gl_android.cpp38
-rw-r--r--platform/android/.old/context_gl_android.h24
-rw-r--r--platform/android/.old/detect.py107
-rw-r--r--platform/android/.old/dir_access_jandroid.cpp217
-rw-r--r--platform/android/.old/dir_access_jandroid.h63
-rw-r--r--platform/android/.old/file_access_jandroid.cpp204
-rw-r--r--platform/android/.old/file_access_jandroid.h56
-rw-r--r--platform/android/.old/gdb.setup.base3
-rw-r--r--platform/android/.old/java/AndroidManifest.xml22
-rw-r--r--platform/android/.old/java/build.properties17
-rw-r--r--platform/android/.old/java/build.xml79
-rw-r--r--platform/android/.old/java/default.properties11
-rwxr-xr-xplatform/android/.old/java/libs/armeabi/gdbserverbin0 -> 125208 bytes
-rw-r--r--platform/android/.old/java/local.properties10
-rw-r--r--platform/android/.old/java/proguard.cfg36
-rw-r--r--platform/android/.old/java/res/drawable-hdpi/icon.pngbin0 -> 4147 bytes
-rw-r--r--platform/android/.old/java/res/drawable-ldpi/icon.pngbin0 -> 1723 bytes
-rw-r--r--platform/android/.old/java/res/drawable-mdpi/icon.pngbin0 -> 2574 bytes
-rw-r--r--platform/android/.old/java/res/values/strings.xml4
-rw-r--r--platform/android/.old/java/src/com/android/godot/Godot.java85
-rw-r--r--platform/android/.old/java/src/com/android/godot/GodotIO.java277
-rw-r--r--platform/android/.old/java/src/com/android/godot/GodotLib.java22
-rw-r--r--platform/android/.old/java/src/com/android/godot/GodotView.java319
-rw-r--r--platform/android/.old/java_glue.cpp181
-rw-r--r--platform/android/.old/java_glue.h16
-rw-r--r--platform/android/.old/os_android.cpp426
-rw-r--r--platform/android/.old/os_android.h108
-rw-r--r--platform/android/.old/platform_config.h1
-rwxr-xr-xplatform/android/.old/run_debug.sh40
32 files changed, 2521 insertions, 0 deletions
diff --git a/platform/android/.old/SCsub b/platform/android/.old/SCsub
new file mode 100644
index 0000000000..59e6d10b85
--- /dev/null
+++ b/platform/android/.old/SCsub
@@ -0,0 +1,22 @@
+Import('env')
+
+android_files = [
+
+ 'audio_driver_android.cpp',
+ 'file_access_jandroid.cpp',
+ 'dir_access_jandroid.cpp',
+ 'os_android.cpp',
+ 'java_glue.cpp'
+]
+
+#env.Depends('#core/math/vector3.h', 'vector3_psp.h')
+
+#obj = env.SharedObject('godot_android.cpp')
+
+android_objects=[]
+for x in android_files:
+ android_objects.append( env.SharedObject( x ) )
+
+prog = None
+
+env.SharedLibrary("#platform/jandroid/libgodot_android.so",[android_objects])
diff --git a/platform/android/.old/audio_driver_android.cpp b/platform/android/.old/audio_driver_android.cpp
new file mode 100644
index 0000000000..7e2d065d65
--- /dev/null
+++ b/platform/android/.old/audio_driver_android.cpp
@@ -0,0 +1,104 @@
+#include "audio_driver_android.h"
+
+AudioDriverAndroid* AudioDriverAndroid::s_ad=NULL;
+
+const char* AudioDriverAndroid::get_name() const {
+
+ return "Android";
+}
+
+#if 0
+int AudioDriverAndroid::thread_func(SceSize args, void *argp) {
+
+ AudioDriverAndroid* ad = s_ad;
+ sceAudioOutput2Reserve(AUDIO_OUTPUT_SAMPLE);
+
+ int half=0;
+ while(!ad->exit_thread) {
+
+ int16_t *ptr = &ad->outbuff[AUDIO_OUTPUT_SAMPLE*2*half];
+
+
+
+ if (!ad->active) {
+
+ for(int i=0;i<AUDIO_OUTPUT_SAMPLE*2;i++) {
+ ptr[i]=0;
+ }
+
+ } else {
+
+ //printf("samples: %i\n",AUDIO_OUTPUT_SAMPLE);
+ ad->lock();
+
+ ad->audio_server_process(AUDIO_OUTPUT_SAMPLE,ad->outbuff_32);
+
+ ad->unlock();
+
+ const int32_t* src_buff=ad->outbuff_32;
+
+ for(int i=0;i<AUDIO_OUTPUT_SAMPLE*2;i++) {
+
+ ptr[i]=src_buff[i]>>16;
+ }
+ }
+
+
+ /* Output 16-bit PCM STEREO data that is in pcmBuf without changing the volume */
+ sceAudioOutput2OutputBlocking(
+ SCE_AUDIO_VOLUME_0dB*3, //0db at 0x8000, that's obvious
+ ptr
+ );
+
+ if (half)
+ half=0;
+ else
+ half=1;
+
+ }
+
+ sceAudioOutput2Release();
+
+ sceKernelExitThread(SCE_KERNEL_EXIT_SUCCESS);
+ ad->thread_exited=true;
+ return SCE_KERNEL_EXIT_SUCCESS;
+
+}
+
+#endif
+Error AudioDriverAndroid::init(){
+
+ return OK;
+
+
+}
+void AudioDriverAndroid::start(){
+
+
+}
+int AudioDriverAndroid::get_mix_rate() const {
+
+ return 44100;
+}
+AudioDriverSW::OutputFormat AudioDriverAndroid::get_output_format() const{
+
+ return OUTPUT_STEREO;
+}
+void AudioDriverAndroid::lock(){
+
+
+}
+void AudioDriverAndroid::unlock() {
+
+
+}
+void AudioDriverAndroid::finish(){
+
+ }
+
+
+AudioDriverAndroid::AudioDriverAndroid()
+{
+ s_ad=this;
+}
+
diff --git a/platform/android/.old/audio_driver_android.h b/platform/android/.old/audio_driver_android.h
new file mode 100644
index 0000000000..08fbaa927e
--- /dev/null
+++ b/platform/android/.old/audio_driver_android.h
@@ -0,0 +1,29 @@
+#ifndef AUDIO_DRIVER_ANDROID_H
+#define AUDIO_DRIVER_ANDROID_H
+
+#include "servers/audio/audio_server_sw.h"
+
+class AudioDriverAndroid : public AudioDriverSW {
+
+
+ static AudioDriverAndroid* s_ad;
+
+public:
+
+ void set_singleton();
+
+ virtual const char* get_name() const;
+
+ virtual Error init();
+ virtual void start();
+ virtual int get_mix_rate() const ;
+ virtual OutputFormat get_output_format() const;
+ virtual void lock();
+ virtual void unlock();
+ virtual void finish();
+
+
+ AudioDriverAndroid();
+};
+
+#endif // AUDIO_DRIVER_ANDROID_H
diff --git a/platform/android/.old/context_gl_android.cpp b/platform/android/.old/context_gl_android.cpp
new file mode 100644
index 0000000000..e48ed2e7f9
--- /dev/null
+++ b/platform/android/.old/context_gl_android.cpp
@@ -0,0 +1,38 @@
+#include "context_gl_android.h"
+
+#include <GLES2/gl2.h>
+#include "os/os.h"
+void ContextGLAndroid::make_current() {
+
+};
+
+int ContextGLAndroid::get_window_width() {
+
+ return OS::get_singleton()->get_default_video_mode().width;
+};
+
+int ContextGLAndroid::get_window_height() {
+
+ return OS::get_singleton()->get_default_video_mode().height;
+
+};
+
+void ContextGLAndroid::swap_buffers() {
+
+};
+
+Error ContextGLAndroid::initialize() {
+
+ return OK;
+};
+
+
+ContextGLAndroid::ContextGLAndroid() {
+
+
+};
+
+ContextGLAndroid::~ContextGLAndroid() {
+
+};
+
diff --git a/platform/android/.old/context_gl_android.h b/platform/android/.old/context_gl_android.h
new file mode 100644
index 0000000000..bf09d08ad2
--- /dev/null
+++ b/platform/android/.old/context_gl_android.h
@@ -0,0 +1,24 @@
+#ifndef CONTEXT_GL_ANDROID_H
+#define CONTEXT_GL_ANDROID_H
+
+class ContextGLAndroid : public ContextGL {
+
+ enum {
+ COMMAND_BUFFER_SIZE = 1024 * 1024,
+ };
+
+public:
+
+ virtual void make_current();
+
+ virtual int get_window_width();
+ virtual int get_window_height();
+ virtual void swap_buffers();
+
+ virtual Error initialize();
+
+ ContextGLAndroid();
+ ~ContextGLAndroid();
+};
+
+#endif // CONTEXT_GL_ANDROID_H
diff --git a/platform/android/.old/detect.py b/platform/android/.old/detect.py
new file mode 100644
index 0000000000..c29b56aed4
--- /dev/null
+++ b/platform/android/.old/detect.py
@@ -0,0 +1,107 @@
+import os
+import sys
+import string
+
+def can_build():
+
+ import os
+ if (not os.environ.has_key("ANDROID_NDK_ROOT")):
+ print("ANDROID_NDK_ROOT not present, Android disabled.")
+ return False
+ return True
+
+def get_opts():
+
+ return [
+ ('ANDROID_NDK_ROOT', 'the path to Android NDK', os.environ.get("ANDROID_NDK_ROOT", 0)),
+ ('NDK_TOOLCHAIN', 'toolchain to use for the NDK',"arm-eabi-4.4.0"),
+ #android 2.2
+# ('NDK_PLATFORM', 'platform to use for the NDK',"android-8"),
+# ('NDK_TARGET', 'toolchain to use for the NDK',"arm-linux-androideabi-4.4.3"),
+ ]
+
+def get_flags():
+
+ return [
+ ('lua', 'no'),
+ ('tools', 'no'),
+ ('nedmalloc', 'no'),
+ ]
+
+
+
+def configure(env):
+
+
+ print("Godot Android!!!!!")
+
+ env.Append(CPPPATH=['#platform/android'])
+
+ env['OBJSUFFIX'] = ".jandroid.o"
+ env['LIBSUFFIX'] = ".jandroid.a"
+ env['PROGSUFFIX'] = ".jandroid"
+
+ gcc_path=env["ANDROID_NDK_ROOT"]+"/toolchains/"+env["NDK_TARGET"]+"/prebuilt/";
+
+ if (sys.platform.find("linux")==0):
+ gcc_path=gcc_path+"/linux-x86/bin"
+ elif (sys.platform=="darwin"):
+ gcc_path=gcc_path+"/darwin-x86/bin" #this may be wrong
+ elif (os.name=="nt"):
+ gcc_path=gcc_path+"/windows-x86/bin" #this may be wrong
+
+
+
+ env['ENV']['PATH'] = gcc_path+":"+env['ENV']['PATH']
+
+ env['CC'] = gcc_path+'/arm-linux-androideabi-gcc'
+ env['CXX'] = gcc_path+'/arm-linux-androideabi-g++'
+ env['AR'] = gcc_path+"/arm-linux-androideabi-ar"
+
+ import string
+ #include path
+ gcc_include=env["ANDROID_NDK_ROOT"]+"/platforms/"+env["NDK_PLATFORM"]+"/arch-arm/usr/include"
+ ld_sysroot=env["ANDROID_NDK_ROOT"]+"/platforms/"+env["NDK_PLATFORM"]+"/arch-arm"
+ ld_path=env["ANDROID_NDK_ROOT"]+"/platforms/"+env["NDK_PLATFORM"]+"/arch-arm/usr/lib"
+ #cxx_include=env["ANDROID_NDK_ROOT"]+"/sources/cxx-stl/system/include"
+ #env.Append(CPPPATH=[gcc_include,cxx_include])
+ env['CCFLAGS'] = string.split('-DNO_THREADS -DNO_STATVFS -MMD -MP -MF -fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -fno-exceptions -mthumb -fno-strict-aliasing -DANDROID -Wa,--noexecstack -DGLES2_ENABLED ')
+
+ env.Append(LDPATH=[ld_path])
+ env.Append(LIBS=['c','m','stdc++','log','GLESv2'])
+
+ env["LINKFLAGS"]= string.split(" -g --sysroot="+ld_sysroot+" -Wl,--no-undefined -Wl,-z,noexecstack")
+ env.Append(LINKFLAGS=["-Wl,-soname,libgodot_android.so"])
+
+ if (env["target"]=="release"):
+
+ env.Append(CCFLAGS=['-O2', '-ffast-math','-fomit-frame-pointer'])
+ env['OBJSUFFIX'] = "_opt"+env['OBJSUFFIX']
+ env['LIBSUFFIX'] = "_opt"+env['LIBSUFFIX']
+
+ elif (env["target"]=="debug"):
+
+ env.Append(CCFLAGS=['-D_DEBUG', '-g', '-Wall', '-O0', '-DDEBUG_ENABLED'])
+ env.Append(CPPFLAGS=['-DDEBUG_MEMORY_ALLOC'])
+
+ env.Append(CPPFLAGS=['-DANDROID_ENABLED', '-DUNIX_ENABLED','-DNO_FCNTL'])
+
+ env['neon_enabled']=True
+ env.Append(CPPFLAGS=['-DANDROID_ENABLED', '-DUNIX_ENABLED', '-DNO_FCNTL','-DMPC_FIXED_POINT'])
+# env.Append(CPPFLAGS=['-DANDROID_ENABLED', '-DUNIX_ENABLED','-DMPC_FIXED_POINT'])
+ if (env['android_stl']=='yes'):
+ #env.Append(CCFLAGS=[env["ANDROID_NDK_ROOT"]+"/sources/cxx-stl/system/include"])
+ env.Append(CPPPATH=[env["ANDROID_NDK_ROOT"]+"/sources/cxx-stl/gnu-libstdc++/4.4.3/include"])
+ env.Append(CPPPATH=[env["ANDROID_NDK_ROOT"]+"/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi/include"])
+ env.Append(LIBPATH=[env["ANDROID_NDK_ROOT"]+"/sources/cxx-stl/gnu-libstdc++/4.4.3/libs/armeabi"])
+ env.Append(LIBS=["gnustl_static","supc++"])
+ #env.Append(CCFLAGS=["-I"+env["ANDROID_NDK_ROOT"]+"/sources/cxx-stl/stlport/stlport"])
+ #env.Append(CCFLAGS=["-I"+env["ANDROID_NDK_ROOT"]+"/sources/cxx-stl/gnu-libstdc++/libs/armeabi/include"])
+ #env.Append(LINKFLAGS=[env["ANDROID_NDK_ROOT"]+"/sources/cxx-stl/gnu-libstdc++/libs/armeabi/libstdc++.a"])
+ else:
+
+ env.Append(CPPPATH=[env["ANDROID_NDK_ROOT"]+"/sources/cxx-stl/gabi++/include"])
+ env.Append(CPPPATH=[env["ANDROID_NDK_ROOT"]+"/sources/cpufeatures"])
+ env.Append(LIBPATH=[env["ANDROID_NDK_ROOT"]+"/sources/cxx-stl/gabi++/libs/armeabi"])
+ env.Append(LIBS=['gabi++_static'])
+ env.Append(CCFLAGS=["-fno-exceptions",'-DNO_SAFE_CAST'])
diff --git a/platform/android/.old/dir_access_jandroid.cpp b/platform/android/.old/dir_access_jandroid.cpp
new file mode 100644
index 0000000000..649a25a902
--- /dev/null
+++ b/platform/android/.old/dir_access_jandroid.cpp
@@ -0,0 +1,217 @@
+#include "dir_access_jandroid.h"
+#include "file_access_jandroid.h"
+
+jobject DirAccessJAndroid::io=NULL;
+jclass DirAccessJAndroid::cls=NULL;
+JNIEnv * DirAccessJAndroid::env=NULL;
+jmethodID DirAccessJAndroid::_dir_open=NULL;
+jmethodID DirAccessJAndroid::_dir_next=NULL;
+jmethodID DirAccessJAndroid::_dir_close=NULL;
+
+
+DirAccess *DirAccessJAndroid::create_fs() {
+
+ return memnew(DirAccessJAndroid);
+}
+
+bool DirAccessJAndroid::list_dir_begin() {
+
+ list_dir_end();
+
+ jstring js = env->NewStringUTF(current_dir.utf8().get_data());
+ int res = env->CallIntMethod(io,_dir_open,js);
+ if (res<=0)
+ return true;
+
+ id=res;
+
+ return false;
+}
+
+String DirAccessJAndroid::get_next(){
+
+ ERR_FAIL_COND_V(id==0,"");
+
+ jstring str= (jstring)env->CallObjectMethod(io,_dir_next,id);
+ if (!str)
+ return "";
+
+ int sl = env->GetStringLength(str);
+ if (sl==0) {
+ env->DeleteLocalRef((jobject)str);
+ return "";
+ }
+
+ CharString cs;
+ cs.resize(sl+1);
+ env->GetStringRegion(str,0,sl,(jchar*)&cs[0]);
+ cs[sl]=0;
+
+ String ret;
+ ret.parse_utf8(&cs[0]);
+ env->DeleteLocalRef((jobject)str);
+
+ return ret;
+
+}
+bool DirAccessJAndroid::current_is_dir() const{
+
+ String sd;
+ if (current_dir=="")
+ sd=current;
+ else
+ sd=current_dir+"/"+current;
+
+ jstring js = env->NewStringUTF(sd.utf8().get_data());
+
+ int res = env->CallIntMethod(io,_dir_open,js);
+ if (res<=0)
+ return false;
+
+ env->CallObjectMethod(io,_dir_close,res);
+
+
+ return true;
+}
+void DirAccessJAndroid::list_dir_end(){
+
+ if (id==0)
+ return;
+
+ env->CallObjectMethod(io,_dir_close,id);
+ id=0;
+
+
+}
+
+int DirAccessJAndroid::get_drive_count(){
+
+ return 0;
+}
+String DirAccessJAndroid::get_drive(int p_drive){
+
+ return "";
+}
+
+Error DirAccessJAndroid::change_dir(String p_dir){
+
+ p_dir=p_dir.simplify_path();
+
+ if (p_dir=="" || p_dir=="." || (p_dir==".." && current_dir==""))
+ return OK;
+
+ String new_dir;
+
+ if (p_dir.begins_with("/"))
+ new_dir=p_dir.substr(1,p_dir.length());
+ else if (p_dir.begins_with("res://"))
+ new_dir=p_dir.substr(6,p_dir.length());
+ else //relative
+ new_dir=new_dir+"/"+p_dir;
+
+//test if newdir exists
+ new_dir=new_dir.simplify_path();
+
+ jstring js = env->NewStringUTF(new_dir.utf8().get_data());
+ int res = env->CallIntMethod(io,_dir_open,js);
+ if (res<=0)
+ return ERR_INVALID_PARAMETER;
+
+ env->CallObjectMethod(io,_dir_close,res);
+
+
+
+ return OK;
+}
+
+String DirAccessJAndroid::get_current_dir(){
+
+ return "/"+current_dir;
+}
+String DirAccessJAndroid::get_dir_separator() const{
+
+ return "/";
+}
+
+bool DirAccessJAndroid::file_exists(String p_file){
+
+ String sd;
+ if (current_dir=="")
+ sd=p_file;
+ else
+ sd=current_dir+"/"+p_file;
+
+ FileAccessJAndroid *f = memnew(FileAccessJAndroid);
+ bool exists = f->file_exists(sd);
+ memdelete(f);
+
+ return exists;
+}
+
+uint64_t DirAccessJAndroid::get_modified_time(String p_file){
+
+ return 0;
+}
+
+Error DirAccessJAndroid::make_dir(String p_dir){
+
+ ERR_FAIL_V(ERR_UNAVAILABLE);
+}
+
+Error DirAccessJAndroid::rename(String p_from, String p_to){
+
+ ERR_FAIL_V(ERR_UNAVAILABLE);
+}
+Error DirAccessJAndroid::remove(String p_name){
+
+ ERR_FAIL_V(ERR_UNAVAILABLE);
+}
+
+//FileType get_file_type() const;
+size_t DirAccessJAndroid::get_space_left() {
+
+ return 0;
+}
+
+void DirAccessJAndroid::make_default() {
+
+ instance_func=create_fs;
+}
+
+void DirAccessJAndroid::setup( JNIEnv *p_env, jobject p_io) {
+
+
+ env=p_env;
+ io=p_io;
+ __android_log_print(ANDROID_LOG_INFO,"godot","STEP7");
+
+ jclass c = env->GetObjectClass(io);
+ cls = (jclass)env->NewGlobalRef(c);
+ __android_log_print(ANDROID_LOG_INFO,"godot","STEP8");
+
+ _dir_open = env->GetMethodID(cls, "dir_open", "(Ljava/lang/String;)I");
+ if(_dir_open != 0) {
+ __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _dir_open ok!!");
+ }
+ _dir_next = env->GetMethodID(cls, "dir_next", "(I)Ljava/lang/String;");
+ if(_dir_next != 0) {
+ __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _dir_next ok!!");
+ }
+ _dir_close = env->GetMethodID(cls, "dir_close", "(I)V");
+ if(_dir_close != 0) {
+ __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _dir_close ok!!");
+ }
+
+// (*env)->CallVoidMethod(env,obj,aMethodID, myvar);
+}
+
+
+DirAccessJAndroid::DirAccessJAndroid() {
+
+ id=0;
+}
+
+DirAccessJAndroid::~DirAccessJAndroid() {
+
+ list_dir_end();;
+}
diff --git a/platform/android/.old/dir_access_jandroid.h b/platform/android/.old/dir_access_jandroid.h
new file mode 100644
index 0000000000..80973004aa
--- /dev/null
+++ b/platform/android/.old/dir_access_jandroid.h
@@ -0,0 +1,63 @@
+#ifndef DIR_ACCESS_JANDROID_H
+#define DIR_ACCESS_JANDROID_H
+
+#include "java_glue.h"
+#include "os/dir_access.h"
+#include <stdio.h>
+
+
+class DirAccessJAndroid : public DirAccess {
+
+ //AAssetDir* aad;
+
+ static jobject io;
+ static jclass cls;
+
+ static jmethodID _dir_open;
+ static jmethodID _dir_next;
+ static jmethodID _dir_close;
+
+ static JNIEnv * env;
+
+ int id;
+
+ String current_dir;
+ String current;
+
+ static DirAccess *create_fs();
+
+public:
+
+ virtual bool list_dir_begin(); ///< This starts dir listing
+ virtual String get_next();
+ virtual bool current_is_dir() const;
+ virtual void list_dir_end(); ///<
+
+ virtual int get_drive_count();
+ virtual String get_drive(int p_drive);
+
+ virtual Error change_dir(String p_dir); ///< can be relative or absolute, return false on success
+ virtual String get_current_dir(); ///< return current dir location
+ virtual String get_dir_separator() const ;
+
+ virtual bool file_exists(String p_file);
+ virtual uint64_t get_modified_time(String p_file);
+
+ virtual Error make_dir(String p_dir);
+
+ virtual Error rename(String p_from, String p_to);
+ virtual Error remove(String p_name);
+
+ //virtual FileType get_file_type() const;
+ size_t get_space_left();
+
+ static void make_default();
+
+ static void setup( JNIEnv *env, jobject io);
+ static void update_env( JNIEnv *p_env) { env=p_env; }
+
+ DirAccessJAndroid();
+ ~DirAccessJAndroid();
+};
+
+#endif // DIR_ACCESS_JANDROID_H
diff --git a/platform/android/.old/file_access_jandroid.cpp b/platform/android/.old/file_access_jandroid.cpp
new file mode 100644
index 0000000000..96c064f9f5
--- /dev/null
+++ b/platform/android/.old/file_access_jandroid.cpp
@@ -0,0 +1,204 @@
+#include "file_access_jandroid.h"
+#include "os/os.h"
+#include <unistd.h>
+
+jobject FileAccessJAndroid::io=NULL;
+jclass FileAccessJAndroid::cls;
+jmethodID FileAccessJAndroid::_file_open=0;
+jmethodID FileAccessJAndroid::_file_get_size=0;
+jmethodID FileAccessJAndroid::_file_seek=0;
+jmethodID FileAccessJAndroid::_file_read=0;
+jmethodID FileAccessJAndroid::_file_tell=0;
+jmethodID FileAccessJAndroid::_file_eof=0;
+jmethodID FileAccessJAndroid::_file_close=0;
+
+
+JNIEnv * FileAccessJAndroid::env=NULL;
+
+void FileAccessJAndroid::make_default() {
+
+ create_func=create_jandroid;
+}
+
+FileAccess* FileAccessJAndroid::create_jandroid() {
+
+ return memnew(FileAccessJAndroid);
+}
+
+Error FileAccessJAndroid::open(const String& p_path, int p_mode_flags) {
+
+ if (is_open())
+ close();
+
+ String path=fix_path(p_path).simplify_path();
+ if (path.begins_with("/"))
+ path=path.substr(1,path.length());
+ else if (path.begins_with("res://"))
+ path=path.substr(6,path.length());
+
+ //OS::get_singleton()->print("env: %p, io %p, fo: %p\n",env,io,_file_open);
+
+ jstring js = env->NewStringUTF(path.utf8().get_data());
+ int res = env->CallIntMethod(io,_file_open,js,p_mode_flags&WRITE?true:false);
+
+ if (res<=0)
+ return ERR_FILE_CANT_OPEN;
+ id=res;
+
+
+ return OK;
+}
+
+void FileAccessJAndroid::close() {
+
+ if (io==0)
+ return;
+
+ env->CallVoidMethod(io,_file_close,id);
+ id=0;
+
+}
+bool FileAccessJAndroid::is_open() const {
+
+ return id!=0;
+}
+
+void FileAccessJAndroid::seek(size_t p_position) {
+
+ ERR_FAIL_COND(!is_open());
+ env->CallVoidMethod(io,_file_seek,id,p_position);
+}
+void FileAccessJAndroid::seek_end(int64_t p_position) {
+
+ ERR_FAIL_COND(!is_open());
+
+ seek(get_len());
+
+}
+size_t FileAccessJAndroid::get_pos() const {
+
+ ERR_FAIL_COND_V(!is_open(),0);
+ return env->CallIntMethod(io,_file_tell,id);
+
+}
+size_t FileAccessJAndroid::get_len() const {
+
+ ERR_FAIL_COND_V(!is_open(),0);
+ return env->CallIntMethod(io,_file_get_size,id);
+
+
+}
+
+bool FileAccessJAndroid::eof_reached() const {
+
+ ERR_FAIL_COND_V(!is_open(),0);
+ return env->CallIntMethod(io,_file_eof,id);
+
+}
+
+uint8_t FileAccessJAndroid::get_8() const {
+
+ ERR_FAIL_COND_V(!is_open(),0);
+ uint8_t byte;
+ get_buffer(&byte,1);
+ return byte;
+}
+int FileAccessJAndroid::get_buffer(uint8_t *p_dst, int p_length) const {
+
+ ERR_FAIL_COND_V(!is_open(),0);
+ if (p_length==0)
+ return 0;
+
+ jbyteArray jca = (jbyteArray)env->CallObjectMethod(io,_file_read,id,p_length);
+
+ int len = env->GetArrayLength(jca);
+ env->GetByteArrayRegion(jca,0,len,(jbyte*)p_dst);
+ env->DeleteLocalRef((jobject)jca);
+
+ return len;
+
+}
+
+Error FileAccessJAndroid::get_error() const {
+
+ if (eof_reached())
+ return ERR_FILE_EOF;
+ return OK;
+}
+
+void FileAccessJAndroid::store_8(uint8_t p_dest) {
+
+
+}
+
+bool FileAccessJAndroid::file_exists(const String& p_path) {
+
+ jstring js = env->NewStringUTF(p_path.utf8().get_data());
+ int res = env->CallIntMethod(io,_file_open,js,false);
+ if (res<=0)
+ return false;
+ env->CallVoidMethod(io,_file_close,res);
+ return true;
+
+}
+
+
+void FileAccessJAndroid::setup( JNIEnv *p_env, jobject p_io) {
+
+ io=p_io;
+ env=p_env;
+
+ __android_log_print(ANDROID_LOG_INFO,"godot","STEP5");
+
+ jclass c = env->GetObjectClass(io);
+ __android_log_print(ANDROID_LOG_INFO,"godot","STEP6");
+ cls=(jclass)env->NewGlobalRef(c);
+
+ _file_open = env->GetMethodID(cls, "file_open", "(Ljava/lang/String;Z)I");
+ if(_file_open != 0) {
+ __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_open ok!!");
+ }
+ _file_get_size = env->GetMethodID(cls, "file_get_size", "(I)I");
+ if(_file_get_size != 0) {
+ __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_get_size ok!!");
+ }
+ _file_tell = env->GetMethodID(cls, "file_tell", "(I)I");
+ if(_file_tell != 0) {
+ __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_tell ok!!");
+ }
+ _file_eof = env->GetMethodID(cls, "file_eof", "(I)Z");
+
+ if(_file_eof != 0) {
+ __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_eof ok!!");
+ }
+ _file_seek = env->GetMethodID(cls, "file_seek", "(II)V");
+ if(_file_seek != 0) {
+ __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_seek ok!!");
+ }
+ _file_read = env->GetMethodID(cls, "file_read", "(II)[B");
+ if(_file_read != 0) {
+ __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_read ok!!");
+ }
+ _file_close = env->GetMethodID(cls, "file_close", "(I)V");
+ if(_file_close != 0) {
+ __android_log_print(ANDROID_LOG_INFO,"godot","*******GOT METHOD _file_close ok!!");
+ }
+
+// (*env)->CallVoidMethod(env,obj,aMethodID, myvar);
+}
+
+
+FileAccessJAndroid::FileAccessJAndroid()
+{
+
+ id=0;
+}
+
+FileAccessJAndroid::~FileAccessJAndroid()
+{
+
+ if (is_open())
+ close();
+}
+
+
diff --git a/platform/android/.old/file_access_jandroid.h b/platform/android/.old/file_access_jandroid.h
new file mode 100644
index 0000000000..7b432fc4fd
--- /dev/null
+++ b/platform/android/.old/file_access_jandroid.h
@@ -0,0 +1,56 @@
+#ifndef FILE_ACCESS_JANDROID_H
+#define FILE_ACCESS_JANDROID_H
+
+#include "java_glue.h"
+#include "os/file_access.h"
+class FileAccessJAndroid : public FileAccess {
+
+ static jobject io;
+ static jclass cls;
+
+ static jmethodID _file_open;
+ static jmethodID _file_get_size;
+ static jmethodID _file_seek;
+ static jmethodID _file_tell;
+ static jmethodID _file_eof;
+ static jmethodID _file_read;
+ static jmethodID _file_close;
+
+
+ static JNIEnv * env;
+
+ int id;
+ static FileAccess* create_jandroid();
+
+
+public:
+
+ virtual Error open(const String& p_path, int p_mode_flags); ///< open a file
+ virtual void close(); ///< close a file
+ virtual bool is_open() const; ///< true when file is open
+
+ virtual void seek(size_t p_position); ///< seek to a given position
+ virtual void seek_end(int64_t p_position=0); ///< seek from the end of file
+ virtual size_t get_pos() const; ///< get position in the file
+ virtual size_t get_len() const; ///< get size of the file
+
+ virtual bool eof_reached() const; ///< reading passed EOF
+
+ virtual uint8_t get_8() const; ///< get a byte
+ virtual int get_buffer(uint8_t *p_dst, int p_length) const;
+
+ virtual Error get_error() const; ///< get last error
+
+ virtual void store_8(uint8_t p_dest); ///< store a byte
+
+ virtual bool file_exists(const String& p_path); ///< return true if a file exists
+
+ static void make_default();
+
+ static void setup( JNIEnv *env, jobject io);
+ static void update_env( JNIEnv *p_env) { env=p_env; }
+ FileAccessJAndroid();
+ ~FileAccessJAndroid();
+};
+
+#endif // FILE_ACCESS_JANDROID_H
diff --git a/platform/android/.old/gdb.setup.base b/platform/android/.old/gdb.setup.base
new file mode 100644
index 0000000000..a622b1caf6
--- /dev/null
+++ b/platform/android/.old/gdb.setup.base
@@ -0,0 +1,3 @@
+set solib-search-path .
+directory ../..
+file app_process
diff --git a/platform/android/.old/java/AndroidManifest.xml b/platform/android/.old/java/AndroidManifest.xml
new file mode 100644
index 0000000000..c05a681fe3
--- /dev/null
+++ b/platform/android/.old/java/AndroidManifest.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.godot"
+ android:versionCode="1"
+ android:versionName="1.0">
+ <application android:label="@string/godot" android:icon="@drawable/icon">
+ <activity android:name="Godot"
+ android:label="@string/godot"
+ android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
+ android:launchMode="singleTask"
+ android:configChanges="orientation|keyboardHidden">
+
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+ <uses-feature android:glEsVersion="0x00020000"/>
+ <uses-sdk android:minSdkVersion="8"/>
+
+</manifest>
diff --git a/platform/android/.old/java/build.properties b/platform/android/.old/java/build.properties
new file mode 100644
index 0000000000..ee52d86d94
--- /dev/null
+++ b/platform/android/.old/java/build.properties
@@ -0,0 +1,17 @@
+# This file is used to override default values used by the Ant build system.
+#
+# This file must be checked in Version Control Systems, as it is
+# integral to the build system of your project.
+
+# This file is only used by the Ant script.
+
+# You can use this to override default values such as
+# 'source.dir' for the location of your java source folder and
+# 'out.dir' for the location of your output folder.
+
+# You can also use it define how the release builds are signed by declaring
+# the following properties:
+# 'key.store' for the location of your keystore and
+# 'key.alias' for the name of the key to use.
+# The password will be asked during the build when you use the 'release' target.
+
diff --git a/platform/android/.old/java/build.xml b/platform/android/.old/java/build.xml
new file mode 100644
index 0000000000..6dc5eb874c
--- /dev/null
+++ b/platform/android/.old/java/build.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="Godot" default="help">
+
+<!-- The local.properties file is created and updated by the 'android'
+ tool.
+ It contains the path to the SDK. It should *NOT* be checked into
+ Version Control Systems. -->
+ <property file="local.properties" />
+ <property name="asset-dir" value="assets" />
+ <!-- The build.properties file can be created by you and is never touched
+ by the 'android' tool. This is the place to change some of the
+ default property values used by the Ant rules.
+ Here are some properties you may want to change/update:
+
+ source.dir
+ The name of the source directory. Default is 'src'.
+ out.dir
+ The name of the output directory. Default is 'bin'.
+
+ Properties related to the SDK location or the project target should
+ be updated using the 'android' tool with the 'update' action.
+
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems.
+
+ -->
+ <property file="build.properties" />
+
+ <!-- The default.properties file is created and updated by the 'android'
+ tool, as well as ADT.
+ This file is an integral part of the build system for your
+ application and should be checked into Version Control Systems. -->
+ <property file="default.properties" />
+
+
+ <!-- Required pre-setup import -->
+ <import file="${sdk.dir}/tools/ant/pre_setup.xml" />
+
+
+<!-- extension targets. Uncomment the ones where you want to do custom work
+ in between standard targets -->
+<!--
+ <target name="-pre-build">
+ </target>
+ <target name="-pre-compile">
+ </target>
+
+ [This is typically used for code obfuscation.
+ Compiled code location: ${out.classes.absolute.dir}
+ If this is not done in place, override ${out.dex.input.absolute.dir}]
+ <target name="-post-compile">
+ </target>
+-->
+
+ <!-- Execute the Android Setup task that will setup some properties
+ specific to the target, and import the build rules files.
+
+ The rules file is imported from
+ <SDK>/tools/ant/
+ Depending on the project type it can be either:
+ - main_rules.xml
+ - lib_rules.xml
+ - test_rules.xml
+
+ To customize existing targets, there are two options:
+ - Customize only one target:
+ - copy/paste the target into this file, *before* the
+ <setup> task.
+ - customize it to your needs.
+ - Customize the whole script.
+ - copy/paste the content of the rules files (minus the top node)
+ into this file, *after* the <setup> task
+ - disable the import of the rules by changing the setup task
+ below to <setup import="false" />.
+ - customize to your needs.
+ -->
+ <setup />
+
+</project>
diff --git a/platform/android/.old/java/default.properties b/platform/android/.old/java/default.properties
new file mode 100644
index 0000000000..e2e8061f26
--- /dev/null
+++ b/platform/android/.old/java/default.properties
@@ -0,0 +1,11 @@
+# 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 use,
+# "build.properties", and override values to adapt the script to your
+# project structure.
+
+# Project target.
+target=android-8
diff --git a/platform/android/.old/java/libs/armeabi/gdbserver b/platform/android/.old/java/libs/armeabi/gdbserver
new file mode 100755
index 0000000000..39634a8147
--- /dev/null
+++ b/platform/android/.old/java/libs/armeabi/gdbserver
Binary files differ
diff --git a/platform/android/.old/java/local.properties b/platform/android/.old/java/local.properties
new file mode 100644
index 0000000000..18e2b6b0cb
--- /dev/null
+++ b/platform/android/.old/java/local.properties
@@ -0,0 +1,10 @@
+# This file is automatically generated by Android Tools.
+# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
+#
+# This file must *NOT* be checked in Version Control Systems,
+# as it contains information specific to your local configuration.
+
+# location of the SDK. This is only used by Ant
+# For customization when using a Version Control System, please read the
+# header note.
+sdk.dir=/home/red/bin/android-sdk-linux_x86
diff --git a/platform/android/.old/java/proguard.cfg b/platform/android/.old/java/proguard.cfg
new file mode 100644
index 0000000000..12dd0392c0
--- /dev/null
+++ b/platform/android/.old/java/proguard.cfg
@@ -0,0 +1,36 @@
+-optimizationpasses 5
+-dontusemixedcaseclassnames
+-dontskipnonpubliclibraryclasses
+-dontpreverify
+-verbose
+-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
+
+-keep public class * extends android.app.Activity
+-keep public class * extends android.app.Application
+-keep public class * extends android.app.Service
+-keep public class * extends android.content.BroadcastReceiver
+-keep public class * extends android.content.ContentProvider
+-keep public class * extends android.app.backup.BackupAgentHelper
+-keep public class * extends android.preference.Preference
+-keep public class com.android.vending.licensing.ILicensingService
+
+-keepclasseswithmembernames class * {
+ native <methods>;
+}
+
+-keepclasseswithmembernames class * {
+ public <init>(android.content.Context, android.util.AttributeSet);
+}
+
+-keepclasseswithmembernames class * {
+ public <init>(android.content.Context, android.util.AttributeSet, int);
+}
+
+-keepclassmembers enum * {
+ public static **[] values();
+ public static ** valueOf(java.lang.String);
+}
+
+-keep class * implements android.os.Parcelable {
+ public static final android.os.Parcelable$Creator *;
+}
diff --git a/platform/android/.old/java/res/drawable-hdpi/icon.png b/platform/android/.old/java/res/drawable-hdpi/icon.png
new file mode 100644
index 0000000000..8074c4c571
--- /dev/null
+++ b/platform/android/.old/java/res/drawable-hdpi/icon.png
Binary files differ
diff --git a/platform/android/.old/java/res/drawable-ldpi/icon.png b/platform/android/.old/java/res/drawable-ldpi/icon.png
new file mode 100644
index 0000000000..1095584ec2
--- /dev/null
+++ b/platform/android/.old/java/res/drawable-ldpi/icon.png
Binary files differ
diff --git a/platform/android/.old/java/res/drawable-mdpi/icon.png b/platform/android/.old/java/res/drawable-mdpi/icon.png
new file mode 100644
index 0000000000..a07c69fa5a
--- /dev/null
+++ b/platform/android/.old/java/res/drawable-mdpi/icon.png
Binary files differ
diff --git a/platform/android/.old/java/res/values/strings.xml b/platform/android/.old/java/res/values/strings.xml
new file mode 100644
index 0000000000..f92332ad4c
--- /dev/null
+++ b/platform/android/.old/java/res/values/strings.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="godot">Godot</string>
+</resources>
diff --git a/platform/android/.old/java/src/com/android/godot/Godot.java b/platform/android/.old/java/src/com/android/godot/Godot.java
new file mode 100644
index 0000000000..475caf3362
--- /dev/null
+++ b/platform/android/.old/java/src/com/android/godot/Godot.java
@@ -0,0 +1,85 @@
+package com.android.godot;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.MotionEvent;
+
+public class Godot extends Activity
+{
+
+
+ GodotView mView;
+
+ static public GodotIO io;
+
+
+ @Override protected void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ io = new GodotIO(getAssets());
+ GodotLib.io=io;
+ mView = new GodotView(getApplication(),io);
+ setContentView(mView);
+ }
+
+ @Override protected void onPause() {
+ super.onPause();
+ mView.onPause();
+ }
+
+ @Override protected void onResume() {
+ super.onResume();
+ mView.onResume();
+ }
+
+ @Override public boolean dispatchTouchEvent (MotionEvent event) {
+
+ super.onTouchEvent(event);
+ int evcount=event.getPointerCount();
+ if (evcount==0)
+ return true;
+
+ int[] arr = new int[event.getPointerCount()*3];
+
+ for(int i=0;i<event.getPointerCount();i++) {
+
+ arr[i*3+0]=(int)event.getPointerId(i);
+ arr[i*3+1]=(int)event.getX(i);
+ arr[i*3+2]=(int)event.getY(i);
+ }
+
+ //System.out.printf("gaction: %d\n",event.getAction());
+ switch(event.getAction()&MotionEvent.ACTION_MASK) {
+
+ case MotionEvent.ACTION_DOWN: {
+ GodotLib.touch(0,0,evcount,arr);
+ //System.out.printf("action down at: %f,%f\n", event.getX(),event.getY());
+ } break;
+ case MotionEvent.ACTION_MOVE: {
+ GodotLib.touch(1,0,evcount,arr);
+ //for(int i=0;i<event.getPointerCount();i++) {
+ // System.out.printf("%d - moved to: %f,%f\n",i, event.getX(i),event.getY(i));
+ //}
+ } break;
+ case MotionEvent.ACTION_POINTER_UP: {
+ int pointer_idx = event.getActionIndex();
+ GodotLib.touch(4,pointer_idx,evcount,arr);
+ //System.out.printf("%d - s.up at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx));
+ } break;
+ case MotionEvent.ACTION_POINTER_DOWN: {
+ int pointer_idx = event.getActionIndex();
+ GodotLib.touch(3,pointer_idx,evcount,arr);
+ //System.out.printf("%d - s.down at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx));
+ } break;
+ case MotionEvent.ACTION_CANCEL:
+ case MotionEvent.ACTION_UP: {
+ GodotLib.touch(2,0,evcount,arr);
+ //for(int i=0;i<event.getPointerCount();i++) {
+ // System.out.printf("%d - up! %f,%f\n",i, event.getX(i),event.getY(i));
+ //}
+ } break;
+
+ }
+ return true;
+ }
+
+}
diff --git a/platform/android/.old/java/src/com/android/godot/GodotIO.java b/platform/android/.old/java/src/com/android/godot/GodotIO.java
new file mode 100644
index 0000000000..a673f79b8d
--- /dev/null
+++ b/platform/android/.old/java/src/com/android/godot/GodotIO.java
@@ -0,0 +1,277 @@
+
+package com.android.godot;
+import java.util.HashMap;
+
+import android.content.res.AssetManager;
+import java.io.InputStream;
+import java.io.IOException;
+
+// Wrapper for native library
+
+public class GodotIO {
+
+
+ AssetManager am;
+
+
+ /// FILES
+
+ public int last_file_id=1;
+
+ class AssetData {
+
+
+ public boolean eof=false;
+ public String path;
+ public InputStream is;
+ public int len;
+ public int pos;
+ }
+
+
+ HashMap<Integer,AssetData> streams;
+
+
+ public int file_open(String path,boolean write) {
+
+ System.out.printf("file_open: Attempt to Open %s\n",path);
+
+ if (write)
+ return -1;
+
+
+ AssetData ad = new AssetData();
+
+ try {
+ ad.is = am.open(path);
+
+ } catch (Exception e) {
+
+ System.out.printf("Exception on file_open: %s\n",e);
+ return -1;
+ }
+
+ try {
+ ad.len=ad.is.available();
+ } catch (Exception e) {
+
+ System.out.printf("Exception availabling on file_open: %s\n",e);
+ return -1;
+ }
+
+ ad.path=path;
+ ad.pos=0;
+ ++last_file_id;
+ streams.put(last_file_id,ad);
+
+ return last_file_id;
+ }
+ public int file_get_size(int id) {
+
+ if (!streams.containsKey(id)) {
+ System.out.printf("file_get_size: Invalid file id: %d\n",id);
+ return -1;
+ }
+
+ return streams.get(id).len;
+
+ }
+ public void file_seek(int id,int bytes) {
+
+ if (!streams.containsKey(id)) {
+ System.out.printf("file_get_size: Invalid file id: %d\n",id);
+ return;
+ }
+ //seek sucks
+ AssetData ad = streams.get(id);
+ if (bytes>ad.len)
+ bytes=ad.len;
+ if (bytes<0)
+ bytes=0;
+
+ try {
+
+ if (bytes > (int)ad.pos) {
+ int todo=bytes-(int)ad.pos;
+ while(todo>0) {
+ todo-=ad.is.skip(todo);
+ }
+ ad.pos=bytes;
+ } else if (bytes<(int)ad.pos) {
+
+ ad.is=am.open(ad.path);
+
+ ad.pos=bytes;
+ int todo=bytes;
+ while(todo>0) {
+ todo-=ad.is.skip(todo);
+ }
+ }
+
+ ad.eof=false;
+ } catch (IOException e) {
+
+ System.out.printf("Exception on file_seek: %s\n",e);
+ return;
+ }
+
+
+ }
+
+ public int file_tell(int id) {
+
+ if (!streams.containsKey(id)) {
+ System.out.printf("file_read: Can't tell eof for invalid file id: %d\n",id);
+ return 0;
+ }
+
+ AssetData ad = streams.get(id);
+ return ad.pos;
+ }
+ public boolean file_eof(int id) {
+
+ if (!streams.containsKey(id)) {
+ System.out.printf("file_read: Can't check eof for invalid file id: %d\n",id);
+ return false;
+ }
+
+ AssetData ad = streams.get(id);
+ return ad.eof;
+ }
+
+ public byte[] file_read(int id, int bytes) {
+
+ if (!streams.containsKey(id)) {
+ System.out.printf("file_read: Can't read invalid file id: %d\n",id);
+ return new byte[0];
+ }
+
+
+ AssetData ad = streams.get(id);
+
+ if (ad.pos + bytes > ad.len) {
+
+ bytes=ad.len-ad.pos;
+ ad.eof=true;
+ }
+
+
+ if (bytes==0) {
+
+ return new byte[0];
+ }
+
+
+
+ byte[] buf1=new byte[bytes];
+ int r=0;
+ try {
+ r = ad.is.read(buf1);
+ } catch (IOException e) {
+
+ System.out.printf("Exception on file_read: %s\n",e);
+ return new byte[bytes];
+ }
+
+ if (r==0) {
+ return new byte[0];
+ }
+
+ ad.pos+=r;
+
+ if (r<bytes) {
+
+ byte[] buf2=new byte[r];
+ for(int i=0;i<r;i++)
+ buf2[i]=buf1[i];
+ return buf2;
+ } else {
+
+ return buf1;
+ }
+
+ }
+
+ public void file_close(int id) {
+
+ if (!streams.containsKey(id)) {
+ System.out.printf("file_close: Can't close invalid file id: %d\n",id);
+ return;
+ }
+
+ streams.remove(id);
+
+ }
+
+
+ /// DIRECTORIES
+
+
+ class AssetDir {
+
+ public String[] files;
+ public int current;
+ }
+
+ public int last_dir_id=1;
+
+ HashMap<Integer,AssetDir> dirs;
+
+ public int dir_open(String path) {
+
+ AssetDir ad = new AssetDir();
+ ad.current=0;
+
+ try {
+ ad.files = am.list(path);
+ } catch (IOException e) {
+
+ System.out.printf("Exception on dir_open: %s\n",e);
+ return -1;
+ }
+
+ ++last_dir_id;
+ dirs.put(last_dir_id,ad);
+
+ return last_dir_id;
+
+ }
+
+ public String dir_next(int id) {
+
+ if (!dirs.containsKey(id)) {
+ System.out.printf("dir_next: invalid dir id: %d\n",id);
+ return "";
+ }
+
+ AssetDir ad = dirs.get(id);
+ if (ad.current>=ad.files.length)
+ return "";
+ String r = ad.files[ad.current];
+ ad.current++;
+ return r;
+
+ }
+
+ public void dir_close(int id) {
+
+ if (!dirs.containsKey(id)) {
+ System.out.printf("dir_close: invalid dir id: %d\n",id);
+ return;
+ }
+
+ dirs.remove(id);
+ }
+
+
+ GodotIO(AssetManager p_am) {
+
+ am=p_am;
+ streams=new HashMap<Integer,AssetData>();
+ dirs=new HashMap<Integer,AssetDir>();
+
+
+ }
+
+
+}
diff --git a/platform/android/.old/java/src/com/android/godot/GodotLib.java b/platform/android/.old/java/src/com/android/godot/GodotLib.java
new file mode 100644
index 0000000000..2ef49a5222
--- /dev/null
+++ b/platform/android/.old/java/src/com/android/godot/GodotLib.java
@@ -0,0 +1,22 @@
+package com.android.godot;
+
+// Wrapper for native library
+
+public class GodotLib {
+
+
+ public static GodotIO io;
+
+ static {
+ System.loadLibrary("godot_android");
+ }
+
+ /**
+ * @param width the current view width
+ * @param height the current view height
+ */
+
+ public static native void init(int width, int height);
+ public static native void step();
+ public static native void touch(int what,int pointer,int howmany, int[] arr);
+}
diff --git a/platform/android/.old/java/src/com/android/godot/GodotView.java b/platform/android/.old/java/src/com/android/godot/GodotView.java
new file mode 100644
index 0000000000..c5eb3d17ad
--- /dev/null
+++ b/platform/android/.old/java/src/com/android/godot/GodotView.java
@@ -0,0 +1,319 @@
+package com.android.godot;
+import android.content.Context;
+import android.graphics.PixelFormat;
+import android.opengl.GLSurfaceView;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.content.ContextWrapper;
+
+import java.io.File;
+import javax.microedition.khronos.egl.EGL10;
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.egl.EGLContext;
+import javax.microedition.khronos.egl.EGLDisplay;
+import javax.microedition.khronos.opengles.GL10;
+
+/**
+ * A simple GLSurfaceView sub-class that demonstrate how to perform
+ * OpenGL ES 2.0 rendering into a GL Surface. Note the following important
+ * details:
+ *
+ * - The class must use a custom context factory to enable 2.0 rendering.
+ * See ContextFactory class definition below.
+ *
+ * - The class must use a custom EGLConfigChooser to be able to select
+ * an EGLConfig that supports 2.0. This is done by providing a config
+ * specification to eglChooseConfig() that has the attribute
+ * EGL10.ELG_RENDERABLE_TYPE containing the EGL_OPENGL_ES2_BIT flag
+ * set. See ConfigChooser class definition below.
+ *
+ * - The class must select the surface's format, then choose an EGLConfig
+ * that matches it exactly (with regards to red/green/blue/alpha channels
+ * bit depths). Failure to do so would result in an EGL_BAD_MATCH error.
+ */
+class GodotView extends GLSurfaceView {
+ private static String TAG = "GodotView";
+ private static final boolean DEBUG = false;
+ private static Context ctx;
+
+ private static GodotIO io;
+
+ public GodotView(Context context,GodotIO p_io) {
+ super(context);
+ ctx=context;
+ io=p_io;
+
+ init(false, 0, 0);
+ }
+
+ public GodotView(Context context, boolean translucent, int depth, int stencil) {
+ super(context);
+ init(translucent, depth, stencil);
+ }
+
+ private void init(boolean translucent, int depth, int stencil) {
+
+ /* By default, GLSurfaceView() creates a RGB_565 opaque surface.
+ * If we want a translucent one, we should change the surface's
+ * format here, using PixelFormat.TRANSLUCENT for GL Surfaces
+ * is interpreted as any 32-bit surface with alpha by SurfaceFlinger.
+ */
+ if (translucent) {
+ this.getHolder().setFormat(PixelFormat.TRANSLUCENT);
+ }
+
+ /* Setup the context factory for 2.0 rendering.
+ * See ContextFactory class definition below
+ */
+ setEGLContextFactory(new ContextFactory());
+
+ /* We need to choose an EGLConfig that matches the format of
+ * our surface exactly. This is going to be done in our
+ * custom config chooser. See ConfigChooser class definition
+ * below.
+ */
+ setEGLConfigChooser( translucent ?
+ new ConfigChooser(8, 8, 8, 8, depth, stencil) :
+ new ConfigChooser(5, 6, 5, 0, depth, stencil) );
+
+ /* Set the renderer responsible for frame rendering */
+ setRenderer(new Renderer());
+ }
+
+ private static class ContextFactory implements GLSurfaceView.EGLContextFactory {
+ private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
+ public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
+ Log.w(TAG, "creating OpenGL ES 2.0 context");
+ checkEglError("Before eglCreateContext", egl);
+ int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE };
+ EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);
+ checkEglError("After eglCreateContext", egl);
+ return context;
+ }
+
+ public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context) {
+ egl.eglDestroyContext(display, context);
+ }
+ }
+
+ private static void checkEglError(String prompt, EGL10 egl) {
+ int error;
+ while ((error = egl.eglGetError()) != EGL10.EGL_SUCCESS) {
+ Log.e(TAG, String.format("%s: EGL error: 0x%x", prompt, error));
+ }
+ }
+
+ private static class ConfigChooser implements GLSurfaceView.EGLConfigChooser {
+
+ public ConfigChooser(int r, int g, int b, int a, int depth, int stencil) {
+ mRedSize = r;
+ mGreenSize = g;
+ mBlueSize = b;
+ mAlphaSize = a;
+ mDepthSize = depth;
+ mStencilSize = stencil;
+ }
+
+ /* This EGL config specification is used to specify 2.0 rendering.
+ * We use a minimum size of 4 bits for red/green/blue, but will
+ * perform actual matching in chooseConfig() below.
+ */
+ private static int EGL_OPENGL_ES2_BIT = 4;
+ private static int[] s_configAttribs2 =
+ {
+ EGL10.EGL_RED_SIZE, 4,
+ EGL10.EGL_GREEN_SIZE, 4,
+ EGL10.EGL_BLUE_SIZE, 4,
+ EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+ EGL10.EGL_NONE
+ };
+
+ public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {
+
+ /* Get the number of minimally matching EGL configurations
+ */
+ int[] num_config = new int[1];
+ egl.eglChooseConfig(display, s_configAttribs2, null, 0, num_config);
+
+ int numConfigs = num_config[0];
+
+ if (numConfigs <= 0) {
+ throw new IllegalArgumentException("No configs match configSpec");
+ }
+
+ /* Allocate then read the array of minimally matching EGL configs
+ */
+ EGLConfig[] configs = new EGLConfig[numConfigs];
+ egl.eglChooseConfig(display, s_configAttribs2, configs, numConfigs, num_config);
+
+ if (DEBUG) {
+ printConfigs(egl, display, configs);
+ }
+ /* Now return the "best" one
+ */
+ return chooseConfig(egl, display, configs);
+ }
+
+ public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display,
+ EGLConfig[] configs) {
+ for(EGLConfig config : configs) {
+ int d = findConfigAttrib(egl, display, config,
+ EGL10.EGL_DEPTH_SIZE, 0);
+ int s = findConfigAttrib(egl, display, config,
+ EGL10.EGL_STENCIL_SIZE, 0);
+
+ // We need at least mDepthSize and mStencilSize bits
+ if (d < mDepthSize || s < mStencilSize)
+ continue;
+
+ // We want an *exact* match for red/green/blue/alpha
+ int r = findConfigAttrib(egl, display, config,
+ EGL10.EGL_RED_SIZE, 0);
+ int g = findConfigAttrib(egl, display, config,
+ EGL10.EGL_GREEN_SIZE, 0);
+ int b = findConfigAttrib(egl, display, config,
+ EGL10.EGL_BLUE_SIZE, 0);
+ int a = findConfigAttrib(egl, display, config,
+ EGL10.EGL_ALPHA_SIZE, 0);
+
+ if (r == mRedSize && g == mGreenSize && b == mBlueSize && a == mAlphaSize)
+ return config;
+ }
+ return null;
+ }
+
+ private int findConfigAttrib(EGL10 egl, EGLDisplay display,
+ EGLConfig config, int attribute, int defaultValue) {
+
+ if (egl.eglGetConfigAttrib(display, config, attribute, mValue)) {
+ return mValue[0];
+ }
+ return defaultValue;
+ }
+
+ private void printConfigs(EGL10 egl, EGLDisplay display,
+ EGLConfig[] configs) {
+ int numConfigs = configs.length;
+ Log.w(TAG, String.format("%d configurations", numConfigs));
+ for (int i = 0; i < numConfigs; i++) {
+ Log.w(TAG, String.format("Configuration %d:\n", i));
+ printConfig(egl, display, configs[i]);
+ }
+ }
+
+ private void printConfig(EGL10 egl, EGLDisplay display,
+ EGLConfig config) {
+ int[] attributes = {
+ EGL10.EGL_BUFFER_SIZE,
+ EGL10.EGL_ALPHA_SIZE,
+ EGL10.EGL_BLUE_SIZE,
+ EGL10.EGL_GREEN_SIZE,
+ EGL10.EGL_RED_SIZE,
+ EGL10.EGL_DEPTH_SIZE,
+ EGL10.EGL_STENCIL_SIZE,
+ EGL10.EGL_CONFIG_CAVEAT,
+ EGL10.EGL_CONFIG_ID,
+ EGL10.EGL_LEVEL,
+ EGL10.EGL_MAX_PBUFFER_HEIGHT,
+ EGL10.EGL_MAX_PBUFFER_PIXELS,
+ EGL10.EGL_MAX_PBUFFER_WIDTH,
+ EGL10.EGL_NATIVE_RENDERABLE,
+ EGL10.EGL_NATIVE_VISUAL_ID,
+ EGL10.EGL_NATIVE_VISUAL_TYPE,
+ 0x3030, // EGL10.EGL_PRESERVED_RESOURCES,
+ EGL10.EGL_SAMPLES,
+ EGL10.EGL_SAMPLE_BUFFERS,
+ EGL10.EGL_SURFACE_TYPE,
+ EGL10.EGL_TRANSPARENT_TYPE,
+ EGL10.EGL_TRANSPARENT_RED_VALUE,
+ EGL10.EGL_TRANSPARENT_GREEN_VALUE,
+ EGL10.EGL_TRANSPARENT_BLUE_VALUE,
+ 0x3039, // EGL10.EGL_BIND_TO_TEXTURE_RGB,
+ 0x303A, // EGL10.EGL_BIND_TO_TEXTURE_RGBA,
+ 0x303B, // EGL10.EGL_MIN_SWAP_INTERVAL,
+ 0x303C, // EGL10.EGL_MAX_SWAP_INTERVAL,
+ EGL10.EGL_LUMINANCE_SIZE,
+ EGL10.EGL_ALPHA_MASK_SIZE,
+ EGL10.EGL_COLOR_BUFFER_TYPE,
+ EGL10.EGL_RENDERABLE_TYPE,
+ 0x3042 // EGL10.EGL_CONFORMANT
+ };
+ String[] names = {
+ "EGL_BUFFER_SIZE",
+ "EGL_ALPHA_SIZE",
+ "EGL_BLUE_SIZE",
+ "EGL_GREEN_SIZE",
+ "EGL_RED_SIZE",
+ "EGL_DEPTH_SIZE",
+ "EGL_STENCIL_SIZE",
+ "EGL_CONFIG_CAVEAT",
+ "EGL_CONFIG_ID",
+ "EGL_LEVEL",
+ "EGL_MAX_PBUFFER_HEIGHT",
+ "EGL_MAX_PBUFFER_PIXELS",
+ "EGL_MAX_PBUFFER_WIDTH",
+ "EGL_NATIVE_RENDERABLE",
+ "EGL_NATIVE_VISUAL_ID",
+ "EGL_NATIVE_VISUAL_TYPE",
+ "EGL_PRESERVED_RESOURCES",
+ "EGL_SAMPLES",
+ "EGL_SAMPLE_BUFFERS",
+ "EGL_SURFACE_TYPE",
+ "EGL_TRANSPARENT_TYPE",
+ "EGL_TRANSPARENT_RED_VALUE",
+ "EGL_TRANSPARENT_GREEN_VALUE",
+ "EGL_TRANSPARENT_BLUE_VALUE",
+ "EGL_BIND_TO_TEXTURE_RGB",
+ "EGL_BIND_TO_TEXTURE_RGBA",
+ "EGL_MIN_SWAP_INTERVAL",
+ "EGL_MAX_SWAP_INTERVAL",
+ "EGL_LUMINANCE_SIZE",
+ "EGL_ALPHA_MASK_SIZE",
+ "EGL_COLOR_BUFFER_TYPE",
+ "EGL_RENDERABLE_TYPE",
+ "EGL_CONFORMANT"
+ };
+ int[] value = new int[1];
+ for (int i = 0; i < attributes.length; i++) {
+ int attribute = attributes[i];
+ String name = names[i];
+ if ( egl.eglGetConfigAttrib(display, config, attribute, value)) {
+ Log.w(TAG, String.format(" %s: %d\n", name, value[0]));
+ } else {
+ // Log.w(TAG, String.format(" %s: failed\n", name));
+ while (egl.eglGetError() != EGL10.EGL_SUCCESS);
+ }
+ }
+ }
+
+ // Subclasses can adjust these values:
+ protected int mRedSize;
+ protected int mGreenSize;
+ protected int mBlueSize;
+ protected int mAlphaSize;
+ protected int mDepthSize;
+ protected int mStencilSize;
+ private int[] mValue = new int[1];
+ }
+
+ private static class Renderer implements GLSurfaceView.Renderer {
+
+
+ public void onDrawFrame(GL10 gl) {
+ GodotLib.step();
+ }
+
+ public void onSurfaceChanged(GL10 gl, int width, int height) {
+
+
+ System.out.printf("** CONTENT DIR %s\n",ctx.getFilesDir().getPath());
+ GodotLib.init(width, height);
+ }
+
+ public void onSurfaceCreated(GL10 gl, EGLConfig config) {
+ // Do nothing.
+ }
+ }
+}
diff --git a/platform/android/.old/java_glue.cpp b/platform/android/.old/java_glue.cpp
new file mode 100644
index 0000000000..38dbcc104f
--- /dev/null
+++ b/platform/android/.old/java_glue.cpp
@@ -0,0 +1,181 @@
+#include "java_glue.h"
+#include "os_android.h"
+#include "main/main.h"
+#include <unistd.h>
+#include "file_access_jandroid.h"
+#include "dir_access_jandroid.h"
+
+static OS_Android *os_android=NULL;
+
+
+struct TST {
+
+ int a;
+ TST() {
+
+ a=5;
+ }
+};
+
+TST tst;
+
+struct JAndroidPointerEvent {
+
+ Vector<OS_Android::TouchPos> points;
+ int pointer;
+ int what;
+};
+
+static List<JAndroidPointerEvent> pointer_events;
+static bool initialized=false;
+static Mutex *input_mutex=NULL;
+
+JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_init(JNIEnv * env, jobject obj, jint width, jint height)
+{
+
+
+ if (initialized) // wtf
+ return;
+
+ __android_log_print(ANDROID_LOG_INFO,"godot","**INIT EVENT! - %p\n",env);
+
+
+ initialized=true;
+
+ __android_log_print(ANDROID_LOG_INFO,"godot","***************** HELLO FROM JNI!!!!!!!!");
+
+ {
+ //setup IO Object
+
+ jclass cls = env->FindClass("com/android/godot/Godot");
+ if (cls) {
+
+ cls=(jclass)env->NewGlobalRef(cls);
+ __android_log_print(ANDROID_LOG_INFO,"godot","*******CLASS FOUND!!!");
+ }
+ __android_log_print(ANDROID_LOG_INFO,"godot","STEP2, %p",cls);
+ jfieldID fid = env->GetStaticFieldID(cls, "io", "Lcom/android/godot/GodotIO;");
+ __android_log_print(ANDROID_LOG_INFO,"godot","STEP3 %i",fid);
+ jobject ob = env->GetStaticObjectField(cls,fid);
+ __android_log_print(ANDROID_LOG_INFO,"godot","STEP4, %p",ob);
+ jobject gob = env->NewGlobalRef(ob);
+
+
+ FileAccessJAndroid::setup(env,gob);
+ DirAccessJAndroid::setup(env,gob);
+ }
+
+
+
+ os_android = new OS_Android(width,height);
+
+ char wd[500];
+ getcwd(wd,500);
+
+ __android_log_print(ANDROID_LOG_INFO,"godot","test construction %i\n",tst.a);
+ __android_log_print(ANDROID_LOG_INFO,"godot","running from dir %s\n",wd);
+
+ __android_log_print(ANDROID_LOG_INFO,"godot","**SETUP");
+
+
+
+#if 0
+ char *args[]={"-test","render",NULL};
+ __android_log_print(ANDROID_LOG_INFO,"godot","pre asdasd setup...");
+ Error err = Main::setup("apk",2,args);
+#else
+ Error err = Main::setup("apk",0,NULL);
+#endif
+ if (err!=OK) {
+ __android_log_print(ANDROID_LOG_INFO,"godot","*****UNABLE TO SETUP");
+
+ return; //should exit instead and print the error
+ }
+
+ __android_log_print(ANDROID_LOG_INFO,"godot","**START");
+
+
+ if (!Main::start()) {
+
+ return; //should exit instead and print the error
+ }
+ input_mutex=Mutex::create();
+
+ os_android->main_loop_begin();
+
+
+}
+
+JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_step(JNIEnv * env, jobject obj)
+{
+
+ __android_log_print(ANDROID_LOG_INFO,"godot","**STEP EVENT! - %p-%i\n",env,Thread::get_caller_ID());
+
+
+
+
+ {
+
+ FileAccessJAndroid::update_env(env);
+ DirAccessJAndroid::update_env(env);
+ }
+
+ input_mutex->lock();
+
+ while(pointer_events.size()) {
+
+ JAndroidPointerEvent jpe=pointer_events.front()->get();
+ os_android->process_touch(jpe.what,jpe.pointer,jpe.points);
+ pointer_events.pop_front();
+ }
+
+ input_mutex->unlock();
+
+
+ if (os_android->main_loop_iterate()==true) {
+
+ return; //should exit instead
+ }
+
+
+}
+
+JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_touch(JNIEnv * env, jobject obj, jint ev,jint pointer, jint count, jintArray positions) {
+
+
+
+ __android_log_print(ANDROID_LOG_INFO,"godot","**TOUCH EVENT! - %p-%i\n",env,Thread::get_caller_ID());
+
+
+
+
+
+ Vector<OS_Android::TouchPos> points;
+ for(int i=0;i<count;i++) {
+
+ jint p[3];
+ env->GetIntArrayRegion(positions,i*3,3,p);
+ OS_Android::TouchPos tp;
+ tp.pos=Point2(p[1],p[2]);
+ tp.id=p[0];
+ points.push_back(tp);
+ }
+
+ JAndroidPointerEvent jpe;
+ jpe.pointer=pointer;
+ jpe.points=points;
+ jpe.what=ev;
+
+ input_mutex->lock();
+
+ pointer_events.push_back(jpe);
+
+ input_mutex->unlock();
+ //if (os_android)
+// os_android->process_touch(ev,pointer,points);
+
+}
+
+//Main::cleanup();
+
+//return os.get_exit_code();
diff --git a/platform/android/.old/java_glue.h b/platform/android/.old/java_glue.h
new file mode 100644
index 0000000000..9940af3d7d
--- /dev/null
+++ b/platform/android/.old/java_glue.h
@@ -0,0 +1,16 @@
+#ifndef JAVA_GLUE_H
+#define JAVA_GLUE_H
+
+#include <jni.h>
+#include <android/log.h>
+
+
+extern "C" {
+ JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_init(JNIEnv * env, jobject obj, jint width, jint height);
+ JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_step(JNIEnv * env, jobject obj);
+ JNIEXPORT void JNICALL Java_com_android_godot_GodotLib_touch(JNIEnv * env, jobject obj, jint ev,jint pointer, jint count, jintArray positions);
+};
+
+
+
+#endif // JAVA_GLUE_H
diff --git a/platform/android/.old/os_android.cpp b/platform/android/.old/os_android.cpp
new file mode 100644
index 0000000000..ecd87a3af9
--- /dev/null
+++ b/platform/android/.old/os_android.cpp
@@ -0,0 +1,426 @@
+
+#include "os_android.h"
+#include "java_glue.h"
+#include "drivers/gles2/rasterizer_gles2.h"
+#include "servers/visual/visual_server_raster.h"
+
+#include "file_access_jandroid.h"
+#include "dir_access_jandroid.h"
+#include "core/io/file_access_buffered_fa.h"
+#include "main/main.h"
+int OS_Android::get_video_driver_count() const {
+
+ return 1;
+}
+const char * OS_Android::get_video_driver_name(int p_driver) const {
+
+ return "GLES2";
+}
+
+OS::VideoMode OS_Android::get_default_video_mode() const {
+
+ return OS::VideoMode();
+}
+
+int OS_Android::get_audio_driver_count() const {
+
+ return 1;
+}
+const char * OS_Android::get_audio_driver_name(int p_driver) const {
+
+ return "Android";
+}
+
+void OS_Android::initialize_core() {
+
+ OS_Unix::initialize_core();
+ //FileAccessJAndroid::make_default();
+ DirAccessJAndroid::make_default();
+ FileAccessBufferedFA<FileAccessJAndroid>::make_default();
+
+
+}
+
+void OS_Android::initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver) {
+
+ AudioDriverManagerSW::add_driver(&audio_driver_android);
+
+ rasterizer = memnew( RasterizerGLES2 );
+ visual_server = memnew( VisualServerRaster(rasterizer) );
+ visual_server->init();
+ visual_server->cursor_set_visible(false, 0);
+
+ AudioDriverManagerSW::get_driver(p_audio_driver)->set_singleton();
+
+ if (AudioDriverManagerSW::get_driver(p_audio_driver)->init()!=OK) {
+
+ ERR_PRINT("Initializing audio failed.");
+ }
+
+ sample_manager = memnew( SampleManagerMallocSW );
+ audio_server = memnew( AudioServerSW(sample_manager) );
+
+ audio_server->set_mixer_params(AudioMixerSW::INTERPOLATION_LINEAR,false);
+ audio_server->init();
+
+ spatial_sound_server = memnew( SpatialSoundServerSW );
+ spatial_sound_server->init();
+
+ spatial_sound_2d_server = memnew( SpatialSound2DServerSW );
+ spatial_sound_2d_server->init();
+
+ //
+ physics_server = memnew( PhysicsServerSW );
+ physics_server->init();
+ physics_2d_server = memnew( Physics2DServerSW );
+ physics_2d_server->init();
+
+ input = memnew( InputDefault );
+
+
+}
+
+void OS_Android::set_main_loop( MainLoop * p_main_loop ) {
+
+
+
+ main_loop=p_main_loop;
+}
+
+void OS_Android::delete_main_loop() {
+
+ memdelete( main_loop );
+}
+
+void OS_Android::finalize() {
+
+ memdelete(input);
+
+}
+
+
+void OS_Android::vprint(const char* p_format, va_list p_list, bool p_stderr) {
+
+ __android_log_vprint(p_stderr?ANDROID_LOG_ERROR:ANDROID_LOG_INFO,"godot",p_format,p_list);
+}
+
+void OS_Android::print(const char *p_format, ... ) {
+
+ va_list argp;
+ va_start(argp, p_format);
+ __android_log_vprint(ANDROID_LOG_INFO,"godot",p_format,argp);
+ va_end(argp);
+
+}
+
+void OS_Android::alert(const String& p_alert) {
+
+ print("ALERT: %s\n",p_alert.utf8().get_data());
+}
+
+
+void OS_Android::set_mouse_show(bool p_show) {
+
+ //android has no mouse...
+}
+
+void OS_Android::set_mouse_grab(bool p_grab) {
+
+ //it really has no mouse...!
+}
+
+bool OS_Android::is_mouse_grab_enabled() const {
+
+ //*sigh* technology has evolved so much since i was a kid..
+ return false;
+}
+Point2 OS_Android::get_mouse_pos() const {
+
+ return Point2();
+}
+int OS_Android::get_mouse_button_state() const {
+
+ return 0;
+}
+void OS_Android::set_window_title(const String& p_title) {
+
+
+}
+
+//interesting byt not yet
+//void set_clipboard(const String& p_text);
+//String get_clipboard() const;
+
+void OS_Android::set_video_mode(const VideoMode& p_video_mode,int p_screen) {
+
+
+}
+
+OS::VideoMode OS_Android::get_video_mode(int p_screen) const {
+
+ return default_videomode;
+}
+void OS_Android::get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen) const {
+
+ p_list->push_back(default_videomode);
+}
+
+String OS_Android::get_name() {
+
+ return "Android";
+}
+
+MainLoop *OS_Android::get_main_loop() const {
+
+ return main_loop;
+}
+
+bool OS_Android::can_draw() const {
+
+ return true; //always?
+}
+
+void OS_Android::set_cursor_shape(CursorShape p_shape) {
+
+ //android really really really has no mouse.. how amazing..
+}
+
+void OS_Android::main_loop_begin() {
+
+ if (main_loop)
+ main_loop->init();
+}
+bool OS_Android::main_loop_iterate() {
+
+ if (!main_loop)
+ return false;
+ return Main::iteration();
+}
+
+void OS_Android::main_loop_end() {
+
+ if (main_loop)
+ main_loop->finish();
+
+}
+
+void OS_Android::process_touch(int p_what,int p_pointer, const Vector<TouchPos>& p_points) {
+
+
+
+ switch(p_what) {
+ case 0: { //gesture begin
+
+ if (touch.size()) {
+ //end all if exist
+ InputEvent ev;
+ ev.type=InputEvent::MOUSE_BUTTON;
+ ev.ID=++last_id;
+ ev.mouse_button.button_index=BUTTON_LEFT;
+ ev.mouse_button.button_mask=BUTTON_MASK_LEFT;
+ ev.mouse_button.pressed=false;
+ ev.mouse_button.x=touch[0].pos.x;
+ ev.mouse_button.y=touch[0].pos.y;
+ ev.mouse_button.global_x=touch[0].pos.x;
+ ev.mouse_button.global_y=touch[0].pos.y;
+ main_loop->input_event(ev);
+
+
+ for(int i=0;i<touch.size();i++) {
+
+ InputEvent ev;
+ ev.type=InputEvent::SCREEN_TOUCH;
+ ev.ID=++last_id;
+ ev.screen_touch.index=touch[i].id;
+ ev.screen_touch.pressed=false;
+ ev.screen_touch.x=touch[i].pos.x;
+ ev.screen_touch.y=touch[i].pos.y;
+ main_loop->input_event(ev);
+
+ }
+ }
+
+ touch.resize(p_points.size());
+ for(int i=0;i<p_points.size();i++) {
+ touch[i].id=p_points[i].id;
+ touch[i].pos=p_points[i].pos;
+ }
+
+ {
+ //send mouse
+ InputEvent ev;
+ ev.type=InputEvent::MOUSE_BUTTON;
+ ev.ID=++last_id;
+ ev.mouse_button.button_index=BUTTON_LEFT;
+ ev.mouse_button.button_mask=BUTTON_MASK_LEFT;
+ ev.mouse_button.pressed=true;
+ ev.mouse_button.x=touch[0].pos.x;
+ ev.mouse_button.y=touch[0].pos.y;
+ ev.mouse_button.global_x=touch[0].pos.x;
+ ev.mouse_button.global_y=touch[0].pos.y;
+ last_mouse=touch[0].pos;
+ main_loop->input_event(ev);
+ }
+
+
+ //send touch
+ for(int i=0;i<touch.size();i++) {
+
+ InputEvent ev;
+ ev.type=InputEvent::SCREEN_TOUCH;
+ ev.ID=++last_id;
+ ev.screen_touch.index=touch[i].id;
+ ev.screen_touch.pressed=true;
+ ev.screen_touch.x=touch[i].pos.x;
+ ev.screen_touch.y=touch[i].pos.y;
+ main_loop->input_event(ev);
+ }
+
+ } break;
+ case 1: { //motion
+
+
+ if (p_points.size()) {
+ //send mouse, should look for point 0?
+ InputEvent ev;
+ ev.type=InputEvent::MOUSE_MOTION;
+ ev.ID=++last_id;
+ ev.mouse_motion.button_mask=BUTTON_MASK_LEFT;
+ ev.mouse_motion.x=p_points[0].pos.x;
+ ev.mouse_motion.y=p_points[0].pos.y;
+ input->set_mouse_pos(Point2(ev.mouse_motion.x,ev.mouse_motion.y));
+ ev.mouse_motion.speed_x=input->get_mouse_speed().x;
+ ev.mouse_motion.speed_y=input->get_mouse_speed().y;
+ ev.mouse_motion.relative_x=p_points[0].pos.x-last_mouse.x;
+ ev.mouse_motion.relative_y=p_points[0].pos.y-last_mouse.y;
+ last_mouse=p_points[0].pos;
+ main_loop->input_event(ev);
+ }
+
+ ERR_FAIL_COND(touch.size()!=p_points.size());
+
+ for(int i=0;i<touch.size();i++) {
+
+ int idx=-1;
+ for(int j=0;j<p_points.size();j++) {
+
+ if (touch[i].id==p_points[j].id) {
+ idx=j;
+ break;
+ }
+
+ }
+
+ ERR_CONTINUE(idx==-1);
+
+ if (touch[i].pos==p_points[idx].pos)
+ continue; //no move unncesearily
+
+ InputEvent ev;
+ ev.type=InputEvent::SCREEN_DRAG;
+ ev.ID=++last_id;
+ ev.screen_drag.index=touch[i].id;
+ ev.screen_drag.x=p_points[idx].pos.x;
+ ev.screen_drag.y=p_points[idx].pos.y;
+ ev.screen_drag.x=p_points[idx].pos.x - touch[i].pos.x;
+ ev.screen_drag.y=p_points[idx].pos.y - touch[i].pos.y;
+ main_loop->input_event(ev);
+ touch[i].pos=p_points[idx].pos;
+ }
+
+
+ } break;
+ case 2: { //release
+
+
+
+ if (touch.size()) {
+ //end all if exist
+ InputEvent ev;
+ ev.type=InputEvent::MOUSE_BUTTON;
+ ev.ID=++last_id;
+ ev.mouse_button.button_index=BUTTON_LEFT;
+ ev.mouse_button.button_mask=BUTTON_MASK_LEFT;
+ ev.mouse_button.pressed=false;
+ ev.mouse_button.x=touch[0].pos.x;
+ ev.mouse_button.y=touch[0].pos.y;
+ ev.mouse_button.global_x=touch[0].pos.x;
+ ev.mouse_button.global_y=touch[0].pos.y;
+ main_loop->input_event(ev);
+
+
+ for(int i=0;i<touch.size();i++) {
+
+ InputEvent ev;
+ ev.type=InputEvent::SCREEN_TOUCH;
+ ev.ID=++last_id;
+ ev.screen_touch.index=touch[i].id;
+ ev.screen_touch.pressed=false;
+ ev.screen_touch.x=touch[i].pos.x;
+ ev.screen_touch.y=touch[i].pos.y;
+ main_loop->input_event(ev);
+
+ }
+ }
+
+ } break;
+ case 3: { // add tuchi
+
+
+
+
+
+ ERR_FAIL_INDEX(p_pointer,p_points.size());
+
+ TouchPos tp=p_points[p_pointer];
+ touch.push_back(tp);
+
+ InputEvent ev;
+ ev.type=InputEvent::SCREEN_TOUCH;
+ ev.ID=++last_id;
+ ev.screen_touch.index=tp.id;
+ ev.screen_touch.pressed=true;
+ ev.screen_touch.x=tp.pos.x;
+ ev.screen_touch.y=tp.pos.y;
+ main_loop->input_event(ev);
+
+ } break;
+ case 4: {
+
+
+ for(int i=0;i<touch.size();i++) {
+ if (touch[i].id==p_pointer) {
+
+ InputEvent ev;
+ ev.type=InputEvent::SCREEN_TOUCH;
+ ev.ID=++last_id;
+ ev.screen_touch.index=touch[i].id;
+ ev.screen_touch.pressed=false;
+ ev.screen_touch.x=touch[i].pos.x;
+ ev.screen_touch.y=touch[i].pos.y;
+ main_loop->input_event(ev);
+ touch.remove(i);
+ i--;
+ }
+ }
+
+ } break;
+
+ }
+
+}
+
+OS_Android::OS_Android(int p_video_width,int p_video_height) {
+
+ default_videomode.width=p_video_width;
+ default_videomode.height=p_video_height;
+ default_videomode.fullscreen=true;
+ default_videomode.resizable=false;
+ main_loop=NULL;
+ last_id=1;
+}
+
+OS_Android::~OS_Android() {
+
+
+}
diff --git a/platform/android/.old/os_android.h b/platform/android/.old/os_android.h
new file mode 100644
index 0000000000..25ed84851a
--- /dev/null
+++ b/platform/android/.old/os_android.h
@@ -0,0 +1,108 @@
+#ifndef OS_ANDROID_H
+#define OS_ANDROID_H
+
+#include "os/input.h"
+#include "drivers/unix/os_unix.h"
+#include "os/main_loop.h"
+#include "servers/physics/physics_server_sw.h"
+#include "servers/spatial_sound/spatial_sound_server_sw.h"
+#include "servers/spatial_sound_2d/spatial_sound_2d_server_sw.h"
+#include "servers/audio/audio_server_sw.h"
+#include "servers/physics_2d/physics_2d_server_sw.h"
+#include "servers/visual/rasterizer.h"
+#include "audio_driver_android.h"
+
+class OS_Android : public OS_Unix {
+public:
+
+ struct TouchPos {
+ int id;
+ Point2 pos;
+ };
+private:
+
+ Vector<TouchPos> touch;
+
+ Point2 last_mouse;
+ unsigned int last_id;
+
+
+ Rasterizer *rasterizer;
+ VisualServer *visual_server;
+// AudioDriverPSP audio_driver_psp;
+ AudioServerSW *audio_server;
+ SampleManagerMallocSW *sample_manager;
+ SpatialSoundServerSW *spatial_sound_server;
+ SpatialSound2DServerSW *spatial_sound_2d_server;
+ PhysicsServer *physics_server;
+ Physics2DServer *physics_2d_server;
+ AudioDriverAndroid audio_driver_android;
+ InputDefault *input;
+
+ VideoMode default_videomode;
+ MainLoop * main_loop;
+public:
+
+
+ void initialize_core();
+
+ // functions used by main to initialize/deintialize the OS
+ virtual int get_video_driver_count() const;
+ virtual const char * get_video_driver_name(int p_driver) const;
+
+ virtual VideoMode get_default_video_mode() const;
+
+ virtual int get_audio_driver_count() const;
+ virtual const char * get_audio_driver_name(int p_driver) const;
+
+ virtual void initialize(const VideoMode& p_desired,int p_video_driver,int p_audio_driver);
+
+ virtual void set_main_loop( MainLoop * p_main_loop );
+ virtual void delete_main_loop();
+
+ virtual void finalize();
+
+
+ typedef int64_t ProcessID;
+
+ static OS* get_singleton();
+
+ virtual void vprint(const char* p_format, va_list p_list, bool p_stderr=false);
+ virtual void print(const char *p_format, ... );
+ virtual void alert(const String& p_alert);
+
+
+ virtual void set_mouse_show(bool p_show);
+ virtual void set_mouse_grab(bool p_grab);
+ virtual bool is_mouse_grab_enabled() const;
+ virtual Point2 get_mouse_pos() const;
+ virtual int get_mouse_button_state() const;
+ virtual void set_window_title(const String& p_title);
+
+ //virtual void set_clipboard(const String& p_text);
+ //virtual String get_clipboard() const;
+
+ virtual void set_screen_orientation(ScreenOrientation p_orientation);
+
+ virtual void set_video_mode(const VideoMode& p_video_mode,int p_screen=0);
+ virtual VideoMode get_video_mode(int p_screen=0) const;
+ virtual void get_fullscreen_mode_list(List<VideoMode> *p_list,int p_screen=0) const;
+
+ virtual String get_name();
+ virtual MainLoop *get_main_loop() const;
+
+ virtual bool can_draw() const;
+
+ virtual void set_cursor_shape(CursorShape p_shape);
+
+ void main_loop_begin();
+ bool main_loop_iterate();
+ void main_loop_end();
+
+ void process_touch(int p_what,int p_pointer, const Vector<TouchPos>& p_points);
+ OS_Android(int p_video_width,int p_video_height);
+ ~OS_Android();
+
+};
+
+#endif
diff --git a/platform/android/.old/platform_config.h b/platform/android/.old/platform_config.h
new file mode 100644
index 0000000000..dad24432a5
--- /dev/null
+++ b/platform/android/.old/platform_config.h
@@ -0,0 +1 @@
+#include <alloca.h>
diff --git a/platform/android/.old/run_debug.sh b/platform/android/.old/run_debug.sh
new file mode 100755
index 0000000000..e39193bd55
--- /dev/null
+++ b/platform/android/.old/run_debug.sh
@@ -0,0 +1,40 @@
+
+# com.android.godot
+# for this, need to push gdbserver to device
+# adb push [location]/gdbserver /data/local
+
+# run
+
+DEBUG_PORT=5039
+GDB_PATH="$ANDROID_NDK_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gdb"
+
+#kill existing previous gdbserver if exists
+adb shell killall gdbserver
+run-as com.android.godot killall com.android.godot
+run-as com.android.godot killall gdbserver
+#get data dir of the app
+adb pull /system/bin/app_process app_process
+
+DATA_DIR=`adb shell run-as com.android.godot /system/bin/sh -c pwd | tr -d '\n\r'`
+echo "DATA DIR IS $DATA_DIR"
+#start app
+adb shell am start -n com.android.godot/com.android.godot.Godot
+#get the pid of the app
+PID=`adb shell pidof com.android.godot | tr -d '\n\r'`
+echo "PID IS: $PID hoho"
+#launch gdbserver
+DEBUG_SOCKET=debug-socket
+#echo adb shell /data/local/gdbserver +debug-socket --attach $PID
+adb shell run-as com.android.godot lib/gdbserver +$DEBUG_SOCKET --attach $PID &
+sleep 2s
+#adb shell /data/local/gdbserver localhost:$DEBUG_PORT --attach $PID &
+#setup network connection
+adb forward tcp:$DEBUG_PORT localfilesystem:$DATA_DIR/$DEBUG_SOCKET
+cp gdb.setup.base gdb.setup
+echo "target remote :$DEBUG_PORT" >> gdb.setup
+#echo "file
+$GDB_PATH -x gdb.setup
+
+
+
+