Ogre3D 1.8.1 Android移植
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
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,欢迎指正。