Android build: Difference between revisions

From OpenMW Wiki
Jump to navigation Jump to search
mNo edit summary
No edit summary
Line 672: Line 672:
Next for eclipse project I use android-project example from SDL
Next for eclipse project I use android-project example from SDL
and use README-android.txt tutorial from sdl
and use README-android.txt tutorial from sdl
Next you must change shaders
diff --git a/files/materials/atmosphere.shader b/files/materials/atmosphere.shader
index f02c576..c8a8e02 100644
--- a/files/materials/atmosphere.shader
+++ b/files/materials/atmosphere.shader
@@ -33,7 +33,7 @@
    SH_START_PROGRAM
    {
-        shOutputColour(0) = alphaFade * atmosphereColour + (1.f - alphaFade) * horizonColour;
+        shOutputColour(0) = alphaFade * atmosphereColour + (1.0 - alphaFade) * horizonColour;
    }
#endif
diff --git a/files/materials/clouds.shader b/files/materials/clouds.shader
index d3e5f08..9e9b102 100644
--- a/files/materials/clouds.shader
+++ b/files/materials/clouds.shader
@@ -25,7 +25,7 @@
        shOutputPosition = shMatrixMult(proj, shMatrixMult(worldviewFixed, shInputPosition));
        UV = uv0;
-            alphaFade = (shInputPosition.z <= 200.f) ? ((shInputPosition.z <= 100.f) ? 0.0 : 0.25) : 1.0;
+            alphaFade = (shInputPosition.z <= 200.0) ? ((shInputPosition.z <= 100.0) ? 0.0 : 0.25) : 1.0;
    }
#else
diff --git a/files/materials/mygui.shader b/files/materials/mygui.shader
index 014558d..4d12eba 100644
--- a/files/materials/mygui.shader
+++ b/files/materials/mygui.shader
@@ -14,7 +14,7 @@
    SH_START_PROGRAM
    {
-        shOutputPosition = float4(shInputPosition.xyz, 1.f);
+        shOutputPosition = float4(shInputPosition.xyz, 1.0);
#if TEXTURE
        UV.xy = uv0;
#endif
diff --git a/files/materials/objects.shader b/files/materials/objects.shader
index ed75bab..bacf3f9 100644
--- a/files/materials/objects.shader
+++ b/files/materials/objects.shader
@@ -210,11 +210,11 @@
#if VERTEXCOLOR_MODE == 2
            lightResult.xyz += colour.xyz * lightDiffuse[@shIterator].xyz
                    * shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))
-                    * max(dot(viewNormal.xyz, lightDir), 0);
+                    * max(dot(viewNormal.xyz, lightDir), 0.0);
#else
            lightResult.xyz += materialDiffuse.xyz * lightDiffuse[@shIterator].xyz
                    * shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))
-                    * max(dot(viewNormal.xyz, lightDir), 0);
+                    * max(dot(viewNormal.xyz, lightDir), 0.0);
#endif
#if @shIterator == 0
@@ -432,11 +432,11 @@
#if VERTEXCOLOR_MODE == 2
            lightResult.xyz += colourPassthrough.xyz * lightDiffuse[@shIterator].xyz
                    * shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))
-                    * max(dot(viewNormal.xyz, lightDir), 0);
+                    * max(dot(viewNormal.xyz, lightDir), 0.0);
#else
            lightResult.xyz += materialDiffuse.xyz * lightDiffuse[@shIterator].xyz
                    * shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))
-                    * max(dot(viewNormal.xyz, lightDir), 0);
+                    * max(dot(viewNormal.xyz, lightDir), 0.0);
#endif
#if @shIterator == 0
@@ -504,8 +504,8 @@
#if ENV_MAP
        // Everything looks better with fresnel
-        float facing = 1.0 - max(abs(dot(-eyeDir, normal)), 0);
-        float envFactor = shSaturate(0.25 + 0.75 * pow(facing, 1));
+        float facing = 1.0 - max(abs(dot(-eyeDir, normal)), 0.0);
+        float envFactor = shSaturate(0.25 + 0.75 * pow(facing, 1.0));
        shOutputColour(0).xyz += shSample(envMap, UV.zw).xyz * envFactor * env_map_color;
#endif
@@ -513,7 +513,7 @@
#if SPECULAR
        float3 light0Dir = normalize(lightPosObjSpace0.xyz);
-        float NdotL = max(dot(normal, light0Dir), 0);
+        float NdotL = max(dot(normal, light0Dir), 0.0);
        float3 halfVec = normalize (light0Dir + eyeDir);
        float shininess = matShininess;
@@ -522,7 +522,7 @@
        shininess *= (specTex.a);
#endif
-        float3 specular = pow(max(dot(normal, halfVec), 0), shininess) * lightSpec0 * matSpec;
+        float3 specular = pow(max(dot(normal, halfVec), 0.0), shininess) * lightSpec0 * matSpec;
#if SPEC_MAP
        specular *= specTex.xyz;
#else
diff --git a/files/materials/terrain.shader b/files/materials/terrain.shader
index 1436de0..8384588 100644
--- a/files/materials/terrain.shader
+++ b/files/materials/terrain.shader
@@ -175,7 +175,7 @@
            lightResult.xyz += lightDiffuse[@shIterator].xyz
                    * shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))
-                    * max(dot(normal.xyz, lightDir), 0);
+                    * max(dot(normal.xyz, lightDir), 0.0);
#if @shIterator == 0
            directionalResult = lightResult.xyz;
@@ -310,7 +310,7 @@ shUniform(float4, cameraPos) @shAutoConstant(cameraPos, camera_position)
#if !IS_FIRST_PASS
// Opacity the previous passes should have, i.e. 1 - (opacity of this pass)
-float previousAlpha = 1.f;
+float previousAlpha = 1.0;
#endif
@@ -334,7 +334,7 @@ float2 blendUV = (UV - 0.5) * (16.0 / (16.0+1.0)) + 0.5;
        float4 albedo = float4(0,0,0,1);
-        float2 layerUV = float2(UV.x, 1.f-UV.y) * 16; // Reverse Y, required to get proper tangents
+        float2 layerUV = float2(UV.x, 1.0-UV.y) * 16.0; // Reverse Y, required to get proper tangents
        float2 thisLayerUV;
        float4 normalTex;
        float4 diffuseTex;
@@ -349,9 +349,9 @@ float2 blendUV = (UV - 0.5) * (16.0 / (16.0+1.0)) + 0.5;
#if @shPropertyBool(use_normal_map_@shIterator)
        normalTex = shSample(normalMap@shIterator, thisLayerUV);
#if @shIterator == 0 && IS_FIRST_PASS
-        TSnormal = normalize(normalTex.xyz * 2 - 1);
+        TSnormal = normalize(normalTex.xyz * 2.0 - 1.0);
#else
-        TSnormal = shLerp(TSnormal, normalTex.xyz * 2 - 1, blendValues@shPropertyString(blendmap_component_@shIterator));
+        TSnormal = shLerp(TSnormal, normalTex.xyz * 2.0 - 1.0, blendValues@shPropertyString(blendmap_component_@shIterator));
#endif
#endif
@@ -361,7 +361,7 @@ float2 blendUV = (UV - 0.5) * (16.0 / (16.0+1.0)) + 0.5;
        diffuseTex = shSample(diffuseMap@shIterator, layerUV);
