Various fixes for Android
authorJerome St-Louis <jerome@ecere.com>
Tue, 15 Jul 2014 08:02:43 +0000 (04:02 -0400)
committerJerome St-Louis <jerome@ecere.com>
Tue, 15 Jul 2014 08:02:43 +0000 (04:02 -0400)
- ecere/Service: Fixed warning on redefining __statement macro
- Object3DSFormat: Fixed broken 3DS, using 16 bit indices for 3DS
- crossplatform.mk: Added cpv command to avoid clueless fatal errors when copying non-existing files
- ide: Fixed Debug menu items not re-enabling after switching configuration
- samples: Updated and fixed configs full of bugs for Android

12 files changed:
crossplatform.mk
ecere/src/gfx/3D/models/Object3DSFormat.ec
ecere/src/net/Service.ec
ide/src/project/Workspace.ec
samples/3D/Test3D/Test3D.epj
samples/android/helloAndroid.epj
samples/games/chess/android/AndroidManifest.xml [new file with mode: 0644]
samples/games/chess/android/res/drawable-xhdpi/icon.png [new file with mode: 0644]
samples/games/chess/android/res/drawable/icon.png [new file with mode: 0644]
samples/games/chess/android/res/values/strings.xml [new file with mode: 0644]
samples/games/chess/chess.epj
samples/games/cornerBlocks/cornerBlocks.epj

index c6ffc2a..375040c 100644 (file)
@@ -240,6 +240,7 @@ ifdef WIN_SHELL_COMMANDS
    echo = $(if $(1),echo $(1))
    touch = $(if $(1),@cmd /c "for %%I in ($(call sys_path,$(1))) do @(cd %%~pI && type nul >> %%~nxI && copy /by %%~nxI+,, > nul 2>&1 && cd %%cd%%)")
    cpq = $(if $(1),@cmd /c "for %%I in ($(call sys_path,$(1))) do copy /by %%I $(call sys_path,$(2))" > nul 2>&1)
+   cpv = $(if $(1),@cmd /c "for %%I in ($(call sys_path,$(1))) do copy /by %%I $(call sys_path,$(2))")
    rmq = $(if $(1),-del /f /q $(call sys_path,$(call sys_path_list,$(1))) > nul 2>&1)
    rmrq = $(if $(1),-rmdir /q /s $(call sys_path,$(1)) > nul 2>&1)
    mkdirq = $(if $(1),-mkdir $(call sys_path,$(1)) > nul 2>&1)
@@ -249,6 +250,7 @@ else
    echo = $(if $(1),echo "$(1)")
    touch = $(if $(1),touch $(1))
    cpq = $(if $(1),cp $(1) $(2))
+   cpv = cp $(1) $(2)
    rmq = $(if $(1),-rm -f $(1))
    rmrq = $(if $(1),-rm -f -r $(1))
    mkdirq = $(if $(1),-mkdir -p $(1))
index afac62c..0dbdeda 100644 (file)
@@ -2,6 +2,16 @@ namespace gfx3D::models;
 
 import "Object"
 
+#if !defined(__ANDROID__)
+#define USE_32_BIT_INDICES true
+#define indicesMember indices32
+#define uintindex uint32
+#else
+#define USE_32_BIT_INDICES false
+#define indicesMember indices
+#define uintindex uint16
+#endif
+
 #define MAXNAMELEN   64
 
 // RGB Chunks
@@ -774,17 +784,17 @@ static bool ReadTriMesh(FileInfo * info, Object object)
                   PrimitiveSingle * triangle;
 
                   triangle = &mesh.primitives[mesh.nPrimitives++];
-                  if(mesh.AllocatePrimitive(triangle, { triangles, indices32bit = true }, 3))
+                  if(mesh.AllocatePrimitive(triangle, { triangles, indices32bit = USE_32_BIT_INDICES }, 3))
                   {
-                     triangle->indices32[0] = face->indices[0];
-                     triangle->indices32[1] = face->indices[1];
-                     triangle->indices32[2] = face->indices[2];
-                     triangle->middle.Add(mesh.vertices[triangle->indices32[0]], mesh.vertices[triangle->indices32[1]]);
-                     triangle->middle.Add(triangle->middle, mesh.vertices[triangle->indices32[2]]);
+                     triangle->indicesMember[0] = (uintindex)face->indices[0];
+                     triangle->indicesMember[1] = (uintindex)face->indices[1];
+                     triangle->indicesMember[2] = (uintindex)face->indices[2];
+                     triangle->middle.Add(mesh.vertices[triangle->indicesMember[0]], mesh.vertices[triangle->indicesMember[1]]);
+                     triangle->middle.Add(triangle->middle, mesh.vertices[triangle->indicesMember[2]]);
                      triangle->plane.FromPointsf(
-                        mesh.vertices[triangle->indices32[2]],
-                        mesh.vertices[triangle->indices32[1]],
-                        mesh.vertices[triangle->indices32[0]]);
+                        mesh.vertices[triangle->indicesMember[2]],
+                        mesh.vertices[triangle->indicesMember[1]],
+                        mesh.vertices[triangle->indicesMember[0]]);
 
                      mesh.UnlockPrimitive(triangle);
                   }
