系统环境:Linux Ubuntu12.04 LTS 32bit
NDK:因为官方NDK对C++异常支持不够完整,所以这里使用的是非官方版本的NDK,下载地址http://www.crystax.net/en/android/ndk/7
下载源代码:
Ogre3D 1.8.1 https://sourceforge.net/projects/ogre/files/ogre/1.8/1.8.1/ogre_src_v1-8-1.tar.bz2/download
还需要下载一些依赖的库,http://bitbucket.org/cabalistic/ogredeps,后面我们要先做这些依赖库的移植。
建立一个叫ogre-port的工作目录,准备好了之后,结构如下:
Dependencies
--jni
OGRE
--jni
我们分两步来移植,第一步移植依赖库,都放在Dependencies/jni下面,第二步才能正确移植Ogre,Ogre的源代码都放在OGRE/jni下面。
解开下载来的ogredeps,我们需要的只有三个库,分别是FreeImage,freetype和zziplib,其他的都不需要。将这三个库拷贝到Dependencies/jni下面。
将Ogre的源代码解压,拷贝到OGRE/jni下面,准备工作就算结束了,下面可以开始具体的移植工作。
在Dependencies/jni下创建两个文件Android.mk,Application.mk:
Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libzzip LOCAL_LDLIBS := -ldl -lz LOCAL_SRC_FILES := zzip/dir.c zzip/err.c zzip/fetch.c zzip/file.c zzip/fseeko.c zzip/info.c zzip/memdisk.c zzip/mmapped.c zzip/plugin.c zzip/stat.c zzip/write.c zzip/zip.c include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := libfreeimage LOCAL_LDLIBS := -ldl -lz LOCAL_C_INCLUDES := $(LOCAL_PATH)/freeimage $(LOCAL_PATH)/freeimage/Metadata $(LOCAL_PATH)/freeimage/DeprecationManager LOCAL_CFLAGS += -DFREEIMAGE_LIB=1 -DPNG_STATIC=1 LOCAL_SRC_FILES :=\ freeimage/DeprecationManager/Deprecated.cpp\ freeimage/DeprecationManager/DeprecationMgr.cpp\ freeimage/FreeImage/BitmapAccess.cpp\ freeimage/FreeImage/CacheFile.cpp\ freeimage/FreeImage/ColorLookup.cpp\ freeimage/FreeImage/Conversion.cpp\ freeimage/FreeImage/ConversionFloat.cpp\ freeimage/FreeImage/Conversion4.cpp\ freeimage/FreeImage/Conversion8.cpp\ freeimage/FreeImage/Conversion16_555.cpp\ freeimage/FreeImage/Conversion16_565.cpp\ freeimage/FreeImage/Conversion24.cpp\ freeimage/FreeImage/Conversion32.cpp\ freeimage/FreeImage/ConversionRGB16.cpp\ freeimage/FreeImage/ConversionRGBF.cpp\ freeimage/FreeImage/ConversionUINT16.cpp\ freeimage/FreeImage/ConversionType.cpp\ freeimage/FreeImage/FreeImage.cpp\ freeimage/FreeImage/FreeImageIO.cpp\ freeimage/FreeImage/GetType.cpp\ freeimage/FreeImage/Halftoning.cpp\ freeimage/FreeImage/J2KHelper.cpp\ freeimage/FreeImage/MemoryIO.cpp\ freeimage/FreeImage/MultiPage.cpp\ freeimage/FreeImage/NNQuantizer.cpp\ freeimage/FreeImage/PixelAccess.cpp\ freeimage/FreeImage/Plugin.cpp\ freeimage/FreeImage/PluginGIF.cpp\ freeimage/FreeImage/PluginJPEG.cpp\ freeimage/FreeImage/PluginPNG.cpp\ freeimage/FreeImage/ToneMapping.cpp\ freeimage/FreeImage/tmoColorConvert.cpp\ freeimage/FreeImage/tmoDrago03.cpp\ freeimage/FreeImage/tmoFattal02.cpp\ freeimage/FreeImage/tmoReinhard05.cpp\ freeimage/FreeImage/WuQuantizer.cpp\ freeimage/FreeImage/ZLibInterface.cpp\ freeimage/FreeImageToolkit/Background.cpp\ freeimage/FreeImageToolkit/Colors.cpp\ freeimage/FreeImageToolkit/Flip.cpp\ freeimage/FreeImageToolkit/Resize.cpp\ freeimage/FreeImageToolkit/BSplineRotate.cpp\ freeimage/FreeImageToolkit/CopyPaste.cpp\ freeimage/FreeImageToolkit/JPEGTransform.cpp\ freeimage/FreeImageToolkit/Channels.cpp\ freeimage/FreeImageToolkit/Display.cpp\ freeimage/FreeImageToolkit/MultigridPoissonSolver.cpp\ freeimage/FreeImageToolkit/ClassicRotate.cpp\ freeimage/FreeImageToolkit/Rescale.cpp\ freeimage/LibJPEG/ckconfig.c\ freeimage/LibJPEG/jaricom.c\ freeimage/LibJPEG/jcapimin.c\ freeimage/LibJPEG/jcapistd.c\ freeimage/LibJPEG/jcarith.c\ freeimage/LibJPEG/jccoefct.c\ freeimage/LibJPEG/jccolor.c\ freeimage/LibJPEG/jcdctmgr.c\ freeimage/LibJPEG/jchuff.c\ freeimage/LibJPEG/jcinit.c\ freeimage/LibJPEG/jcmainct.c\ freeimage/LibJPEG/jcmarker.c\ freeimage/LibJPEG/jcmaster.c\ freeimage/LibJPEG/jcomapi.c\ freeimage/LibJPEG/jconfig.txt\ freeimage/LibJPEG/jcparam.c\ freeimage/LibJPEG/jcprepct.c\ freeimage/LibJPEG/jcsample.c\ freeimage/LibJPEG/jctrans.c\ freeimage/LibJPEG/jdapimin.c\ freeimage/LibJPEG/jdapistd.c\ freeimage/LibJPEG/jdarith.c\ freeimage/LibJPEG/jdatadst.c\ freeimage/LibJPEG/jdatasrc.c\ freeimage/LibJPEG/jdcoefct.c\ freeimage/LibJPEG/jdcolor.c\ freeimage/LibJPEG/jddctmgr.c\ freeimage/LibJPEG/jdhuff.c\ freeimage/LibJPEG/jdinput.c\ freeimage/LibJPEG/jdmainct.c\ freeimage/LibJPEG/jdmarker.c\ freeimage/LibJPEG/jdmaster.c\ freeimage/LibJPEG/jdmerge.c\ freeimage/LibJPEG/jdpostct.c\ freeimage/LibJPEG/jdsample.c\ freeimage/LibJPEG/jdtrans.c\ freeimage/LibJPEG/jerror.c\ freeimage/LibJPEG/jfdctflt.c\ freeimage/LibJPEG/jfdctfst.c\ freeimage/LibJPEG/jfdctint.c\ freeimage/LibJPEG/jidctflt.c\ freeimage/LibJPEG/jidctfst.c\ freeimage/LibJPEG/jidctint.c\ freeimage/LibJPEG/jmemmgr.c\ freeimage/LibJPEG/jmemnobs.c\ freeimage/LibJPEG/jquant1.c\ freeimage/LibJPEG/jquant2.c\ freeimage/LibJPEG/jutils.c\ freeimage/LibJPEG/rdbmp.c\ freeimage/LibJPEG/rdcolmap.c\ freeimage/LibJPEG/rdgif.c\ freeimage/LibJPEG/rdppm.c\ freeimage/LibJPEG/rdrle.c\ freeimage/LibJPEG/rdswitch.c\ freeimage/LibJPEG/rdtarga.c\ freeimage/LibJPEG/transupp.c\ freeimage/LibJPEG/wrbmp.c\ freeimage/LibJPEG/wrgif.c\ freeimage/LibJPEG/wrppm.c\ freeimage/LibJPEG/wrrle.c\ freeimage/LibJPEG/wrtarga.c\ freeimage/LibPNG/png.c\ freeimage/LibPNG/pngerror.c\ freeimage/LibPNG/pnggccrd.c\ freeimage/LibPNG/pngget.c\ freeimage/LibPNG/pngmem.c\ freeimage/LibPNG/pngpread.c\ freeimage/LibPNG/pngread.c\ freeimage/LibPNG/pngrio.c\ freeimage/LibPNG/pngrtran.c\ freeimage/LibPNG/pngrutil.c\ freeimage/LibPNG/pngset.c\ freeimage/LibPNG/pngtrans.c\ freeimage/LibPNG/pngvcrd.c\ freeimage/LibPNG/pngwio.c\ freeimage/LibPNG/pngwrite.c\ freeimage/LibPNG/pngwtran.c\ freeimage/LibPNG/pngwutil.c\ freeimage/Metadata/Exif.cpp\ freeimage/Metadata/FIRational.cpp\ freeimage/Metadata/FreeImageTag.cpp\ freeimage/Metadata/IPTC.cpp\ freeimage/Metadata/TagConversion.cpp\ freeimage/Metadata/TagLib.cpp\ freeimage/LibOpenJPEG/bio.c\ freeimage/LibOpenJPEG/cidx_manager.c\ freeimage/LibOpenJPEG/cio.c\ freeimage/LibOpenJPEG/dwt.c\ freeimage/LibOpenJPEG/event.c\ freeimage/LibOpenJPEG/image.c\ freeimage/LibOpenJPEG/j2k.c\ freeimage/LibOpenJPEG/j2k_lib.c\ freeimage/LibOpenJPEG/jp2.c\ freeimage/LibOpenJPEG/jpt.c\ freeimage/LibOpenJPEG/mct.c\ freeimage/LibOpenJPEG/mct.h\ freeimage/LibOpenJPEG/mqc.c\ freeimage/LibOpenJPEG/mqc.h\ freeimage/LibOpenJPEG/openjpeg.c\ freeimage/LibOpenJPEG/phix_manager.c\ freeimage/LibOpenJPEG/pi.c\ freeimage/LibOpenJPEG/ppix_manager.c\ freeimage/LibOpenJPEG/raw.c\ freeimage/LibOpenJPEG/t1.c\ freeimage/LibOpenJPEG/t2.c\ freeimage/LibOpenJPEG/tcd.c\ freeimage/LibOpenJPEG/tgt.c\ freeimage/LibOpenJPEG/thix_manager.c\ freeimage/LibOpenJPEG/tpix_manager.c\ include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := libfreetype LOCAL_C_INCLUDES := $(LOCAL_PATH)/freetype/include $(LOCAL_PATH)/freetype/builds/unix LOCAL_CFLAGS := -DFT2_BUILD_LIBRARY LOCAL_SRC_FILES :=\ freetype/src/autofit/autofit.c\ freetype/src/base/ftbase.c\ freetype/src/base/ftbbox.c\ freetype/src/base/ftbitmap.c\ freetype/src/base/ftfstype.c\ freetype/src/base/ftgasp.c\ freetype/src/base/ftglyph.c\ freetype/src/base/ftinit.c\ freetype/src/base/ftmm.c\ freetype/src/base/ftpfr.c\ freetype/src/base/ftstroke.c\ freetype/src/base/ftsynth.c\ freetype/src/base/ftsystem.c\ freetype/src/base/fttype1.c\ freetype/src/base/ftwinfnt.c\ freetype/src/bdf/bdf.c\ freetype/src/bzip2/ftbzip2.c\ freetype/src/cache/ftcache.c\ freetype/src/cff/cff.c\ freetype/src/cid/type1cid.c\ freetype/src/gzip/ftgzip.c\ freetype/src/lzw/ftlzw.c\ freetype/src/pcf/pcf.c\ freetype/src/pfr/pfr.c\ freetype/src/psaux/psaux.c\ freetype/src/pshinter/pshinter.c\ freetype/src/psnames/psmodule.c\ freetype/src/raster/raster.c\ freetype/src/sfnt/sfnt.c\ freetype/src/smooth/smooth.c\ freetype/src/truetype/truetype.c\ freetype/src/type1/type1.c\ freetype/src/type42/type42.c\ freetype/src/winfonts/winfnt.c include $(BUILD_STATIC_LIBRARY)
Application.mk
APP_OPTIM := release APP_PLATFORM := android-8 APP_PLATFORM := gnustl_static APP_CPPFLAGS += -frtti APP_CPPFLAGS += -fexceptions APP_CPPFLAGS += -DANDROID APP_MODULES := freeimage freetype zzip
这里,依赖库都编译成静态库。
先别编译,代码还有些小的调整,
找到Dependencies / jni / zzip / _config.h这个文件,将27行注释掉,
#ifndef ZZIP_HAVE_DIRENT_H
// #define ZZIP_HAVE_DIRENT_H 1
#endif
不注释掉,后面会报错,说找不到telldir的引用。
找到Dependencies/jni/freeimage/FreeImage/Plugin.cpp这个文件,把无法移植的组件都注释掉,从224行开始
if (s_plugins) { /* NOTE : The order used to initialize internal plugins below MUST BE the same order as the one used to define the FREE_IMAGE_FORMAT enum. */ //s_plugins->AddNode(InitBMP); //s_plugins->AddNode(InitICO); s_plugins->AddNode(InitJPEG); //s_plugins->AddNode(InitJNG); //s_plugins->AddNode(InitKOALA); //s_plugins->AddNode(InitIFF); //s_plugins->AddNode(InitMNG); //s_plugins->AddNode(InitPNM, NULL, "PBM", "Portable Bitmap (ASCII)", "pbm", "^P1"); //s_plugins->AddNode(InitPNM, NULL, "PBMRAW", "Portable Bitmap (RAW)", "pbm", "^P4"); //s_plugins->AddNode(InitPCD); //s_plugins->AddNode(InitPCX); //s_plugins->AddNode(InitPNM, NULL, "PGM", "Portable Greymap (ASCII)", "pgm", "^P2"); //s_plugins->AddNode(InitPNM, NULL, "PGMRAW", "Portable Greymap (RAW)", "pgm", "^P5"); s_plugins->AddNode(InitPNG); //s_plugins->AddNode(InitPNM, NULL, "PPM", "Portable Pixelmap (ASCII)", "ppm", "^P3"); //s_plugins->AddNode(InitPNM, NULL, "PPMRAW", "Portable Pixelmap (RAW)", "ppm", "^P6"); //s_plugins->AddNode(InitRAS); //s_plugins->AddNode(InitTARGA); //s_plugins->AddNode(InitTIFF); //s_plugins->AddNode(InitWBMP); //s_plugins->AddNode(InitPSD); //s_plugins->AddNode(InitCUT); //s_plugins->AddNode(InitXBM); //s_plugins->AddNode(InitXPM); //s_plugins->AddNode(InitDDS); s_plugins->AddNode(InitGIF); //s_plugins->AddNode(InitHDR); //s_plugins->AddNode(InitG3); //s_plugins->AddNode(InitSGI); //s_plugins->AddNode(InitEXR); //s_plugins->AddNode(InitJ2K); //s_plugins->AddNode(InitJP2); //s_plugins->AddNode(InitPFM); //s_plugins->AddNode(InitPICT); //s_plugins->AddNode(InitRAW); // external plugin initialization
进入Dependencies目录,执行ndk-build -j4,编译比较慢,加上参数-j4可以加快编译速度,4代表你的机器的核心数。
编译完成后,把生成的静态库放到OGRE/lib目录下,链接生成ogre动态库的时候会用到。
在OGRE/jni下面创建文件OgreBuildSettings.h,Android下某些组件不能工作,需要靠这个文件来将其禁用掉,否则编译没办法继续,内容如下:
#ifndef _Custom_Config_H_
#define _Custom_Config_H_
#define OGRE_MEMORY_ALLOCATOR OGRE_MEMORY_ALLOCATOR_STD
#define OGRE_NO_GLES3_CG_SUPPORT 1
#define OGRE_NO_GLES2_CG_SUPPORT 1
#define OGRE_NO_GLES2_GLSL_OPTIMISER 1
#endif
然后准备Make文件:
Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libogre LOCAL_C_INCLUDES := $(LOCAL_PATH)/ogre $(LOCAL_PATH)/ogre/OgreMain/include $(LOCAL_PATH)/ogre/dependencies $(LOCAL_PATH)/ogre/dependencies/freeimage $(LOCAL_PATH)/ogre/Components/RTShaderSystem/include $(LOCAL_PATH)/ogre/RenderSystems/GLES2/include $(LOCAL_PATH)/ogre/RenderSystems/GLES2/include $(LOCAL_PATH)/ogre/RenderSystems/GLES2/src/GLSLES/include $(LOCAL_PATH)/ogre/RenderSystems/GLES2/include/Android $(LOCAL_PATH)/ogre/PlugIns/ParticleFX/include $(LOCAL_PATH)/../../Dependencies/jni/freetype/include $(LOCAL_PATH)/../../Dependencies/jni/freeimage $(LOCAL_PATH)/../../Dependencies/jni LOCAL_CFLAGS := -DFREEIMAGE_LIB=1 -DOGRE_NONCLIENT_BUILD=1 LOCAL_LDLIBS := -L$(LOCAL_PATH)/../lib -lfreeimage -lzzip -ldl -llog -lz -lGLESv2 -lfreetype LOCAL_SRC_FILES := ogre/OgreMain/src/OgreAlignedAllocator.cpp\ ogre/OgreMain/src/OgreAnimable.cpp\ ogre/OgreMain/src/OgreAnimation.cpp\ ogre/OgreMain/src/OgreAnimationState.cpp\ ogre/OgreMain/src/OgreAnimationTrack.cpp\ ogre/OgreMain/src/OgreArchiveManager.cpp\ ogre/OgreMain/src/OgreAutoParamDataSource.cpp\ ogre/OgreMain/src/OgreAxisAlignedBox.cpp\ ogre/OgreMain/src/OgreBillboard.cpp\ ogre/OgreMain/src/OgreBillboardChain.cpp\ ogre/OgreMain/src/OgreBillboardParticleRenderer.cpp\ ogre/OgreMain/src/OgreBillboardSet.cpp\ ogre/OgreMain/src/OgreBone.cpp\ ogre/OgreMain/src/OgreBorderPanelOverlayElement.cpp\ ogre/OgreMain/src/OgreCamera.cpp\ ogre/OgreMain/src/OgreCodec.cpp\ ogre/OgreMain/src/OgreColourValue.cpp\ ogre/OgreMain/src/OgreCommon.cpp\ ogre/OgreMain/src/OgreCompositionPass.cpp\ ogre/OgreMain/src/OgreCompositionTargetPass.cpp\ ogre/OgreMain/src/OgreCompositionTechnique.cpp\ ogre/OgreMain/src/OgreCompositor.cpp\ ogre/OgreMain/src/OgreCompositorChain.cpp\ ogre/OgreMain/src/OgreCompositorInstance.cpp\ ogre/OgreMain/src/OgreCompositorManager.cpp\ ogre/OgreMain/src/OgreConfigFile.cpp\ ogre/OgreMain/src/OgreControllerManager.cpp\ ogre/OgreMain/src/OgreConvexBody.cpp\ ogre/OgreMain/src/OgreDataStream.cpp\ ogre/OgreMain/src/OgreDDSCodec.cpp\ ogre/OgreMain/src/OgreDefaultHardwareBufferManager.cpp\ ogre/OgreMain/src/OgreDefaultSceneQueries.cpp\ ogre/OgreMain/src/OgreDeflate.cpp\ ogre/OgreMain/src/OgreDepthBuffer.cpp\ ogre/OgreMain/src/OgreDistanceLodStrategy.cpp\ ogre/OgreMain/src/OgreDualQuaternion.cpp\ ogre/OgreMain/src/OgreDynLib.cpp\ ogre/OgreMain/src/OgreDynLibManager.cpp\ ogre/OgreMain/src/OgreEdgeListBuilder.cpp\ ogre/OgreMain/src/OgreEntity.cpp\ ogre/OgreMain/src/OgreException.cpp\ ogre/OgreMain/src/OgreExternalTextureSource.cpp\ ogre/OgreMain/src/OgreExternalTextureSourceManager.cpp\ ogre/OgreMain/src/OgreFileSystem.cpp\ ogre/OgreMain/src/OgreFont.cpp\ ogre/OgreMain/src/OgreFontManager.cpp\ ogre/OgreMain/src/OgreFreeImageCodec.cpp\ ogre/OgreMain/src/OgreFrustum.cpp\ ogre/OgreMain/src/OgreGpuProgram.cpp\ ogre/OgreMain/src/OgreGpuProgramManager.cpp\ ogre/OgreMain/src/OgreGpuProgramParams.cpp\ ogre/OgreMain/src/OgreGpuProgramUsage.cpp\ ogre/OgreMain/src/OgreHardwareBufferManager.cpp\ ogre/OgreMain/src/OgreHardwareIndexBuffer.cpp\ ogre/OgreMain/src/OgreHardwareOcclusionQuery.cpp\ ogre/OgreMain/src/OgreHardwarePixelBuffer.cpp\ ogre/OgreMain/src/OgreHardwareVertexBuffer.cpp\ ogre/OgreMain/src/OgreHighLevelGpuProgram.cpp\ ogre/OgreMain/src/OgreHighLevelGpuProgramManager.cpp\ ogre/OgreMain/src/OgreImage.cpp\ ogre/OgreMain/src/OgreInstanceBatch.cpp\ ogre/OgreMain/src/OgreInstanceBatchHW.cpp\ ogre/OgreMain/src/OgreInstanceBatchHW_VTF.cpp\ ogre/OgreMain/src/OgreInstanceBatchShader.cpp\ ogre/OgreMain/src/OgreInstanceBatchVTF.cpp\ ogre/OgreMain/src/OgreInstancedEntity.cpp\ ogre/OgreMain/src/OgreInstancedGeometry.cpp\ ogre/OgreMain/src/OgreInstanceManager.cpp\ ogre/OgreMain/src/OgreKeyFrame.cpp\ ogre/OgreMain/src/OgreLight.cpp\ ogre/OgreMain/src/OgreLodStrategy.cpp\ ogre/OgreMain/src/OgreLodStrategyManager.cpp\ ogre/OgreMain/src/OgreLog.cpp\ ogre/OgreMain/src/OgreLogManager.cpp\ ogre/OgreMain/src/OgreManualObject.cpp\ ogre/OgreMain/src/OgreMaterial.cpp\ ogre/OgreMain/src/OgreMaterialManager.cpp\ ogre/OgreMain/src/OgreMaterialSerializer.cpp\ ogre/OgreMain/src/OgreMath.cpp\ ogre/OgreMain/src/OgreMatrix3.cpp\ ogre/OgreMain/src/OgreMatrix4.cpp\ ogre/OgreMain/src/OgreMemoryAllocatedObject.cpp\ ogre/OgreMain/src/OgreMemoryNedAlloc.cpp\ ogre/OgreMain/src/OgreMemoryNedPooling.cpp\ ogre/OgreMain/src/OgreMemoryTracker.cpp\ ogre/OgreMain/src/OgreMesh.cpp\ ogre/OgreMain/src/OgreMeshManager.cpp\ ogre/OgreMain/src/OgreMeshSerializer.cpp\ ogre/OgreMain/src/OgreMeshSerializerImpl.cpp\ ogre/OgreMain/src/OgreMovableObject.cpp\ ogre/OgreMain/src/OgreMovablePlane.cpp\ ogre/OgreMain/src/OgreNode.cpp\ ogre/OgreMain/src/OgreNumerics.cpp\ ogre/OgreMain/src/OgreOptimisedUtil.cpp\ ogre/OgreMain/src/OgreOptimisedUtilGeneral.cpp\ ogre/OgreMain/src/OgreOptimisedUtilSSE.cpp\ ogre/OgreMain/src/OgreOverlay.cpp\ ogre/OgreMain/src/OgreOverlayContainer.cpp\ ogre/OgreMain/src/OgreOverlayElement.cpp\ ogre/OgreMain/src/OgreOverlayElementCommands.cpp\ ogre/OgreMain/src/OgreOverlayElementFactory.cpp\ ogre/OgreMain/src/OgreOverlayManager.cpp\ ogre/OgreMain/src/OgrePanelOverlayElement.cpp\ ogre/OgreMain/src/OgreParticle.cpp\ ogre/OgreMain/src/OgreParticleEmitter.cpp\ ogre/OgreMain/src/OgreParticleEmitterCommands.cpp\ ogre/OgreMain/src/OgreParticleIterator.cpp\ ogre/OgreMain/src/OgreParticleSystem.cpp\ ogre/OgreMain/src/OgreParticleSystemManager.cpp\ ogre/OgreMain/src/OgrePass.cpp\ ogre/OgreMain/src/OgrePatchMesh.cpp\ ogre/OgreMain/src/OgrePatchSurface.cpp\ ogre/OgreMain/src/OgrePixelCountLodStrategy.cpp\ ogre/OgreMain/src/OgrePixelFormat.cpp\ ogre/OgreMain/src/OgrePlane.cpp\ ogre/OgreMain/src/OgrePlatformInformation.cpp\ ogre/OgreMain/src/OgrePolygon.cpp\ ogre/OgreMain/src/OgrePose.cpp\ ogre/OgreMain/src/OgrePrecompiledHeaders.cpp\ ogre/OgreMain/src/OgrePredefinedControllers.cpp\ ogre/OgreMain/src/OgrePrefabFactory.cpp\ ogre/OgreMain/src/OgreProfiler.cpp\ ogre/OgreMain/src/OgreProgressiveMesh.cpp\ ogre/OgreMain/src/OgrePVRTCCodec.cpp\ ogre/OgreMain/src/OgreQuaternion.cpp\ ogre/OgreMain/src/OgreRectangle2D.cpp\ ogre/OgreMain/src/OgreRenderQueue.cpp\ ogre/OgreMain/src/OgreRenderQueueInvocation.cpp\ ogre/OgreMain/src/OgreRenderQueueSortingGrouping.cpp\ ogre/OgreMain/src/OgreRenderSystem.cpp\ ogre/OgreMain/src/OgreRenderSystemCapabilities.cpp\ ogre/OgreMain/src/OgreRenderSystemCapabilitiesManager.cpp\ ogre/OgreMain/src/OgreRenderSystemCapabilitiesSerializer.cpp\ ogre/OgreMain/src/OgreRenderTarget.cpp\ ogre/OgreMain/src/OgreRenderTexture.cpp\ ogre/OgreMain/src/OgreRenderToVertexBuffer.cpp\ ogre/OgreMain/src/OgreRenderWindow.cpp\ ogre/OgreMain/src/OgreResource.cpp\ ogre/OgreMain/src/OgreResourceBackgroundQueue.cpp\ ogre/OgreMain/src/OgreResourceGroupManager.cpp\ ogre/OgreMain/src/OgreResourceManager.cpp\ ogre/OgreMain/src/OgreRibbonTrail.cpp\ ogre/OgreMain/src/OgreRoot.cpp\ ogre/OgreMain/src/OgreRotationSpline.cpp\ ogre/OgreMain/src/OgreSceneManager.cpp\ ogre/OgreMain/src/OgreSceneManagerEnumerator.cpp\ ogre/OgreMain/src/OgreSceneNode.cpp\ ogre/OgreMain/src/OgreSceneQuery.cpp\ ogre/OgreMain/src/OgreScriptCompiler.cpp\ ogre/OgreMain/src/OgreScriptLexer.cpp\ ogre/OgreMain/src/OgreScriptParser.cpp\ ogre/OgreMain/src/OgreScriptTranslator.cpp\ ogre/OgreMain/src/OgreSearchOps.cpp\ ogre/OgreMain/src/OgreSerializer.cpp\ ogre/OgreMain/src/OgreShadowCameraSetup.cpp\ ogre/OgreMain/src/OgreShadowCameraSetupFocused.cpp\ ogre/OgreMain/src/OgreShadowCameraSetupLiSPSM.cpp\ ogre/OgreMain/src/OgreShadowCameraSetupPlaneOptimal.cpp\ ogre/OgreMain/src/OgreShadowCameraSetupPSSM.cpp\ ogre/OgreMain/src/OgreShadowCaster.cpp\ ogre/OgreMain/src/OgreShadowTextureManager.cpp\ ogre/OgreMain/src/OgreShadowVolumeExtrudeProgram.cpp\ ogre/OgreMain/src/OgreSimpleRenderable.cpp\ ogre/OgreMain/src/OgreSimpleSpline.cpp\ ogre/OgreMain/src/OgreSkeleton.cpp\ ogre/OgreMain/src/OgreSkeletonInstance.cpp\ ogre/OgreMain/src/OgreSkeletonManager.cpp\ ogre/OgreMain/src/OgreSkeletonSerializer.cpp\ ogre/OgreMain/src/OgreSmallVector.cpp\ ogre/OgreMain/src/OgreStaticGeometry.cpp\ ogre/OgreMain/src/OgreStreamSerialiser.cpp\ ogre/OgreMain/src/OgreString.cpp\ ogre/OgreMain/src/OgreStringConverter.cpp\ ogre/OgreMain/src/OgreStringInterface.cpp\ ogre/OgreMain/src/OgreSubEntity.cpp\ ogre/OgreMain/src/OgreSubMesh.cpp\ ogre/OgreMain/src/OgreTagPoint.cpp\ ogre/OgreMain/src/OgreTangentSpaceCalc.cpp\ ogre/OgreMain/src/OgreTechnique.cpp\ ogre/OgreMain/src/OgreTextAreaOverlayElement.cpp\ ogre/OgreMain/src/OgreTexture.cpp\ ogre/OgreMain/src/OgreTextureManager.cpp\ ogre/OgreMain/src/OgreTextureUnitState.cpp\ ogre/OgreMain/src/OgreUnifiedHighLevelGpuProgram.cpp\ ogre/OgreMain/src/OgreUserObjectBindings.cpp\ ogre/OgreMain/src/OgreUTFString.cpp\ ogre/OgreMain/src/OgreVector2.cpp\ ogre/OgreMain/src/OgreVector3.cpp\ ogre/OgreMain/src/OgreVector4.cpp\ ogre/OgreMain/src/OgreVertexIndexData.cpp\ ogre/OgreMain/src/OgreViewport.cpp\ ogre/OgreMain/src/OgreWindowEventUtilities.cpp\ ogre/OgreMain/src/OgreWireBoundingBox.cpp\ ogre/OgreMain/src/OgreWorkQueue.cpp\ ogre/OgreMain/src/OgreZip.cpp\ ogre/OgreMain/src/OgreStringSerialiser.cpp\ ogre/OgreMain/src/Android/OgreTimer.cpp\ ogre/OgreMain/src/Android/OgreConfigDialog.cpp\ ogre/OgreMain/src/Android/OgreErrorDialog.cpp\ ogre/OgreMain/src/Threading/OgreDefaultWorkQueueStandard.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderExIntegratedPSSM3.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderExLayeredBlending.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderExNormalMapLighting.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderExPerPixelLighting.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderExHardwareSkinning.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderFFPColour.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderFFPFog.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderFFPLighting.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderFFPRenderStateBuilder.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderFFPTexturing.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderFFPTransform.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderFunction.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderFunctionAtom.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderGenerator.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderGLSLESProgramProcessor.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderGLSLESProgramWriter.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderMaterialSerializerListener.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderParameter.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderProgram.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderProgramManager.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderProgramProcessor.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderProgramSet.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderProgramWriter.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderProgramWriterManager.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderRenderState.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderScriptTranslator.cpp\ ogre/Components/RTShaderSystem/src/OgreShaderSubRenderState.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2Context.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2DefaultHardwareBufferManager.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2DepthBuffer.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2EngineDll.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2FBOMultiRenderTarget.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2FBORenderTexture.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2FrameBufferObject.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2GpuProgram.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2GpuProgramManager.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2HardwareBufferManager.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2HardwareIndexBuffer.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2HardwareOcclusionQuery.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2HardwarePixelBuffer.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2HardwareVertexBuffer.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2PixelFormat.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2Plugin.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2RenderSystem.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2RenderTexture.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2Support.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2Texture.cpp\ ogre/RenderSystems/GLES2/src/OgreGLES2TextureManager.cpp\ ogre/RenderSystems/GLES2/src/GLSLES/src/OgreGLSLESExtSupport.cpp\ ogre/RenderSystems/GLES2/src/GLSLES/src/OgreGLSLESGpuProgram.cpp\ ogre/RenderSystems/GLES2/src/GLSLES/src/OgreGLSLESLinkProgram.cpp\ ogre/RenderSystems/GLES2/src/GLSLES/src/OgreGLSLESLinkProgramManager.cpp\ ogre/RenderSystems/GLES2/src/GLSLES/src/OgreGLSLESProgramCommon.cpp\ ogre/RenderSystems/GLES2/src/GLSLES/src/OgreGLSLESPreprocessor.cpp\ ogre/RenderSystems/GLES2/src/GLSLES/src/OgreGLSLESProgram.cpp\ ogre/RenderSystems/GLES2/src/GLSLES/src/OgreGLSLESProgramFactory.cpp\ ogre/RenderSystems/GLES2/src/GLSLES/src/OgreGLSLESProgramManagerCommon.cpp\ ogre/RenderSystems/GLES2/src/GLSLES/src/OgreGLSLESProgramPipeline.cpp\ ogre/RenderSystems/GLES2/src/GLSLES/src/OgreGLSLESProgramPipelineManager.cpp\ ogre/RenderSystems/GLES2/src/Android/OgreAndroidGLContext.cpp\ ogre/RenderSystems/GLES2/src/Android/OgreAndroidGLSupport.cpp\ ogre/RenderSystems/GLES2/src/Android/OgreAndroidWindow.cpp\ ogre/PlugIns/ParticleFX/src/OgreAreaEmitter.cpp\ ogre/PlugIns/ParticleFX/src/OgreBoxEmitter.cpp\ ogre/PlugIns/ParticleFX/src/OgreColourFaderAffector.cpp\ ogre/PlugIns/ParticleFX/src/OgreColourFaderAffector2.cpp\ ogre/PlugIns/ParticleFX/src/OgreColourImageAffector.cpp\ ogre/PlugIns/ParticleFX/src/OgreColourInterpolatorAffector.cpp\ ogre/PlugIns/ParticleFX/src/OgreCylinderEmitter.cpp\ ogre/PlugIns/ParticleFX/src/OgreDeflectorPlaneAffector.cpp\ ogre/PlugIns/ParticleFX/src/OgreDirectionRandomiserAffector.cpp\ ogre/PlugIns/ParticleFX/src/OgreEllipsoidEmitter.cpp\ ogre/PlugIns/ParticleFX/src/OgreHollowEllipsoidEmitter.cpp\ ogre/PlugIns/ParticleFX/src/OgreLinearForceAffector.cpp\ ogre/PlugIns/ParticleFX/src/OgreParticleFXPlugin.cpp\ ogre/PlugIns/ParticleFX/src/OgrePointEmitter.cpp\ ogre/PlugIns/ParticleFX/src/OgreRingEmitter.cpp\ ogre/PlugIns/ParticleFX/src/OgreRotationAffector.cpp\ ogre/PlugIns/ParticleFX/src/OgreScaleAffector.cpp LOCAL_STATIC_LIBRARIES := libfreeimage libft2 libzzip include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_OPTIM := release APP_PLATFORM := android-8 APP_PLATFORM := gnustl_static APP_CPPFLAGS += -frtti APP_CPPFLAGS += -fexceptions APP_CPPFLAGS += -DANDROID APP_MODULES := ogre
编译前,做一些小的修改,ogre/Components/RTShaderSystem/OgreShaderGLSLESProgramWriter.cpp,在头文件包含中加入一行:
#include “OgreLogManager.h”
进入目录OGRE,执行ndk-build -j4。到此大功告成。
移植并不是很完美,FreeImage很多图片格式无法支持,有点遗憾。移植好的代码我放到了Github上,地址是 https://github.com/cloudstrifegit/ogre-android,欢迎指正。