#if !@shPropertyBool(use_specular_@shIterator)
-        diffuseTex.a = 0;
+        diffuseTex.a = 0.0;
#endif
#if @shIterator == 0
@@ -371,7 +371,7 @@ albedo = shLerp(albedo, diffuseTex, blendValues@shPropertyString(blendmap_compon
#endif
#if !IS_FIRST_PASS
-        previousAlpha *= 1.f-blendValues@shPropertyString(blendmap_component_@shIterator);
+        previousAlpha *= 1.0-blendValues@shPropertyString(blendmap_component_@shIterator);
#endif
@@ -404,7 +404,7 @@ albedo = shLerp(albedo, diffuseTex, blendValues@shPropertyString(blendmap_compon
            lightResult.xyz += lightDiffuse[@shIterator].xyz
                    * shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))
-                    * max(dot(normal.xyz, lightDir), 0);
+                    * max(dot(normal.xyz, lightDir), 0.0);
#if @shIterator == 0
            float3 directionalResult = lightResult.xyz;
#endif
@@ -444,10 +444,10 @@ albedo = shLerp(albedo, diffuseTex, blendValues@shPropertyString(blendmap_compon
        // Specular
        float3 light0Dir = normalize(lightPos0.xyz);
-        float NdotL = max(dot(normal, light0Dir), 0);
+        float NdotL = max(dot(normal, light0Dir), 0.0);
        float3 halfVec = normalize (light0Dir + eyeDir);
-        float3 specular = pow(max(dot(normal, halfVec), 0), 32) * lightSpec0;
+        float3 specular = pow(max(dot(normal, halfVec), 0.0), 32.0) * lightSpec0;
        shOutputColour(0).xyz += specular * (albedo.a) * shadow;
#endif
@@ -465,9 +465,9 @@ albedo = shLerp(albedo, diffuseTex, blendValues@shPropertyString(blendmap_compon
        shOutputColour(0).xyz = max(shOutputColour(0).xyz, float3(0,0,0));
#if IS_FIRST_PASS
-        shOutputColour(0).a = 1;
+        shOutputColour(0).a = 1.0;
#else
-        shOutputColour(0).a = 1.f-previousAlpha;
+        shOutputColour(0).a = 1.0-previousAlpha;
#endif
    }

Revision as of 19:21, 1 August 2014

Android build Openmw .


To successfully build openmw for android, you must at first build all dependencies from source for android For building all dependencies I used Debian , make ,g++ ,gcc , cmake. It is Ogre 1.9 , Openal , boost , bullet , Sdl2 , Qt 4.8 , ffmpeg , freeimage , freetype ,mygui ,zzip ,zlib . You must use only crystax ndk for build ,because ndk from google will not build openmw because only crystax ndk used wchar and long long. Since all references to the crystax are dead , here crystax ndk . https://drive.google.com/file/d/0B5mOME9qjLFuZmZoXzJTSUMwQmM/edit?usp=sharing Than you should use cmake for android https://github.com/taka-no-me/android-cmake And google sdk http://developer.android.com/sdk/index.html Than you should add PATH for crystax ndk adn goole sdk . For building boost I used it . You must build Ogre with Boost ! https://github.com/MysticTreeGames/Boost-for-Android

Than you must build freetype http://www.freetype.org/ For example like this cmake /home/sylar/freetype -DCMAKE_TOOLCHAIN_FILE=/home/sylar/android-cmake-master/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=14 Than you bust build freeimage . I used this tutorial for building http://freeimage.sourceforge.net/ http://recursify.com/blog/2013/05/25/building-freeimage-for-android

Since my phone supports manual armeabi-v7a I used this architecture for building . For example.



ndk-build APP_PLATFORM=android-14 APP_ABI=armeabi-v7a


Android.mk for building freeimage



LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) GLOBAL_C_INCLUDES := \

   $(LOCAL_PATH)/../Source \
   $(LOCAL_PATH)/../Source \
   $(LOCAL_PATH)/../Source/DeprecationManager \
   $(LOCAL_PATH)/../Source/FreeImage \
   $(LOCAL_PATH)/../Source/FreeImageLib \
   $(LOCAL_PATH)/../Source/FreeImageToolkit \
   $(LOCAL_PATH)/../Source/LibJPEG \
   $(LOCAL_PATH)/../Source/LibMNG \
   $(LOCAL_PATH)/../Source/LibOpenJPEG \
   $(LOCAL_PATH)/../Source/LibPNG \
   $(LOCAL_PATH)/../Source/LibTIFF \
   $(LOCAL_PATH)/../Source/Metadata \
   $(LOCAL_PATH)/../Source/OpenEXR \
   $(LOCAL_PATH)/../Source/OpenEXR/Copyrights \
   $(LOCAL_PATH)/../Source/OpenEXR/Half \
   $(LOCAL_PATH)/../Source/OpenEXR/Iex \
   $(LOCAL_PATH)/../Source/OpenEXR/IlmImf \
   $(LOCAL_PATH)/../Source/OpenEXR/IlmThread \
   $(LOCAL_PATH)/../Source/OpenEXR/Imath \
   $(LOCAL_PATH)/../Source/ZLib \

LOCAL_SRC_FILES = ../Source/FreeImage/BitmapAccess.cpp ../Source/FreeImage/ColorLookup.cpp ../Source/FreeImage/FreeImage.cpp ../Source/FreeImage/FreeImageC.c ../Source/FreeImage/FreeImageIO.cpp ../Source/FreeImage/GetType.cpp ../Source/FreeImage /MemoryIO.cpp ../Source/FreeImage/PixelAccess.cpp ../Source/FreeImage/J2KHelper.cpp ../Source/FreeImage/MNGHelper.cpp ../Source/FreeImage/Plugin.cpp ../Source/FreeImage/PluginBMP.cpp ../Source/FreeImage/PluginCUT.cpp ../Source/FreeImage/PluginDDS.cpp ../Source/FreeImage/PluginEXR.cpp ../Source/FreeImage/PluginG3.cpp ../Source/FreeImage/PluginGIF.cpp ../Source/FreeImage/PluginHDR.cpp ../Source/FreeImage/PluginICO.cpp ../Source/FreeImage/PluginIFF.cpp ../Source/FreeImage/PluginJ2K.cpp ../Source/FreeImage/PluginJNG.cpp ../Source/FreeImage/PluginJP2.cpp ../Source/FreeImage/PluginJPEG.cpp ../Source/FreeImage/PluginKOALA.cpp ../Source/FreeImage/PluginMNG.cpp ../Source/FreeImage/PluginPCD.cpp ../Source/FreeImage/PluginPCX.cpp ../Source/FreeImage/PluginPFM.cpp ../Source/FreeImage/PluginPICT.cpp ../Source/FreeImage/PluginPNG.cpp ../Source/FreeImage/PluginPNM.cpp ../Source/FreeImage/PluginPSD.cpp ../Source/FreeImage/PluginRAS.cpp ../Source/FreeImage/PluginSGI.cpp ../Source/FreeImage/PluginTARGA.cpp ../Source/FreeImage/PluginTIFF.cpp ../Source/FreeImage/PluginWBMP.cpp ../Source/FreeImage/PluginXBM.cpp ../Source/FreeImage/PluginXPM.cpp ../Source/FreeImage/PSDParser.cpp ../Source/FreeImage/TIFFLogLuv.cpp ../Source/FreeImage/Conversion.cpp ../Source/FreeImage/Conversion16_555.cpp ../Source/FreeImage/Conversion16_565.cpp ../Source/FreeImage/Conversion24.cpp ../Source/FreeImage/Conversion32.cpp ../Source/FreeImage/Conversion4.cpp ../Source/FreeImage/Conversion8.cpp ../Source/FreeImage/ConversionFloat.cpp ../Source/FreeImage/ConversionRGB16.cpp ../Source/FreeImage/ConversionRGBF.cpp ../Source/FreeImage/ConversionType.cpp ../Source/FreeImage/ConversionUINT16.cpp ../Source/FreeImage/Halftoning.cpp ../Source/FreeImage/tmoColorConvert.cpp ../Source/FreeImage/tmoDrago03.cpp ../Source/FreeImage/tmoFattal02.cpp ../Source/FreeImage/tmoReinhard05.cpp ../Source/FreeImage/ToneMapping.cpp ../Source/FreeImage/NNQuantizer.cpp ../Source/FreeImage/WuQuantizer.cpp ../Source/DeprecationManager/Deprecated.cpp ../Source/DeprecationManager/DeprecationMgr.cpp ../Source/FreeImage/CacheFile.cpp ../Source/FreeImage/MultiPage.cpp ../Source/FreeImage/ZLibInterface.cpp ../Source/Metadata/Exif.cpp ../Source/Metadata/FIRational.cpp ../Source/Metadata/FreeImageTag.cpp ../Source/Metadata/IPTC.cpp ../Source/Metadata/TagConversion.cpp ../Source/Metadata/TagLib.cpp ../Source/Metadata/XTIFF.cpp ../Source/FreeImageToolkit/Background.cpp ../Source/FreeImageToolkit/BSplineRotate.cpp ../Source/FreeImageToolkit/Channels.cpp ../Source/FreeImageToolkit/ClassicRotate.cpp ../Source/FreeImageToolkit/Colors.cpp ../Source/FreeImageToolkit/CopyPaste.cpp ../Source/FreeImageToolkit/Display.cpp ../Source/FreeImageToolkit/Flip.cpp ../Source/FreeImageToolkit/JPEGTransform.cpp ../Source/FreeImageToolkit/MultigridPoissonSolver.cpp ../Source/FreeImageToolkit/Rescale.cpp ../Source/FreeImageToolkit/Resize.cpp ../Source/LibJPEG/./jaricom.c ../Source/LibJPEG/jcapimin.c ../Source/LibJPEG/jcapistd.c ../Source/LibJPEG/./jcarith.c ../Source/LibJPEG/jccoefct.c ../Source/LibJPEG/jccolor.c ../Source/LibJPEG/jcdctmgr.c ../Source/LibJPEG/jchuff.c ../Source/LibJPEG/jcinit.c ../Source/LibJPEG/jcmainct.c ../Source/LibJPEG/jcmarker.c ../Source/LibJPEG/jcmaster.c ../Source/LibJPEG/jcomapi.c ../Source/LibJPEG/jcparam.c ../Source/LibJPEG/jcprepct.c ../Source/LibJPEG/jcsample.c ../Source/LibJPEG/jctrans.c ../Source/LibJPEG/jdapimin.c ../Source/LibJPEG/jdapistd.c ../Source/LibJPEG/./jdarith.c ../Source/LibJPEG/jdatadst.c ../Source/LibJPEG/jdatasrc.c ../Source/LibJPEG/jdcoefct.c ../Source/LibJPEG/jdcolor.c ../Source/LibJPEG/jddctmgr.c ../Source/LibJPEG/jdhuff.c ../Source/LibJPEG/jdinput.c ../Source/LibJPEG/jdmainct.c ../Source/LibJPEG/jdmarker.c ../Source/LibJPEG/jdmaster.c ../Source/LibJPEG/jdmerge.c ../Source/LibJPEG/jdpostct.c ../Source/LibJPEG/jdsample.c ../Source/LibJPEG/jdtrans.c ../Source/LibJPEG/jerror.c ../Source/LibJPEG/jfdctflt.c ../Source/LibJPEG/jfdctfst.c ../Source/LibJPEG/jfdctint.c ../Source/LibJPEG/jidctflt.c ../Source/LibJPEG/jidctfst.c ../Source/LibJPEG/jidctint.c ../Source/LibJPEG/jmemmgr.c ../Source/LibJPEG/jmemnobs.c ../Source/LibJPEG/jquant1.c ../Source/LibJPEG/jquant2.c ../Source/LibJPEG/jutils.c ../Source/LibJPEG/transupp.c ../Source/LibPNG/./png.c ../Source/LibPNG/./pngerror.c ../Source/LibPNG/./pngget.c ../Source/LibPNG/./pngmem.c ../Source/LibPNG/./pngpread.c ../Source/LibPNG/./pngread.c ../Source/LibPNG/./pngrio.c ../Source/LibPNG/./pngrtran.c ../Source/LibPNG/./pngrutil.c ../Source/LibPNG/./pngset.c ../Source/LibPNG/./pngtrans.c ../Source/LibPNG/./pngwio.c ../Source/LibPNG/./pngwrite.c ../Source/LibPNG/./pngwtran.c ../Source/LibPNG/./pngwutil.c ../Source/LibTIFF4/./tif_aux.c ../Source/LibTIFF4/./tif_close.c ../Source/LibTIFF4/./tif_codec.c ../Source/LibTIFF4/./tif_color.c ../Source/LibTIFF4/./tif_compress.c ../Source/LibTIFF4/./tif_dir.c ../Source/LibTIFF4/./tif_dirinfo.c ../Source/LibTIFF4/./tif_dirread.c ../Source/LibTIFF4/./tif_dirwrite.c ../Source/LibTIFF4/./tif_dumpmode.c ../Source/LibTIFF4/./tif_error.c ../Source/LibTIFF4/./tif_extension.c ../Source/LibTIFF4/./tif_fax3.c ../Source/LibTIFF4/./tif_fax3sm.c ../Source/LibTIFF4/./tif_flush.c ../Source/LibTIFF4/./tif_getimage.c ../Source/LibTIFF4/./tif_jpeg.c ../Source/LibTIFF4/./tif_luv.c ../Source/LibTIFF4/./tif_lzma.c ../Source/LibTIFF4/./tif_lzw.c ../Source/LibTIFF4/./tif_next.c ../Source/LibTIFF4/./tif_ojpeg.c ../Source/LibTIFF4/./tif_open.c ../Source/LibTIFF4/./tif_packbits.c ../Source/LibTIFF4/./tif_pixarlog.c ../Source/LibTIFF4/./tif_predict.c ../Source/LibTIFF4/./tif_print.c ../Source/LibTIFF4/./tif_read.c ../Source/LibTIFF4/./tif_strip.c ../Source/LibTIFF4/./tif_swab.c ../Source/LibTIFF4/./tif_thunder.c ../Source/LibTIFF4/./tif_tile.c ../Source/LibTIFF4/./tif_version.c ../Source/LibTIFF4/./tif_warning.c ../Source/LibTIFF4/./tif_write.c ../Source/LibTIFF4/./tif_zip.c ../Source/ZLib/./adler32.c ../Source/ZLib/./compress.c ../Source/ZLib/./crc32.c ../Source/ZLib/./deflate.c ../Source/ZLib/./gzclose.c ../Source/ZLib/./gzlib.c ../Source/ZLib/./gzread.c ../Source/ZLib/./gzwrite.c ../Source/ZLib/./infback.c ../Source/ZLib/./inffast.c ../Source/ZLib/./inflate.c ../Source/ZLib/./inftrees.c ../Source/ZLib/./trees.c ../Source/ZLib/./uncompr.c ../Source/ZLib/./zutil.c ../Source/LibOpenJPEG/bio.c ../Source/LibOpenJPEG/./cidx_manager.c ../Source/LibOpenJPEG/cio.c ../Source/LibOpenJPEG/dwt.c ../Source/LibOpenJPEG/event.c ../Source/LibOpenJPEG/image.c ../Source/LibOpenJPEG/j2k.c ../Source/LibOpenJPEG/j2k_lib.c ../Source/LibOpenJPEG/jp2.c ../Source/LibOpenJPEG/jpt.c ../Source/LibOpenJPEG/mct.c ../Source/LibOpenJPEG/mqc.c ../Source/LibOpenJPEG/openjpeg.c ../Source/LibOpenJPEG/./phix_manager.c ../Source/LibOpenJPEG/pi.c ../Source/LibOpenJPEG/./ppix_manager.c ../Source/LibOpenJPEG/raw.c ../Source/LibOpenJPEG/t1.c ../Source/LibOpenJPEG/t2.c ../Source/LibOpenJPEG/tcd.c ../Source/LibOpenJPEG/tgt.c ../Source/LibOpenJPEG/./thix_manager.c ../Source/LibOpenJPEG/./tpix_manager.c ../Source/OpenEXR/./IlmImf/ImfAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfB44Compressor.cpp ../Source/OpenEXR/./IlmImf/ImfBoxAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfChannelList.cpp ../Source/OpenEXR/./IlmImf/ImfChannelListAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfChromaticities.cpp ../Source/OpenEXR/./IlmImf/ImfChromaticitiesAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfCompressionAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfCompressor.cpp ../Source/OpenEXR/./IlmImf/ImfConvert.cpp ../Source/OpenEXR/./IlmImf/ImfCRgbaFile.cpp ../Source/OpenEXR/./IlmImf/ImfDoubleAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfEnvmap.cpp ../Source/OpenEXR/./IlmImf/ImfEnvmapAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfFloatAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfFrameBuffer.cpp ../Source/OpenEXR/./IlmImf/ImfFramesPerSecond.cpp ../Source/OpenEXR/./IlmImf/ImfHeader.cpp ../Source/OpenEXR/./IlmImf/ImfHuf.cpp ../Source/OpenEXR/./IlmImf/ImfInputFile.cpp ../Source/OpenEXR/./IlmImf/ImfIntAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfIO.cpp ../Source/OpenEXR/./IlmImf/ImfKeyCode.cpp ../Source/OpenEXR/./IlmImf/ImfKeyCodeAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfLineOrderAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfLut.cpp ../Source/OpenEXR/./IlmImf/ImfMatrixAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfMisc.cpp ../Source/OpenEXR/./IlmImf/ImfOpaqueAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfOutputFile.cpp ../Source/OpenEXR/./IlmImf/ImfPizCompressor.cpp ../Source/OpenEXR/./IlmImf/ImfPreviewImage.cpp ../Source/OpenEXR/./IlmImf/ImfPreviewImageAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfPxr24Compressor.cpp ../Source/OpenEXR/./IlmImf/ImfRational.cpp ../Source/OpenEXR/./IlmImf/ImfRationalAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfRgbaFile.cpp ../Source/OpenEXR/./IlmImf/ImfRgbaYca.cpp ../Source/OpenEXR/./IlmImf/ImfRleCompressor.cpp ../Source/OpenEXR/./IlmImf/ImfScanLineInputFile.cpp ../Source/OpenEXR/./IlmImf/ImfStandardAttributes.cpp ../Source/OpenEXR/./IlmImf/ImfStdIO.cpp ../Source/OpenEXR/./IlmImf/ImfStringAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfStringVectorAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfTestFile.cpp ../Source/OpenEXR/./IlmImf/ImfThreading.cpp ../Source/OpenEXR/./IlmImf/ImfTileDescriptionAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfTiledInputFile.cpp ../Source/OpenEXR/./IlmImf/ImfTiledMisc.cpp ../Source/OpenEXR/./IlmImf/ImfTiledOutputFile.cpp ../Source/OpenEXR/./IlmImf/ImfTiledRgbaFile.cpp ../Source/OpenEXR/./IlmImf/ImfTileOffsets.cpp ../Source/OpenEXR/./IlmImf/ImfTimeCode.cpp ../Source/OpenEXR/./IlmImf/ImfTimeCodeAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfVecAttribute.cpp ../Source/OpenEXR/./IlmImf/ImfVersion.cpp ../Source/OpenEXR/./IlmImf/ImfWav.cpp ../Source/OpenEXR/./IlmImf/ImfZipCompressor.cpp ../Source/OpenEXR/./Imath/ImathBox.cpp ../Source/OpenEXR/./Imath/ImathColorAlgo.cpp ../Source/OpenEXR/./Imath/ImathFun.cpp ../Source/OpenEXR/./Imath/ImathMatrixAlgo.cpp ../Source/OpenEXR/./Imath/ImathRandom.cpp ../Source/OpenEXR/./Imath/ImathShear.cpp ../Source/OpenEXR/./Imath/ImathVec.cpp ../Source/OpenEXR/./Iex/IexBaseExc.cpp ../Source/OpenEXR/./Iex/IexThrowErrnoExc.cpp ../Source/OpenEXR/./Half/half.cpp ../Source/OpenEXR/./IlmThread/IlmThread.cpp ../Source/OpenEXR/./IlmThread/IlmThreadMutex.cpp ../Source/OpenEXR/./IlmThread/IlmThreadPool.cpp ../Source/OpenEXR/./IlmThread/IlmThreadSemaphore.cpp LOCAL_MODULE := FreeImage

LOCAL_CPP_FEATURES := rtti exceptions GLOBAL_CFLAGS  := -O3 -DHAVE_CONFIG_H=1 -DFREEIMAGE_LIB -isystem

ifeq ($(TARGET_ARCH),x86)

   LOCAL_CFLAGS   := $(GLOBAL_CFLAGS)

else

   LOCAL_CFLAGS   := -mfpu=vfp -mfloat-abi=softfp -fno-short-enums -O3 -fPIC $(GLOBAL_CFLAGS)

endif

LOCAL_C_INCLUDES := $(GLOBAL_C_INCLUDES)

include $(BUILD_STATIC_LIBRARY)



Next you must build ogre from source . I build ogre 1.9 with this tutorial . http://www.ogre3d.org/tikiwiki/tiki-index.php?page=CMake+Quick+Start+Guide&tikiversion=Android You must add it


if((opt = miscParams->find("externalWindowHandle")) != end)

           {
               mWindow = (ANativeWindow*)(Ogre::StringConverter::parseInt(opt->second));
           }

and it


 if (!mEglConfig)
       {

_createInternalResources(mWindow, config);

           mHwGamma = false;
       }
       

mEglDisplay = mGLSupport->getGLDisplay();

to /sinbad-ogre-7c776867621e/RenderSystems/GLES2/src/EGL/Android/OgreAndroidEGLWindow.cpp ogre otherwise not be able to work with sdl2 ,because android can have only one active window . Also in Ogre 1.9 forgot to add this line to cmake file if(ANDROID)

 set(CMAKE_FIND_ROOT_PATH ${OGRE_DEPENDENCIES_DIR} "${CMAKE_FIND_ROOT_PATH}")

endif()

Than you must build mygui for ogre http://mygui.info/ And you should remove this line from cmake file add_definitions(-msse) Than you should build bullet . You can use cmake or ndk-build https://github.com/bulletphysics/bullet3 Android.mk LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := bullet LOCAL_C_INCLUDES := \

  $(LOCAL_PATH)/ \
  $(LOCAL_PATH)/BulletCollision/BroadphaseCollision \
  $(LOCAL_PATH)/BulletCollision/CollisionDispatch \
  $(LOCAL_PATH)/BulletCollision/CollisionShapes \
  $(LOCAL_PATH)/BulletCollision/NarrowPhaseCollision \
  $(LOCAL_PATH)/BulletDynamics/ConstraintSolver \
  $(LOCAL_PATH)/BulletDynamics/Dynamics \
  $(LOCAL_PATH)/BulletDynamics/Vehicle \
  $(LOCAL_PATH)/LinearMath \
  $(LOCAL_PATH)/../libzip/ \
  $(LOCAL_PATH)/../libpng/ \


LOCAL_ARM_MODE := arm LOCAL_STATIC_LIBRARIES := libzip libpng LOCAL_CFLAGS := $(LOCAL_C_INCLUDES:%=-I%) -O3 -DANDROID_NDK LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -ldl -llog -lGLESv1_CM -lGLESv2 -lz


LOCAL_SRC_FILES := \

  BulletMultiThreaded/SpuCollisionObjectWrapper.cpp \

BulletMultiThreaded/SpuSampleTask/SpuSampleTask.cpp \ BulletMultiThreaded/SpuLibspe2Support.cpp \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.cpp \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.cpp \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuMinkowskiPenetrationDepthSolver.cpp \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuCollisionShapes.cpp \ BulletMultiThreaded/btThreadSupportInterface.cpp \ BulletMultiThreaded/SequentialThreadSupport.cpp \ BulletMultiThreaded/SpuGatheringCollisionDispatcher.cpp \ BulletMultiThreaded/Win32ThreadSupport.cpp \ BulletMultiThreaded/SpuFakeDma.cpp \ BulletMultiThreaded/PosixThreadSupport.cpp \ BulletMultiThreaded/SpuCollisionTaskProcess.cpp \ BulletMultiThreaded/SpuContactManifoldCollisionAlgorithm.cpp \ BulletMultiThreaded/SpuSampleTaskProcess.cpp \ BulletMultiThreaded/SpuSampleTask/SpuSampleTask.h \ BulletMultiThreaded/PpuAddressSpace.h \ BulletMultiThreaded/SpuSampleTaskProcess.h \ BulletMultiThreaded/SequentialThreadSupport.h \ BulletMultiThreaded/PlatformDefinitions.h \ BulletMultiThreaded/Win32ThreadSupport.h \ BulletMultiThreaded/SpuContactManifoldCollisionAlgorithm.h \ BulletMultiThreaded/btThreadSupportInterface.h \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuConvexPenetrationDepthSolver.h \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuPreferredPenetrationDirections.h \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuCollisionShapes.h \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuLocalSupport.h \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuMinkowskiPenetrationDepthSolver.h \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/SpuContactResult.h \ BulletMultiThreaded/SpuGatheringCollisionDispatcher.h \ BulletMultiThreaded/SpuFakeDma.h \ BulletMultiThreaded/SpuSync.h \ BulletMultiThreaded/SpuCollisionObjectWrapper.h \ BulletMultiThreaded/SpuDoubleBuffer.h \ BulletMultiThreaded/SpuCollisionTaskProcess.h \ BulletMultiThreaded/PosixThreadSupport.h \ BulletMultiThreaded/SpuLibspe2Support.h \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/boxBoxDistance.cpp \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/boxBoxDistance.h \ BulletMultiThreaded/SpuNarrowPhaseCollisionTask/Box.h\ LinearMath/btQuickprof.cpp \ LinearMath/btGeometryUtil.cpp \ LinearMath/btAlignedAllocator.cpp \ LinearMath/btSerializer.cpp \ LinearMath/btConvexHull.cpp \ LinearMath/btPolarDecomposition.cpp \ LinearMath/btVector3.cpp \ LinearMath/btConvexHullComputer.cpp \ LinearMath/btHashMap.h \ LinearMath/btConvexHull.h \ LinearMath/btAabbUtil2.h \ LinearMath/btGeometryUtil.h \ LinearMath/btQuadWord.h \ LinearMath/btPoolAllocator.h \ LinearMath/btPolarDecomposition.h \ LinearMath/btScalar.h \ LinearMath/btMinMax.h \ LinearMath/btVector3.h \ LinearMath/btList.h \ LinearMath/btStackAlloc.h \ LinearMath/btMatrix3x3.h \ LinearMath/btMotionState.h \ LinearMath/btAlignedAllocator.h \ LinearMath/btQuaternion.h \ LinearMath/btAlignedObjectArray.h \ LinearMath/btQuickprof.h \ LinearMath/btSerializer.h \ LinearMath/btTransformUtil.h \ LinearMath/btTransform.h \ LinearMath/btDefaultMotionState.h \ LinearMath/btIDebugDraw.h \ LinearMath/btRandom.h \ BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp \ BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp \ BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp \ BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp \ BulletCollision/NarrowPhaseCollision/btGjkConvexCast.cpp \ BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp \ BulletCollision/NarrowPhaseCollision/btConvexCast.cpp \ BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.cpp \ BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.cpp \ BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp \ BulletCollision/NarrowPhaseCollision/btGjkEpa2.cpp \ BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp \ BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.cpp \ BulletCollision/CollisionDispatch/btCollisionObject.cpp \ BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.cpp \ BulletCollision/CollisionDispatch/btGhostObject.cpp \ BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp \ BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp \ BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp \ BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp \ BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp \ BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp \ BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.cpp \ BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp \ BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.cpp \ BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp \ BulletCollision/CollisionDispatch/SphereTriangleDetector.cpp \ BulletCollision/CollisionDispatch/btInternalEdgeUtility.cpp \ BulletCollision/CollisionDispatch/btManifoldResult.cpp \ BulletCollision/CollisionDispatch/btCollisionWorld.cpp \ BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp \ BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp \ BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp \ BulletCollision/CollisionDispatch/btUnionFind.cpp \ BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp \ BulletCollision/CollisionDispatch/btHashedSimplePairCache.cpp \ BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.cpp \ BulletCollision/CollisionShapes/btTetrahedronShape.cpp \ BulletCollision/CollisionShapes/btShapeHull.cpp \ BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp \ BulletCollision/CollisionShapes/btCompoundShape.cpp \ BulletCollision/CollisionShapes/btConeShape.cpp \ BulletCollision/CollisionShapes/btConvexPolyhedron.cpp \ BulletCollision/CollisionShapes/btMultiSphereShape.cpp \ BulletCollision/CollisionShapes/btUniformScalingShape.cpp \ BulletCollision/CollisionShapes/btSphereShape.cpp \ BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp \ BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp \ BulletCollision/CollisionShapes/btTriangleMeshShape.cpp \ BulletCollision/CollisionShapes/btTriangleBuffer.cpp \ BulletCollision/CollisionShapes/btStaticPlaneShape.cpp \ BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp \ BulletCollision/CollisionShapes/btEmptyShape.cpp \ BulletCollision/CollisionShapes/btCollisionShape.cpp \ BulletCollision/CollisionShapes/btConvexShape.cpp \ BulletCollision/CollisionShapes/btConvex2dShape.cpp \ BulletCollision/CollisionShapes/btConvexInternalShape.cpp \ BulletCollision/CollisionShapes/btConvexHullShape.cpp \ BulletCollision/CollisionShapes/btTriangleCallback.cpp \ BulletCollision/CollisionShapes/btCapsuleShape.cpp \ BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp \ BulletCollision/CollisionShapes/btConcaveShape.cpp \ BulletCollision/CollisionShapes/btConvexPointCloudShape.cpp \ BulletCollision/CollisionShapes/btBoxShape.cpp \ BulletCollision/CollisionShapes/btBox2dShape.cpp \ BulletCollision/CollisionShapes/btOptimizedBvh.cpp \ BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp \ BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.cpp \ BulletCollision/CollisionShapes/btCylinderShape.cpp \ BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp \ BulletCollision/CollisionShapes/btStridingMeshInterface.cpp \ BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.cpp \ BulletCollision/CollisionShapes/btTriangleMesh.cpp \ BulletCollision/BroadphaseCollision/btAxisSweep3.cpp \ BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp \ BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp \ BulletCollision/BroadphaseCollision/btMultiSapBroadphase.cpp \ BulletCollision/BroadphaseCollision/btDispatcher.cpp \ BulletCollision/BroadphaseCollision/btBroadphaseProxy.cpp \ BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp \ BulletCollision/BroadphaseCollision/btCollisionAlgorithm.cpp \ BulletCollision/BroadphaseCollision/btDbvt.cpp \ BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp \ BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h \ BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h \ BulletCollision/NarrowPhaseCollision/btConvexCast.h \ BulletCollision/NarrowPhaseCollision/btGjkEpa2.h \ BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h \ BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h \ BulletCollision/NarrowPhaseCollision/btPointCollector.h \ BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h \ BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h \ BulletCollision/NarrowPhaseCollision/btRaycastCallback.h \ BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h \ BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h \ BulletCollision/NarrowPhaseCollision/btPersistentManifold.h \ BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h \ BulletCollision/NarrowPhaseCollision/btManifoldPoint.h \ BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h \ BulletCollision/CollisionDispatch/btCollisionObject.h \ BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h \ BulletCollision/CollisionDispatch/btGhostObject.h \ BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h \ BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.h \ BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h \ BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.h \ BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h \ BulletCollision/CollisionDispatch/btCollisionCreateFunc.h \ BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h \ BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h \ BulletCollision/CollisionDispatch/btBoxBoxDetector.h \ BulletCollision/CollisionDispatch/btCollisionDispatcher.h \ BulletCollision/CollisionDispatch/SphereTriangleDetector.h \ BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h \ BulletCollision/CollisionDispatch/btUnionFind.h \ BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h \ BulletCollision/CollisionDispatch/btHashedSimplePairCache.h \ BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.h \ BulletCollision/CollisionDispatch/btSimulationIslandManager.h \ BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h \ BulletCollision/CollisionDispatch/btCollisionWorld.h \ BulletCollision/CollisionDispatch/btInternalEdgeUtility.h \ BulletCollision/CollisionDispatch/btManifoldResult.h \ BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h \ BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h \ BulletCollision/CollisionDispatch/btCollisionConfiguration.h \ BulletCollision/CollisionShapes/btConvexShape.h \ BulletCollision/CollisionShapes/btConvex2dShape.h \ BulletCollision/CollisionShapes/btTriangleCallback.h \ BulletCollision/CollisionShapes/btPolyhedralConvexShape.h \ BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h \ BulletCollision/CollisionShapes/btCompoundShape.h \ BulletCollision/CollisionShapes/btBoxShape.h \ BulletCollision/CollisionShapes/btBox2dShape.h \ BulletCollision/CollisionShapes/btMultiSphereShape.h \ BulletCollision/CollisionShapes/btCollisionMargin.h \ BulletCollision/CollisionShapes/btConcaveShape.h \ BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h \ BulletCollision/CollisionShapes/btEmptyShape.h \ BulletCollision/CollisionShapes/btUniformScalingShape.h \ BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h \ BulletCollision/CollisionShapes/btMaterial.h \ BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h \ BulletCollision/CollisionShapes/btTriangleInfoMap.h \ BulletCollision/CollisionShapes/btSphereShape.h \ BulletCollision/CollisionShapes/btConvexPointCloudShape.h \ BulletCollision/CollisionShapes/btCapsuleShape.h \ BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h \ BulletCollision/CollisionShapes/btCollisionShape.h \ BulletCollision/CollisionShapes/btStaticPlaneShape.h \ BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h \ BulletCollision/CollisionShapes/btTriangleMeshShape.h \ BulletCollision/CollisionShapes/btStridingMeshInterface.h \ BulletCollision/CollisionShapes/btTriangleMesh.h \ BulletCollision/CollisionShapes/btTriangleBuffer.h \ BulletCollision/CollisionShapes/btShapeHull.h \ BulletCollision/CollisionShapes/btMinkowskiSumShape.h \ BulletCollision/CollisionShapes/btOptimizedBvh.h \ BulletCollision/CollisionShapes/btTriangleShape.h \ BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h \ BulletCollision/CollisionShapes/btCylinderShape.h \ BulletCollision/CollisionShapes/btTetrahedronShape.h \ BulletCollision/CollisionShapes/btConvexInternalShape.h \ BulletCollision/CollisionShapes/btConeShape.h \ BulletCollision/CollisionShapes/btConvexHullShape.h \ BulletCollision/BroadphaseCollision/btAxisSweep3.h \ BulletCollision/BroadphaseCollision/btDbvtBroadphase.h \ BulletCollision/BroadphaseCollision/btSimpleBroadphase.h \ BulletCollision/BroadphaseCollision/btMultiSapBroadphase.h \ BulletCollision/BroadphaseCollision/btDbvt.h \ BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h \ BulletCollision/BroadphaseCollision/btDispatcher.h \ BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h \ BulletCollision/BroadphaseCollision/btBroadphaseProxy.h \ BulletCollision/BroadphaseCollision/btOverlappingPairCache.h \ BulletCollision/BroadphaseCollision/btBroadphaseInterface.h \ BulletCollision/BroadphaseCollision/btQuantizedBvh.h \ BulletCollision/Gimpact/btGImpactBvh.cpp\

               BulletCollision/Gimpact/btGImpactQuantizedBvh.cpp\
               BulletCollision/Gimpact/btTriangleShapeEx.cpp\
               BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp\
               BulletCollision/Gimpact/btGImpactShape.cpp\
               BulletCollision/Gimpact/gim_box_set.cpp\
               BulletCollision/Gimpact/gim_contact.cpp\
               BulletCollision/Gimpact/gim_memory.cpp\
               BulletCollision/Gimpact/gim_tri_collision.cpp \

BulletDynamics/Dynamics/btRigidBody.cpp \ BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp \ BulletDynamics/Dynamics/Bullet-C-API.cpp \ BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp \ BulletDynamics/ConstraintSolver/btFixedConstraint.cpp \ BulletDynamics/ConstraintSolver/btGearConstraint.cpp \ BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp \ BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.cpp \ BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.cpp \ BulletDynamics/ConstraintSolver/btPoint2PointConstraint.cpp \ BulletDynamics/ConstraintSolver/btTypedConstraint.cpp \ BulletDynamics/ConstraintSolver/btContactConstraint.cpp \ BulletDynamics/ConstraintSolver/btSliderConstraint.cpp \ BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp \ BulletDynamics/ConstraintSolver/btHingeConstraint.cpp \ BulletDynamics/ConstraintSolver/btHinge2Constraint.cpp \ BulletDynamics/ConstraintSolver/btUniversalConstraint.cpp \ BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp \ BulletDynamics/Vehicle/btWheelInfo.cpp \ BulletDynamics/Vehicle/btRaycastVehicle.cpp \ BulletDynamics/Character/btKinematicCharacterController.cpp \ BulletDynamics/Character/btKinematicCharacterController.h \ BulletDynamics/Character/btCharacterControllerInterface.h \ BulletDynamics/Dynamics/btActionInterface.h \ BulletDynamics/Dynamics/btSimpleDynamicsWorld.h \ BulletDynamics/Dynamics/btRigidBody.h \ BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h \ BulletDynamics/Dynamics/btDynamicsWorld.h \ BulletDynamics/ConstraintSolver/btSolverBody.h \ BulletDynamics/ConstraintSolver/btConstraintSolver.h \ BulletDynamics/ConstraintSolver/btConeTwistConstraint.h \ BulletDynamics/ConstraintSolver/btTypedConstraint.h \ BulletDynamics/ConstraintSolver/btContactSolverInfo.h \ BulletDynamics/ConstraintSolver/btContactConstraint.h \ BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h \ BulletDynamics/ConstraintSolver/btJacobianEntry.h \ BulletDynamics/ConstraintSolver/btSolverConstraint.h \ BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h \ BulletDynamics/ConstraintSolver/btGearConstraint.h \ BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h \ BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h \ BulletDynamics/ConstraintSolver/btSliderConstraint.h \ BulletDynamics/ConstraintSolver/btHingeConstraint.h \ BulletDynamics/ConstraintSolver/btHinge2Constraint.h \ BulletDynamics/ConstraintSolver/btUniversalConstraint.h \ BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h \ BulletDynamics/Vehicle/btVehicleRaycaster.h \ BulletDynamics/Vehicle/btRaycastVehicle.h \ BulletDynamics/Vehicle/btWheelInfo.h \ BulletDynamics/Featherstone/btMultiBody.cpp \ BulletDynamics/Featherstone/btMultiBodyConstraintSolver.cpp \ BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp \ BulletDynamics/Featherstone/btMultiBodyJointMotor.cpp \ BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.cpp \ BulletDynamics/Featherstone/btMultiBodyJointMotor.h \

               BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.h \

BulletDynamics/Featherstone/btMultiBody.h \ BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h \ BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.h \ BulletDynamics/Featherstone/btMultiBodyLink.h \ BulletDynamics/Featherstone/btMultiBodyLinkCollider.h \ BulletDynamics/Featherstone/btMultiBodySolverConstraint.h \ BulletDynamics/Featherstone/btMultiBodyConstraint.h \ BulletDynamics/Featherstone/btMultiBodyPoint2Point.h \ BulletDynamics/Featherstone/btMultiBodyConstraint.cpp \ BulletDynamics/Featherstone/btMultiBodyPoint2Point.cpp \ BulletDynamics/MLCPSolvers/btDantzigLCP.cpp \

               BulletDynamics/MLCPSolvers/btMLCPSolver.cpp \

BulletDynamics/MLCPSolvers/btDantzigLCP.h \

       	BulletDynamics/MLCPSolvers/btDantzigSolver.h \
       	BulletDynamics/MLCPSolvers/btMLCPSolver.h \
       	BulletDynamics/MLCPSolvers/btMLCPSolverInterface.h \
       	BulletDynamics/MLCPSolvers/btPATHSolver.h \
       	BulletDynamics/MLCPSolvers/btSolveProjectedGaussSeidel.h \

BulletSoftBody/btDefaultSoftBodySolver.cpp \ BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.cpp \ BulletSoftBody/btSoftBody.cpp \ BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp \ BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp \ BulletSoftBody/btSoftRigidDynamicsWorld.cpp \ BulletSoftBody/btSoftBodyHelpers.cpp \ BulletSoftBody/btSoftSoftCollisionAlgorithm.cpp \ BulletSoftBody/btSparseSDF.h \ BulletSoftBody/btSoftRigidCollisionAlgorithm.h \ BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h \ BulletSoftBody/btSoftBody.h \ BulletSoftBody/btSoftSoftCollisionAlgorithm.h \ BulletSoftBody/btSoftBodyInternals.h \ BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.h \ BulletSoftBody/btSoftRigidDynamicsWorld.h \ BulletSoftBody/btSoftBodyHelpers.h



include $(BUILD_SHARED_LIBRARY) Than you must build openal . http://repo.or.cz/w/openal-soft/android.git Tham you nust build qt 4.8 for android http://necessitas.kde.org/ I used this tutorual for building https://community.kde.org/Necessitas/CompileQtFramework Than you must build ffmpeg . Important ! You must use ffmpeg 1.26 http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/

my script for build ./configure \

   --prefix=$(pwd)/android/$CPU  \
   --enable-shared \
   --disable-static \
   --disable-doc \
   --disable-ffmpeg \
   --disable-ffplay \
   --disable-ffprobe \
   --disable-ffserver \
   --disable-doc \
   --disable-symver \
   --cross-prefix=/home/sylar/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi- \
   --target-os=linux \
   --arch=arm \
   --enable-asm \
   --enable-cross-compile \
   --sysroot=/home/sylar/android-ndk-r9d/platforms/android-19/arch-arm \
   --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
   --extra-ldflags="$ADDI_LDFLAGS"

Tnan you must build SDL2 https://www.libsdl.org/hg.php I used Sdl2 mercurial latest source.

then I started to build openmw . At first you must remove all lines associated with x server in FindOGRE.cmake and add GLES2 instead GLES . For example ogre_find_plugin(RenderSystem_GLES2 OgreGLES2RenderSystem.h RenderSystems/GLES2/include) next I add this to main cmake file set(CMAKE_FIND_ROOT_PATH ${OPENMW_DEPENDENCIES_DIR} "${CMAKE_FIND_ROOT_PATH}") And now I can build openmw with it

cmake /home/sylar/openmw -DCMAKE_TOOLCHAIN_FILE=/home/sylar/android-cmake-master/android.toolchain.cmake -DOPENMW_DEPENDENCIES_DIR=/home/sylar/AndroidDependencies -DANDROID_NATIVE_API_LEVEL=14

next I remove line from main cmake file add_static_ogre_plugin(RenderSystem_GL) and add it add_static_ogre_plugin(RenderSystem_GLES2) . Next I add I remove line add_library(openmw executable

   ${OPENMW_LIBS} ${OPENMW_LIBS_HEADER}
   ${OPENMW_FILES}
   ${GAME} ${GAME_HEADER}
   ${APPLE_BUNDLE_RESOURCES}

)

in /openmw/apps/openmw/Cmakelists.txt

and add it . add_library(main SHARED

   ${OPENMW_LIBS} ${OPENMW_LIBS_HEADER}
   ${OPENMW_FILES}
   ${GAME} ${GAME_HEADER}
   ${APPLE_BUNDLE_RESOURCES}

)

also I add it

set(GAME

   main.cpp
   SDL_android_main.c
   engine.cpp

)

  1. //if(NOT WIN32)
# //  set(GAME ${GAME} crashcatcher.cpp)
  1. endif()
  1. Main executable

set(BOOST_COMPONENTS system filesystem program_options thread wave atomic) target_link_libraries(main

${OGRE_STATIC_PLUGINS}

  1. RenderSystem_GLES2Static
  2. //Plugin_OctreeSceneManagerStatic
  3. //Plugin_ParticleFXStatic
  4. ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL}
# ${OGRE_Plugin_ParticleFX_LIBRARY_REL}    
#${OGRE_RenderSystem_GLES2_LIBRARY_REL}   

)


target_link_libraries(main EGL android log dl

  1. ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL}
# ${OGRE_Plugin_ParticleFX_LIBRARY_REL}    
#${OGRE_RenderSystem_GLES2_LIBRARY_REL}   

) target_link_libraries(main boost_atomic boost_chrono boost_date_time boost_filesystem boost_program_options boost_system boost_thread boost_wave

  1. ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL}
# ${OGRE_Plugin_ParticleFX_LIBRARY_REL}    
#${OGRE_RenderSystem_GLES2_LIBRARY_REL}   

) target_link_libraries(main FreeImage freetype

  1. ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL}
# ${OGRE_Plugin_ParticleFX_LIBRARY_REL}    
#${OGRE_RenderSystem_GLES2_LIBRARY_REL}   

)

