Ogre3D 1.8.1 Android移植

来源:互联网 发布:数据分析师考试含金量 编辑:程序博客网 时间:2024/05/14 22:02

1.准备工作

系统环境: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,后面我们要先做这些依赖库的移植。

2.建立工作目录

建立一个叫ogre-port的工作目录,准备好了之后,结构如下:

Dependencies

--jni

OGRE

--jni

我们分两步来移植,第一步移植依赖库,都放在Dependencies/jni下面,第二步才能正确移植Ogre,Ogre的源代码都放在OGRE/jni下面。

解开下载来的ogredeps,我们需要的只有三个库,分别是FreeImage,freetype和zziplib,其他的都不需要。将这三个库拷贝到Dependencies/jni下面。

将Ogre的源代码解压,拷贝到OGRE/jni下面,准备工作就算结束了,下面可以开始具体的移植工作。

3.移植依赖库

在Dependencies/jni下创建两个文件Android.mk,Application.mk:

Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS) LOCAL_MODULE    := libzzipLOCAL_LDLIBS    := -ldl -lzLOCAL_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 -lzLOCAL_C_INCLUDES    := $(LOCAL_PATH)/freeimage $(LOCAL_PATH)/freeimage/Metadata $(LOCAL_PATH)/freeimage/DeprecationManagerLOCAL_CFLAGS        += -DFREEIMAGE_LIB=1 -DPNG_STATIC=1LOCAL_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    := libfreetypeLOCAL_C_INCLUDES    := $(LOCAL_PATH)/freetype/include $(LOCAL_PATH)/freetype/builds/unixLOCAL_CFLAGS   := -DFT2_BUILD_LIBRARYLOCAL_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 := releaseAPP_PLATFORM := android-8APP_PLATFORM := gnustl_staticAPP_CPPFLAGS += -frttiAPP_CPPFLAGS += -fexceptionsAPP_CPPFLAGS += -DANDROIDAPP_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动态库的时候会用到。

4.移植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        := libogreLOCAL_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/jniLOCAL_CFLAGS        := -DFREEIMAGE_LIB=1 -DOGRE_NONCLIENT_BUILD=1LOCAL_LDLIBS        := -L$(LOCAL_PATH)/../lib -lfreeimage -lzzip -ldl -llog -lz -lGLESv2 -lfreetypeLOCAL_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 := releaseAPP_PLATFORM := android-8APP_PLATFORM := gnustl_staticAPP_CPPFLAGS += -frttiAPP_CPPFLAGS += -fexceptionsAPP_CPPFLAGS += -DANDROIDAPP_MODULES := ogre

编译前,做一些小的修改,ogre/Components/RTShaderSystem/OgreShaderGLSLESProgramWriter.cpp,在头文件包含中加入一行:

#include “OgreLogManager.h”

进入目录OGRE,执行ndk-build -j4。到此大功告成。

5.后记

移植并不是很完美,FreeImage很多图片格式无法支持,有点遗憾。移植好的代码我放到了Github上,地址是 https://github.com/cloudstrifegit/ogre-android,欢迎指正。

原创粉丝点击