@@ -800,7 +810,7 @@ static bool ReadTriMesh(FileInfo * info, Object object)
             }
             else
             {
-               PrimitiveGroup group = mesh.AddPrimitiveGroup({ triangles, indices32bit = true }, faces.count * 3);
+               PrimitiveGroup group = mesh.AddPrimitiveGroup({ triangles, indices32bit = USE_32_BIT_INDICES }, faces.count * 3);
                if(group)
                {
                   c = 0;
@@ -811,15 +821,15 @@ static bool ReadTriMesh(FileInfo * info, Object object)
 
                      if(object.flags.flipWindings)
                      {
-                        group.indices32[c*3]   = face->indices[2];
-                        group.indices32[c*3+1] = face->indices[1];
-                        group.indices32[c*3+2] = face->indices[0];
+                        group.indicesMember[c*3]   = (uintindex)face->indices[2];
+                        group.indicesMember[c*3+1] = (uintindex)face->indices[1];
+                        group.indicesMember[c*3+2] = (uintindex)face->indices[0];
                      }
                      else
                      {
-                        group.indices32[c*3]   = face->indices[0];
-                        group.indices32[c*3+1] = face->indices[1];
-                        group.indices32[c*3+2] = face->indices[2];
+                        group.indicesMember[c*3]   = (uintindex)face->indices[0];
+                        group.indicesMember[c*3+1] = (uintindex)face->indices[1];
+                        group.indicesMember[c*3+2] = (uintindex)face->indices[2];
                      }
                      face->done = true;
                      c++;
@@ -836,7 +846,7 @@ static bool ReadTriMesh(FileInfo * info, Object object)
                count++;
          if(count)
          {
-            PrimitiveGroup group = mesh.AddPrimitiveGroup({ triangles, indices32bit = true }, count * 3);
+            PrimitiveGroup group = mesh.AddPrimitiveGroup({ triangles, indices32bit = USE_32_BIT_INDICES }, count * 3);
             if(group)
             {
                for(c = 0; c<nFaces; c++)
@@ -844,9 +854,9 @@ static bool ReadTriMesh(FileInfo * info, Object object)
                   Face * face = &info->faces[c];
                   if(!face->done)
                   {
-                     group.indices32[c*3]   = face->indices[0];
-                     group.indices32[c*3+1] = face->indices[1];
-                     group.indices32[c*3+2] = face->indices[2];
+                     group.indicesMember[c*3]   = (uintindex)face->indices[0];
+                     group.indicesMember[c*3+1] = (uintindex)face->indices[1];
+                     group.indicesMember[c*3+2] = (uintindex)face->indices[2];
                   }
                }
                mesh.UnlockPrimitiveGroup(group);
index c20b823..fb28e93 100644 (file)
@@ -1,5 +1,8 @@
-#define __statement __extension__   // To compile for Android/X86 (Need to add support to eC)
-                                    // Also had to add __extension__ to __swap16md macro in endian.h
+#ifdef __statement
+#undef __statement
+#endif
+#define __statement(x) __extension__(x)  // To compile for Android/X86 (Need to add support to eC)
+                                         // Also had to add __extension__ to __swap16md macro in endian.h
 namespace net;
 
 #ifndef ECERE_NONET
index a68dacd..bf868e4 100644 (file)
@@ -527,6 +527,7 @@ public:
          ide.projectView.Update(null);
          Save();
       }
+      ide.AdjustDebugMenus();
    }
 
    bool FindPath(ProjectNode node, const char * path)
index 0be8635..eb99c04 100644 (file)
             "PostbuildCommands" : [
                "$(call mkdirq,$(OBJ)apk/lib/x86)",
                "$(call mkdirq,$(OBJ)apk/lib/armeabi)",
-               "$(call cpq,/sdk/ecere/obj/android.linux.$(COMPILER)/libecere.so,$(OBJ)apk/lib/armeabi)",
+               "$(call cpv,../../../ecere/obj/android.linux.$(COMPILER)/libecere.so,$(OBJ)apk/lib/armeabi)",
                "$(call cpq,$(TARGET),$(OBJ)apk/lib/armeabi)",
-               "aapt package -v -f -m -M android/AndroidManifest.xml -F $(OBJ)$(MODULE)-unsigned.apk -I C:/android-sdk/platforms/android-16/android.jar -S android/res $(OBJ)apk",
-               "jarsigner -storepass mypassword -sigalg MD5withRSA -digestalg SHA1 $(OBJ)$(MODULE)-unsigned.apk mykey -signedjar $(OBJ)$(MODULE).apk",
+               "aapt package -v -f -m -M android/AndroidManifest.xml -F $(OBJ)$(MODULE)-unsigned.apk -I C:/android-sdk/platforms/android-20/android.jar -S android/res $(OBJ)apk",
+               "jarsigner -storepass android -sigalg MD5withRSA -digestalg SHA1 $(OBJ)$(MODULE)-unsigned.apk androiddebugkey -keystore c:/users/jerome/debug.keystore -signedjar $(OBJ)$(MODULE).apk",
                "adb uninstall com.ecere.$(MODULE)",
                "adb install $(OBJ)$(MODULE).apk",
                "adb shell am start -a android.intent.action.MAIN -n com.ecere.$(MODULE)/android.app.NativeActivity"
index ed34202..41bc4ee 100644 (file)
@@ -1,6 +1,6 @@
 {
    "Version" : 0.2,
-   "ModuleName" : "HelloAndroid",
+   "ModuleName" : "Hello",
    "Options" : {
       "Warnings" : "All",
       "TargetType" : "SharedLibrary",
       "PostbuildCommands" : [
          "$(call mkdirq,$(OBJ)apk/lib/armeabi)",
          "$(call mkdirq,$(OBJ)apk/lib/x86)",
-         "$(call cpq,/ecere-sdk/ecere/obj/android.linux.$(COMPILER)/libecere.so,$(OBJ)apk/lib/x86)",
-         "$(call cpq,$(TARGET),$(OBJ)apk/lib/x86)",
-         "aapt package -v -f -m -M android/AndroidManifest.xml -F $(OBJ)$(MODULE)-unsigned.apk -I C:/android-sdk/platforms/android-16/android.jar -S android/res $(OBJ)apk",
-         "jarsigner -storepass mypassword -sigalg MD5withRSA -digestalg SHA1 $(OBJ)$(MODULE)-unsigned.apk mykey -signedjar $(OBJ)$(MODULE).apk",
+         "$(call cpv,../../ecere/obj/android.linux.$(COMPILER)/libecere.so,$(OBJ)apk/lib/armeabi)",
+         "$(call cpv,$(TARGET),$(OBJ)apk/lib/armeabi)",
+         "aapt package -v -f -m -M android/AndroidManifest.xml -F $(OBJ)$(MODULE)-unsigned.apk -I C:/android-sdk/platforms/android-20/android.jar -S android/res $(OBJ)apk",
+         "jarsigner -storepass android -sigalg MD5withRSA -digestalg SHA1 $(OBJ)$(MODULE)-unsigned.apk -keystore C:/Users/Jerome/debug.keystore androiddebugkey -signedjar $(OBJ)$(MODULE).apk",
          "adb uninstall com.ecere.Hello",
          "adb install $(OBJ)$(MODULE).apk",
          "adb shell am start -a android.intent.action.MAIN -n com.ecere.Hello/android.app.NativeActivity"
@@ -40,8 +40,7 @@
          "Name" : "Release",
          "Options" : {
             "Debug" : false,
-            "Optimization" : "Speed",
-            "TargetType" : "Executable"
+            "Optimization" : "Speed"
          }
       }
    ],
diff --git a/samples/games/chess/android/AndroidManifest.xml b/samples/games/chess/android/AndroidManifest.xml
new file mode 100644 (file)
index 0000000..95da552
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- BEGIN_INCLUDE(manifest) -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.ecere.Chess"
+        android:versionCode="1"
+        android:versionName="1.0">
+
+    <!-- This is the platform API where NativeActivity was introduced. -->
+    <uses-sdk android:minSdkVersion="9" />
+    <uses-permission android:name="android.permission.INTERNET" />
+
+    <!-- This .apk has no Java code itself, so set hasCode to false. -->
+    <application android:label="@string/app_name" android:hasCode="false" android:icon="@drawable/icon">
+
+        <!-- Our activity is the built-in NativeActivity framework class. This will take care of integrating with our NDK code. -->
+        <activity android:name="android.app.NativeActivity"
+                  android:label="@string/app_name"
+                  android:configChanges="orientation|keyboardHidden">
+            <!-- Tell NativeActivity the name of our .so -->
+            <meta-data android:name="android.app.lib_name"
+                       android:value="ecere" />
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+
+</manifest> 
+<!-- END_INCLUDE(manifest) -->
diff --git a/samples/games/chess/android/res/drawable-xhdpi/icon.png b/samples/games/chess/android/res/drawable-xhdpi/icon.png
new file mode 100644 (file)
index 0000000..174a628
Binary files /dev/null and b/samples/games/chess/android/res/drawable-xhdpi/icon.png differ
diff --git a/samples/games/chess/android/res/drawable/icon.png b/samples/games/chess/android/res/drawable/icon.png
new file mode 100644 (file)
index 0000000..9c45155
Binary files /dev/null and b/samples/games/chess/android/res/drawable/icon.png differ
diff --git a/samples/games/chess/android/res/values/strings.xml b/samples/games/chess/android/res/values/strings.xml
new file mode 100644 (file)
index 0000000..2504dd8
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="app_name">Ecere Chess</string>
+</resources>
index 1679250..ca9d5b6 100644 (file)
             "PostbuildCommands" : [
                "$(call mkdirq,$(OBJ)apk/lib/x86)",
                "$(call mkdirq,$(OBJ)apk/lib/armeabi)",
-               "$(call cpq,/sdk/ecere/obj/android.linux.$(COMPILER)/libecere.so,$(OBJ)apk/lib/armeabi)",
-               "$(call cpq,$(TARGET),$(OBJ)apk/lib/armeabi)",
-               "aapt package -v -f -m -M android/AndroidManifest.xml -F $(OBJ)$(MODULE)-unsigned.apk -I C:/android-sdk/platforms/android-16/android.jar -S android/res $(OBJ)apk",
-               "jarsigner -storepass mypassword -sigalg MD5withRSA -digestalg SHA1 $(OBJ)$(MODULE)-unsigned.apk mykey -signedjar $(OBJ)$(MODULE).apk",
+               "$(call cpv,../../../ecere/obj/android.linux.$(COMPILER)/libecere.so,$(OBJ)apk/lib/armeabi)",
+               "$(call cpv,$(TARGET),$(OBJ)apk/lib/armeabi)",
+               "aapt package -v -f -m -M android/AndroidManifest.xml -F $(OBJ)$(MODULE)-unsigned.apk -I C:/android-sdk/platforms/android-20/android.jar -S android/res $(OBJ)apk",
+               "jarsigner -storepass android -sigalg MD5withRSA -digestalg SHA1 $(OBJ)$(MODULE)-unsigned.apk androiddebugkey -keystore C:/users/jerome/debug.keystore -signedjar $(OBJ)$(MODULE).apk",
                "adb uninstall com.ecere.$(MODULE)",
                "adb install $(OBJ)$(MODULE).apk",
                "adb shell am start -a android.intent.action.MAIN -n com.ecere.$(MODULE)/android.app.NativeActivity"
index 95904c2..0c274d0 100644 (file)
@@ -4,7 +4,7 @@
    "Options" : {
       "Warnings" : "All",
       "TargetType" : "Executable",
-      "TargetFileName" : "CornerBlock",
+      "TargetFileName" : "CornerBlocks",
       "Libraries" : [
          "ecere"
       ]
             "PostbuildCommands" : [
                "$(call mkdirq,$(OBJ)apk/lib/x86)",
                "$(call mkdirq,$(OBJ)apk/lib/armeabi)",
-               "$(call cpq,/sdk/ecere/obj/android.linux.$(COMPILER)/libecere.so,$(OBJ)apk/lib/armeabi)",
-               "$(call cpq,$(TARGET),$(OBJ)apk/lib/armeabi)",
-               "aapt package -v -f -m -M android/AndroidManifest.xml -F $(OBJ)$(MODULE)-unsigned.apk -I C:/android-sdk/platforms/android-16/android.jar -S android/res $(OBJ)apk",
-               "jarsigner -storepass mypassword -sigalg MD5withRSA -digestalg SHA1 $(OBJ)$(MODULE)-unsigned.apk mykey -signedjar $(OBJ)$(MODULE).apk",
+               "$(call cpv,../../../ecere/obj/android.linux.$(COMPILER)/libecere.so,$(OBJ)apk/lib/armeabi)",
+               "$(call cpv,$(TARGET),$(OBJ)apk/lib/armeabi)",
+               "aapt package -v -f -m -M android/AndroidManifest.xml -F $(OBJ)$(MODULE)-unsigned.apk -I C:/android-sdk/platforms/android-20/android.jar -S android/res $(OBJ)apk",
+               "jarsigner -storepass android -sigalg MD5withRSA -digestalg SHA1 $(OBJ)$(MODULE)-unsigned.apk  -keystore C:/Users/Jerome/debug.keystore androiddebugkey -signedjar $(OBJ)$(MODULE).apk",
                "adb uninstall com.ecere.$(MODULE)",
                "adb install $(OBJ)$(MODULE).apk",
                "adb shell am start -a android.intent.action.MAIN -n com.ecere.$(MODULE)/android.app.NativeActivity"