target_link_libraries(main OgreMainStatic

  1. ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL}
# ${OGRE_Plugin_ParticleFX_LIBRARY_REL}    
#${OGRE_RenderSystem_GLES2_LIBRARY_REL}   

)

target_link_libraries(main MyGUI.OgrePlatform MyGUIEngineStatic Plugin_StrangeButtonStatic cpufeatures

  1. ${OGRE_Plugin_OctreeSceneManager_LIBRARY_REL}
# ${OGRE_Plugin_ParticleFX_LIBRARY_REL}    
#${OGRE_RenderSystem_GLES2_LIBRARY_REL}   

) Next I changed paths in /openmw/components/files/linuxpath.cpp for example

return getEnv("XDG_DATA_HOME", "/sdcard/morrowind/share") / mName;

Next I add patch in ogreinit.cpp and ogreinit.hpp I comment it // Set up logging first

  //     new Ogre::LogManager;
    //   Ogre::Log *log = Ogre::LogManager::getSingleton().createLog(logPath);
  // #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
       // Use custom listener only on Windows
      // log->addListener(new LogListener(logPath));
//   #endif
       // Disable logging to cout/cerr
      // log->setDebugOutputEnabled(false);

and change plugin gl on gles2

  1. ifdef ENABLE_PLUGIN_GLES2
  2. include "OgreGLES2Plugin.h"
  3. endif
  1. ifdef ENABLE_PLUGIN_GLES2
       Ogre::GLES2Plugin* mGLES2Plugin;
       #endif

Next you must add it to

opt["externalWindowHandle"] = Ogre::StringConverter::toString((int) wmInfo.info.android.window );
  opt["externalSurface"] = Ogre::StringConverter::toString((int) wmInfo.info.android.surface );
 /openmw/extern/sdl4ogre/sdlwindowhelper.cpp

Next I add this file to openmw SDL_android_main.c With it , I calle native c code from java wtih help jni . I rename main function in main.cpp to SDL_main .

Now you can build openmw lib


Next for eclipse project I use android-project example from SDL and use README-android.txt tutorial from sdl Next you must change shaders

diff --git a/files/materials/atmosphere.shader b/files/materials/atmosphere.shader index f02c576..c8a8e02 100644 --- a/files/materials/atmosphere.shader +++ b/files/materials/atmosphere.shader @@ -33,7 +33,7 @@

    SH_START_PROGRAM
    {

- shOutputColour(0) = alphaFade * atmosphereColour + (1.f - alphaFade) * horizonColour; + shOutputColour(0) = alphaFade * atmosphereColour + (1.0 - alphaFade) * horizonColour;

    }

#endif

diff --git a/files/materials/clouds.shader b/files/materials/clouds.shader index d3e5f08..9e9b102 100644 --- a/files/materials/clouds.shader +++ b/files/materials/clouds.shader @@ -25,7 +25,7 @@

        shOutputPosition = shMatrixMult(proj, shMatrixMult(worldviewFixed, shInputPosition));
        UV = uv0;

- alphaFade = (shInputPosition.z <= 200.f) ? ((shInputPosition.z <= 100.f) ? 0.0 : 0.25) : 1.0; + alphaFade = (shInputPosition.z <= 200.0) ? ((shInputPosition.z <= 100.0) ? 0.0 : 0.25) : 1.0;

    }

#else

diff --git a/files/materials/mygui.shader b/files/materials/mygui.shader index 014558d..4d12eba 100644 --- a/files/materials/mygui.shader +++ b/files/materials/mygui.shader @@ -14,7 +14,7 @@

    SH_START_PROGRAM
    {

- shOutputPosition = float4(shInputPosition.xyz, 1.f); + shOutputPosition = float4(shInputPosition.xyz, 1.0);

#if TEXTURE
        UV.xy = uv0;
#endif

diff --git a/files/materials/objects.shader b/files/materials/objects.shader index ed75bab..bacf3f9 100644 --- a/files/materials/objects.shader +++ b/files/materials/objects.shader @@ -210,11 +210,11 @@

#if VERTEXCOLOR_MODE == 2
            lightResult.xyz += colour.xyz * lightDiffuse[@shIterator].xyz
                    * shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))

- * max(dot(viewNormal.xyz, lightDir), 0); + * max(dot(viewNormal.xyz, lightDir), 0.0);

#else
            lightResult.xyz += materialDiffuse.xyz * lightDiffuse[@shIterator].xyz
                    * shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))

- * max(dot(viewNormal.xyz, lightDir), 0); + * max(dot(viewNormal.xyz, lightDir), 0.0);

#endif

#if @shIterator == 0

@@ -432,11 +432,11 @@

#if VERTEXCOLOR_MODE == 2
            lightResult.xyz += colourPassthrough.xyz * lightDiffuse[@shIterator].xyz
                    * shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))

- * max(dot(viewNormal.xyz, lightDir), 0); + * max(dot(viewNormal.xyz, lightDir), 0.0);

#else
            lightResult.xyz += materialDiffuse.xyz * lightDiffuse[@shIterator].xyz
                    * shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))

- * max(dot(viewNormal.xyz, lightDir), 0); + * max(dot(viewNormal.xyz, lightDir), 0.0);

#endif

#if @shIterator == 0

@@ -504,8 +504,8 @@

#if ENV_MAP
        // Everything looks better with fresnel

- float facing = 1.0 - max(abs(dot(-eyeDir, normal)), 0); - float envFactor = shSaturate(0.25 + 0.75 * pow(facing, 1)); + float facing = 1.0 - max(abs(dot(-eyeDir, normal)), 0.0); + float envFactor = shSaturate(0.25 + 0.75 * pow(facing, 1.0));

        shOutputColour(0).xyz += shSample(envMap, UV.zw).xyz * envFactor * env_map_color;
#endif

@@ -513,7 +513,7 @@

#if SPECULAR
        float3 light0Dir = normalize(lightPosObjSpace0.xyz);

- float NdotL = max(dot(normal, light0Dir), 0); + float NdotL = max(dot(normal, light0Dir), 0.0);

        float3 halfVec = normalize (light0Dir + eyeDir);

        float shininess = matShininess;

@@ -522,7 +522,7 @@

        shininess *= (specTex.a);
#endif

- float3 specular = pow(max(dot(normal, halfVec), 0), shininess) * lightSpec0 * matSpec; + float3 specular = pow(max(dot(normal, halfVec), 0.0), shininess) * lightSpec0 * matSpec;

#if SPEC_MAP
        specular *= specTex.xyz;
#else

diff --git a/files/materials/terrain.shader b/files/materials/terrain.shader index 1436de0..8384588 100644 --- a/files/materials/terrain.shader +++ b/files/materials/terrain.shader @@ -175,7 +175,7 @@

            lightResult.xyz += lightDiffuse[@shIterator].xyz
                    * shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))

- * max(dot(normal.xyz, lightDir), 0); + * max(dot(normal.xyz, lightDir), 0.0);

#if @shIterator == 0
            directionalResult = lightResult.xyz;

@@ -310,7 +310,7 @@ shUniform(float4, cameraPos) @shAutoConstant(cameraPos, camera_position)

#if !IS_FIRST_PASS
// Opacity the previous passes should have, i.e. 1 - (opacity of this pass)

-float previousAlpha = 1.f; +float previousAlpha = 1.0;

#endif


@@ -334,7 +334,7 @@ float2 blendUV = (UV - 0.5) * (16.0 / (16.0+1.0)) + 0.5;

        float4 albedo = float4(0,0,0,1);

- float2 layerUV = float2(UV.x, 1.f-UV.y) * 16; // Reverse Y, required to get proper tangents + float2 layerUV = float2(UV.x, 1.0-UV.y) * 16.0; // Reverse Y, required to get proper tangents

        float2 thisLayerUV;
        float4 normalTex;
        float4 diffuseTex;

@@ -349,9 +349,9 @@ float2 blendUV = (UV - 0.5) * (16.0 / (16.0+1.0)) + 0.5;

#if @shPropertyBool(use_normal_map_@shIterator)
        normalTex = shSample(normalMap@shIterator, thisLayerUV);
#if @shIterator == 0 && IS_FIRST_PASS

- TSnormal = normalize(normalTex.xyz * 2 - 1); + TSnormal = normalize(normalTex.xyz * 2.0 - 1.0);

#else

- TSnormal = shLerp(TSnormal, normalTex.xyz * 2 - 1, blendValues@shPropertyString(blendmap_component_@shIterator)); + TSnormal = shLerp(TSnormal, normalTex.xyz * 2.0 - 1.0, blendValues@shPropertyString(blendmap_component_@shIterator));

#endif
#endif

@@ -361,7 +361,7 @@ float2 blendUV = (UV - 0.5) * (16.0 / (16.0+1.0)) + 0.5;

        diffuseTex = shSample(diffuseMap@shIterator, layerUV);
#if !@shPropertyBool(use_specular_@shIterator)

- diffuseTex.a = 0; + diffuseTex.a = 0.0;

#endif

#if @shIterator == 0

@@ -371,7 +371,7 @@ albedo = shLerp(albedo, diffuseTex, blendValues@shPropertyString(blendmap_compon

#endif

#if !IS_FIRST_PASS

- previousAlpha *= 1.f-blendValues@shPropertyString(blendmap_component_@shIterator); + previousAlpha *= 1.0-blendValues@shPropertyString(blendmap_component_@shIterator);

#endif


@@ -404,7 +404,7 @@ albedo = shLerp(albedo, diffuseTex, blendValues@shPropertyString(blendmap_compon

            lightResult.xyz += lightDiffuse[@shIterator].xyz
                    * shSaturate(1.0 / ((lightAttenuation[@shIterator].y) + (lightAttenuation[@shIterator].z * d) + (lightAttenuation[@shIterator].w * d * d)))

- * max(dot(normal.xyz, lightDir), 0); + * max(dot(normal.xyz, lightDir), 0.0);

#if @shIterator == 0
            float3 directionalResult = lightResult.xyz;
#endif

@@ -444,10 +444,10 @@ albedo = shLerp(albedo, diffuseTex, blendValues@shPropertyString(blendmap_compon

        // Specular
        float3 light0Dir = normalize(lightPos0.xyz);

- float NdotL = max(dot(normal, light0Dir), 0); + float NdotL = max(dot(normal, light0Dir), 0.0);

        float3 halfVec = normalize (light0Dir + eyeDir);

- float3 specular = pow(max(dot(normal, halfVec), 0), 32) * lightSpec0; + float3 specular = pow(max(dot(normal, halfVec), 0.0), 32.0) * lightSpec0;

        shOutputColour(0).xyz += specular * (albedo.a) * shadow;
#endif

@@ -465,9 +465,9 @@ albedo = shLerp(albedo, diffuseTex, blendValues@shPropertyString(blendmap_compon

        shOutputColour(0).xyz = max(shOutputColour(0).xyz, float3(0,0,0));

#if IS_FIRST_PASS

- shOutputColour(0).a = 1; + shOutputColour(0).a = 1.0;

#else

- shOutputColour(0).a = 1.f-previousAlpha; + shOutputColour(0).a = 1.0-previousAlpha;

#endif
    }