- add current iOS code
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9914 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
8b9b09e4cd
commit
b3dc16535f
@ -34,6 +34,7 @@
|
||||
<mkdir dir="${build.dir}/jogl"/>
|
||||
<mkdir dir="${build.dir}/lwjgl"/>
|
||||
<mkdir dir="${build.dir}/android"/>
|
||||
<mkdir dir="${build.dir}/ios"/>
|
||||
|
||||
<echo>Compile Core</echo>
|
||||
<j2seproject3:javac
|
||||
@ -182,6 +183,16 @@
|
||||
<fileset dir="${src.android.dir}" excludes="${build.classes.excludes},${excludes},**/jme3test/**,**/res/**" includes="${includes}"/>
|
||||
</copy>
|
||||
|
||||
<echo>Compile iOS</echo>
|
||||
<j2seproject3:javac
|
||||
destdir="${build.dir}/ios"
|
||||
srcdir="${src.ios.dir}"
|
||||
classpath="${javac.classpath}:${build.dir}/core:${build.dir}/plugins"
|
||||
gensrcdir="${build.generated.sources.dir}"/>
|
||||
<copy todir="${build.dir}/ios">
|
||||
<fileset dir="${src.ios.dir}" excludes="${build.classes.excludes},${excludes},**/jme3test/**,**/res/**" includes="${includes}"/>
|
||||
</copy>
|
||||
|
||||
<echo>Compile Tests</echo>
|
||||
<j2seproject3:javac
|
||||
destdir="${build.classes.dir}"
|
||||
@ -209,6 +220,7 @@
|
||||
<jar jarfile="${build.dir}/jME3-lwjgl.jar" basedir="${build.dir}/lwjgl" compress="true"/>
|
||||
<jar jarfile="${build.dir}/jME3-jogl.jar" basedir="${build.dir}/jogl" compress="true"/>
|
||||
<jar jarfile="${build.dir}/jME3-android.jar" basedir="${build.dir}/android" compress="true"/>
|
||||
<jar jarfile="${build.dir}/jME3-ios.jar" basedir="${build.dir}/ios" compress="true"/>
|
||||
|
||||
<echo>Building TestData JAR file..</echo>
|
||||
<jar jarfile="${build.dir}/jME3-testdata.jar" basedir="test-data" compress="true"/>
|
||||
@ -237,6 +249,7 @@
|
||||
<map from="${build.dir.resolved}/lwjgl" to="${build.dir}/jME3-lwjgl.jar"/>
|
||||
<map from="${build.dir.resolved}/jogl" to="${build.dir}/jME3-jogl.jar"/>
|
||||
<map from="${build.dir.resolved}/android" to=""/>
|
||||
<map from="${build.dir.resolved}/ios" to=""/>
|
||||
<map from="${testdata.dir.resolved}" to="${build.dir.resolved}/jME3-testdata.jar"/>
|
||||
<map from="${android.jar.resolved}" to=""/>
|
||||
|
||||
@ -261,6 +274,8 @@
|
||||
|
||||
<mkdir dir="${dist.dir}/opt/android"/>
|
||||
<copy file="${build.dir}/jME3-android.jar" todir="${dist.dir}/opt/android" overwrite="true"/>
|
||||
<mkdir dir="${dist.dir}/opt/ios"/>
|
||||
<copy file="${build.dir}/jME3-ios.jar" todir="${dist.dir}/opt/ios" overwrite="true"/>
|
||||
</target>
|
||||
|
||||
<!--
|
||||
|
@ -187,6 +187,7 @@ is divided into following sections:
|
||||
<available file="${src.lwjgl.dir}"/>
|
||||
<available file="${src.jogl.dir}"/>
|
||||
<available file="${src.android.dir}"/>
|
||||
<available file="${src.ios.dir}"/>
|
||||
</or>
|
||||
</condition>
|
||||
<condition property="netbeans.home+have.tests">
|
||||
@ -295,6 +296,7 @@ is divided into following sections:
|
||||
<fail unless="src.lwjgl.dir">Must set src.lwjgl.dir</fail>
|
||||
<fail unless="src.jogl.dir">Must set src.jogl.dir</fail>
|
||||
<fail unless="src.android.dir">Must set src.android.dir</fail>
|
||||
<fail unless="src.ios.dir">Must set src.ios.dir</fail>
|
||||
<fail unless="test.test.dir">Must set test.test.dir</fail>
|
||||
<fail unless="build.dir">Must set build.dir</fail>
|
||||
<fail unless="dist.dir">Must set dist.dir</fail>
|
||||
@ -316,7 +318,7 @@ is divided into following sections:
|
||||
</target>
|
||||
<target depends="-init-ap-cmdline-properties" if="ap.supported.internal" name="-init-macrodef-javac-with-processors">
|
||||
<macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${src.core.dir}:${src.core-data.dir}:${src.core-effects.dir}:${src.core-plugins.dir}:${src.desktop.dir}:${src.terrain.dir}:${src.jbullet.dir}:${src.bullet.dir}:${src.bullet-native.dir}:${src.bullet-common.dir}:${src.networking.dir}:${src.niftygui.dir}:${src.jogg.dir}:${src.ogre.dir}:${src.blender.dir}:${src.xml.dir}:${src.tools.dir}:${src.test.dir}:${src.lwjgl.dir}:${src.jogl.dir}:${src.android.dir}" name="srcdir"/>
|
||||
<attribute default="${src.core.dir}:${src.core-data.dir}:${src.core-effects.dir}:${src.core-plugins.dir}:${src.desktop.dir}:${src.terrain.dir}:${src.jbullet.dir}:${src.bullet.dir}:${src.bullet-native.dir}:${src.bullet-common.dir}:${src.networking.dir}:${src.niftygui.dir}:${src.jogg.dir}:${src.ogre.dir}:${src.blender.dir}:${src.xml.dir}:${src.tools.dir}:${src.test.dir}:${src.lwjgl.dir}:${src.jogl.dir}:${src.android.dir}:${src.ios.dir}" name="srcdir"/>
|
||||
<attribute default="${build.classes.dir}" name="destdir"/>
|
||||
<attribute default="${javac.classpath}" name="classpath"/>
|
||||
<attribute default="${javac.processorpath}" name="processorpath"/>
|
||||
@ -356,7 +358,7 @@ is divided into following sections:
|
||||
</target>
|
||||
<target depends="-init-ap-cmdline-properties" name="-init-macrodef-javac-without-processors" unless="ap.supported.internal">
|
||||
<macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${src.core.dir}:${src.core-data.dir}:${src.core-effects.dir}:${src.core-plugins.dir}:${src.desktop.dir}:${src.terrain.dir}:${src.jbullet.dir}:${src.bullet.dir}:${src.bullet-native.dir}:${src.bullet-common.dir}:${src.networking.dir}:${src.niftygui.dir}:${src.jogg.dir}:${src.ogre.dir}:${src.blender.dir}:${src.xml.dir}:${src.tools.dir}:${src.test.dir}:${src.lwjgl.dir}:${src.jogl.dir}:${src.android.dir}" name="srcdir"/>
|
||||
<attribute default="${src.core.dir}:${src.core-data.dir}:${src.core-effects.dir}:${src.core-plugins.dir}:${src.desktop.dir}:${src.terrain.dir}:${src.jbullet.dir}:${src.bullet.dir}:${src.bullet-native.dir}:${src.bullet-common.dir}:${src.networking.dir}:${src.niftygui.dir}:${src.jogg.dir}:${src.ogre.dir}:${src.blender.dir}:${src.xml.dir}:${src.tools.dir}:${src.test.dir}:${src.lwjgl.dir}:${src.jogl.dir}:${src.android.dir}:${src.ios.dir}" name="srcdir"/>
|
||||
<attribute default="${build.classes.dir}" name="destdir"/>
|
||||
<attribute default="${javac.classpath}" name="classpath"/>
|
||||
<attribute default="${javac.processorpath}" name="processorpath"/>
|
||||
@ -388,7 +390,7 @@ is divided into following sections:
|
||||
</target>
|
||||
<target depends="-init-macrodef-javac-with-processors,-init-macrodef-javac-without-processors" name="-init-macrodef-javac">
|
||||
<macrodef name="depend" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute default="${src.core.dir}:${src.core-data.dir}:${src.core-effects.dir}:${src.core-plugins.dir}:${src.desktop.dir}:${src.terrain.dir}:${src.jbullet.dir}:${src.bullet.dir}:${src.bullet-native.dir}:${src.bullet-common.dir}:${src.networking.dir}:${src.niftygui.dir}:${src.jogg.dir}:${src.ogre.dir}:${src.blender.dir}:${src.xml.dir}:${src.tools.dir}:${src.test.dir}:${src.lwjgl.dir}:${src.jogl.dir}:${src.android.dir}" name="srcdir"/>
|
||||
<attribute default="${src.core.dir}:${src.core-data.dir}:${src.core-effects.dir}:${src.core-plugins.dir}:${src.desktop.dir}:${src.terrain.dir}:${src.jbullet.dir}:${src.bullet.dir}:${src.bullet-native.dir}:${src.bullet-common.dir}:${src.networking.dir}:${src.niftygui.dir}:${src.jogg.dir}:${src.ogre.dir}:${src.blender.dir}:${src.xml.dir}:${src.tools.dir}:${src.test.dir}:${src.lwjgl.dir}:${src.jogl.dir}:${src.android.dir}:${src.ios.dir}" name="srcdir"/>
|
||||
<attribute default="${build.classes.dir}" name="destdir"/>
|
||||
<attribute default="${javac.classpath}" name="classpath"/>
|
||||
<sequential>
|
||||
@ -975,7 +977,7 @@ is divided into following sections:
|
||||
<include name="*"/>
|
||||
</dirset>
|
||||
</pathconvert>
|
||||
<j2seproject3:depend srcdir="${src.core.dir}:${src.core-data.dir}:${src.core-effects.dir}:${src.core-plugins.dir}:${src.desktop.dir}:${src.terrain.dir}:${src.jbullet.dir}:${src.bullet.dir}:${src.bullet-native.dir}:${src.bullet-common.dir}:${src.networking.dir}:${src.niftygui.dir}:${src.jogg.dir}:${src.ogre.dir}:${src.blender.dir}:${src.xml.dir}:${src.tools.dir}:${src.test.dir}:${src.lwjgl.dir}:${src.jogl.dir}:${src.android.dir}:${build.generated.subdirs}"/>
|
||||
<j2seproject3:depend srcdir="${src.core.dir}:${src.core-data.dir}:${src.core-effects.dir}:${src.core-plugins.dir}:${src.desktop.dir}:${src.terrain.dir}:${src.jbullet.dir}:${src.bullet.dir}:${src.bullet-native.dir}:${src.bullet-common.dir}:${src.networking.dir}:${src.niftygui.dir}:${src.jogg.dir}:${src.ogre.dir}:${src.blender.dir}:${src.xml.dir}:${src.tools.dir}:${src.test.dir}:${src.lwjgl.dir}:${src.jogl.dir}:${src.android.dir}:${src.ios.dir}:${build.generated.subdirs}"/>
|
||||
</target>
|
||||
<target depends="init,deps-jar,-pre-pre-compile,-pre-compile, -copy-persistence-xml,-compile-depend" if="have.sources" name="-do-compile">
|
||||
<j2seproject3:javac gensrcdir="${build.generated.sources.dir}"/>
|
||||
@ -1001,6 +1003,7 @@ is divided into following sections:
|
||||
<fileset dir="${src.lwjgl.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
|
||||
<fileset dir="${src.jogl.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
|
||||
<fileset dir="${src.android.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
|
||||
<fileset dir="${src.ios.dir}" excludes="${build.classes.excludes},${excludes}" includes="${includes}"/>
|
||||
</copy>
|
||||
</target>
|
||||
<target if="has.persistence.xml" name="-copy-persistence-xml">
|
||||
@ -1021,7 +1024,7 @@ is divided into following sections:
|
||||
<target depends="init,deps-jar,-pre-pre-compile" name="-do-compile-single">
|
||||
<fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
|
||||
<j2seproject3:force-recompile/>
|
||||
<j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.core.dir}:${src.core-data.dir}:${src.core-effects.dir}:${src.core-plugins.dir}:${src.desktop.dir}:${src.terrain.dir}:${src.jbullet.dir}:${src.bullet.dir}:${src.bullet-native.dir}:${src.bullet-common.dir}:${src.networking.dir}:${src.niftygui.dir}:${src.jogg.dir}:${src.ogre.dir}:${src.blender.dir}:${src.xml.dir}:${src.tools.dir}:${src.test.dir}:${src.lwjgl.dir}:${src.jogl.dir}:${src.android.dir}"/>
|
||||
<j2seproject3:javac excludes="" gensrcdir="${build.generated.sources.dir}" includes="${javac.includes}" sourcepath="${src.core.dir}:${src.core-data.dir}:${src.core-effects.dir}:${src.core-plugins.dir}:${src.desktop.dir}:${src.terrain.dir}:${src.jbullet.dir}:${src.bullet.dir}:${src.bullet-native.dir}:${src.bullet-common.dir}:${src.networking.dir}:${src.niftygui.dir}:${src.jogg.dir}:${src.ogre.dir}:${src.blender.dir}:${src.xml.dir}:${src.tools.dir}:${src.test.dir}:${src.lwjgl.dir}:${src.jogl.dir}:${src.android.dir}:${src.ios.dir}"/>
|
||||
</target>
|
||||
<target name="-post-compile-single">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
@ -1345,6 +1348,9 @@ is divided into following sections:
|
||||
<fileset dir="${src.android.dir}" excludes="*.java,${excludes}" includes="${includes}">
|
||||
<filename name="**/*.java"/>
|
||||
</fileset>
|
||||
<fileset dir="${src.ios.dir}" excludes="*.java,${excludes}" includes="${includes}">
|
||||
<filename name="**/*.java"/>
|
||||
</fileset>
|
||||
<fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
|
||||
<include name="**/*.java"/>
|
||||
<exclude name="*.java"/>
|
||||
@ -1415,6 +1421,9 @@ is divided into following sections:
|
||||
<fileset dir="${src.android.dir}" excludes="${excludes}" includes="${includes}">
|
||||
<filename name="**/doc-files/**"/>
|
||||
</fileset>
|
||||
<fileset dir="${src.ios.dir}" excludes="${excludes}" includes="${includes}">
|
||||
<filename name="**/doc-files/**"/>
|
||||
</fileset>
|
||||
<fileset dir="${build.generated.sources.dir}" erroronmissingdir="false">
|
||||
<include name="**/doc-files/**"/>
|
||||
</fileset>
|
||||
|
@ -5,7 +5,7 @@ bullet.library.name=bulletjme
|
||||
bullet.library.version=0.9
|
||||
|
||||
# location of Android NDK if available
|
||||
ndk.dir=/opt/android-ndk-r7
|
||||
ndk.dir=/Users/normenhansen/Documents/Code-Import/android-ndk-r7
|
||||
|
||||
# change if bullet version changes
|
||||
bullet.folder=../bullet-2.80-rev2531
|
||||
|
@ -3,8 +3,8 @@ build.xml.script.CRC32=34d4c2f2
|
||||
build.xml.stylesheet.CRC32=958a1d3e
|
||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||
nbproject/build-impl.xml.data.CRC32=4d497e1c
|
||||
nbproject/build-impl.xml.script.CRC32=6eeca707
|
||||
nbproject/build-impl.xml.data.CRC32=0b6d6e3f
|
||||
nbproject/build-impl.xml.script.CRC32=6a81ca7d
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=6ddba6b6@1.53.1.46
|
||||
nbproject/profiler-build-impl.xml.data.CRC32=aff514c1
|
||||
nbproject/profiler-build-impl.xml.script.CRC32=abda56ed
|
||||
|
@ -7,7 +7,7 @@ application.homepage=http://www.jmonkeyengine.com/
|
||||
application.title=jMonkeyEngine 3.0
|
||||
application.vendor=jMonkeyEngine
|
||||
build.classes.dir=${build.dir}/classes
|
||||
build.classes.excludes=**/*.java,**/*.form
|
||||
build.classes.excludes=**/*.java,**/*.form,**/*.m
|
||||
# This directory is removed when the project is cleaned:
|
||||
build.dir=build
|
||||
build.generated.dir=${build.dir}/generated
|
||||
@ -77,7 +77,7 @@ jnlp.mixed.code=default
|
||||
jnlp.offline-allowed=true
|
||||
jnlp.signed=true
|
||||
jnlp.signing=generated
|
||||
jnlp.signing.alias=jme3
|
||||
jnlp.signing.alias=engine
|
||||
jnlp.signing.keystore=
|
||||
main.class=jme3test.TestChooser
|
||||
manifest.file=MANIFEST.MF
|
||||
@ -100,7 +100,8 @@ run.classpath=\
|
||||
${build.dir}/niftygui:\
|
||||
${build.dir}/lwjgl:\
|
||||
${build.dir}/jogl:\
|
||||
${build.dir}/android
|
||||
${build.dir}/android:\
|
||||
${build.dir}/ios
|
||||
run.jvmargs=-Xms128m -Xmx128m -XX:MaxDirectMemorySize=256M
|
||||
run.test.classpath=\
|
||||
${javac.test.classpath}:\
|
||||
@ -116,6 +117,7 @@ src.core-effects.dir=src/core-effects
|
||||
src.core-plugins.dir=src/core-plugins
|
||||
src.core.dir=src/core
|
||||
src.desktop.dir=src/desktop
|
||||
src.ios.dir=src/ios
|
||||
src.jbullet.dir=src/jbullet
|
||||
src.jogg.dir=src/jogg
|
||||
src.jogl.dir=src/jogl
|
||||
|
@ -32,6 +32,7 @@
|
||||
<root id="src.lwjgl.dir" name="LWJGL Renderer"/>
|
||||
<root id="src.jogl.dir" name="JOGL Renderer"/>
|
||||
<root id="src.android.dir" name="Android Renderer"/>
|
||||
<root id="src.ios.dir" name="iOS Renderer"/>
|
||||
</source-roots>
|
||||
<test-roots>
|
||||
<root id="test.test.dir" name="Unit Test"/>
|
||||
|
@ -171,6 +171,8 @@ public class JmeSystem {
|
||||
systemDelegate = tryLoadDelegate("com.jme3.system.JmeDesktopSystem");
|
||||
if (systemDelegate == null) {
|
||||
systemDelegate = tryLoadDelegate("com.jme3.system.android.JmeAndroidSystem");
|
||||
if (systemDelegate == null) {
|
||||
systemDelegate = tryLoadDelegate("com.jme3.system.ios.JmeIosSystem");
|
||||
if (systemDelegate == null) {
|
||||
// None of the system delegates were found ..
|
||||
Logger.getLogger(JmeSystem.class.getName()).log(Level.SEVERE,
|
||||
@ -178,6 +180,7 @@ public class JmeSystem {
|
||||
+ "Ensure either desktop or android jME3 jar is in the classpath.");
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (InstantiationException ex) {
|
||||
Logger.getLogger(JmeSystem.class.getName()).log(Level.SEVERE, "Failed to create JmeSystem delegate:\n{0}", ex);
|
||||
} catch (IllegalAccessException ex) {
|
||||
|
129
engine/src/ios/com/jme3/system/ios/IosAssetManager.java
Normal file
129
engine/src/ios/com/jme3/system/ios/IosAssetManager.java
Normal file
@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package com.jme3.system.ios;
|
||||
|
||||
import com.jme3.asset.AssetLoader;
|
||||
import com.jme3.asset.DesktopAssetManager;
|
||||
import com.jme3.asset.TextureKey;
|
||||
import com.jme3.asset.plugins.ClasspathLocator;
|
||||
import com.jme3.texture.Texture;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author normenhansen
|
||||
*/
|
||||
public class IosAssetManager extends DesktopAssetManager {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(IosAssetManager.class.getName());
|
||||
|
||||
public IosAssetManager() {
|
||||
this(null);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public IosAssetManager(boolean loadDefaults) {
|
||||
//this(Thread.currentThread().getContextClassLoader().getResource("com/jme3/asset/Android.cfg"));
|
||||
this(null);
|
||||
}
|
||||
|
||||
private void registerLoaderSafe(String loaderClass, String ... extensions) {
|
||||
try {
|
||||
Class<? extends AssetLoader> loader = (Class<? extends AssetLoader>) Class.forName(loaderClass);
|
||||
registerLoader(loader, extensions);
|
||||
} catch (Exception e){
|
||||
logger.log(Level.WARNING, "Failed to load AssetLoader", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* AndroidAssetManager constructor
|
||||
* If URL == null then a default list of locators and loaders for android is set
|
||||
* @param configFile
|
||||
*/
|
||||
public IosAssetManager(URL configFile) {
|
||||
System.setProperty("org.xml.sax.driver", "org.xmlpull.v1.sax2.Driver");
|
||||
|
||||
// Set Default iOS config
|
||||
registerLocator("", ClasspathLocator.class);
|
||||
|
||||
registerLoader(IosImageLoader.class, "jpg", "bmp", "gif", "png", "jpeg");
|
||||
//registerLoader(AndroidImageLoader.class, "jpg", "bmp", "gif", "png", "jpeg");
|
||||
//registerLoader(AndroidAudioLoader.class, "ogg", "mp3", "wav");
|
||||
registerLoader(com.jme3.material.plugins.J3MLoader.class, "j3m");
|
||||
registerLoader(com.jme3.material.plugins.J3MLoader.class, "j3md");
|
||||
registerLoader(com.jme3.shader.plugins.GLSLLoader.class, "vert", "frag", "glsl", "glsllib");
|
||||
registerLoader(com.jme3.export.binary.BinaryImporter.class, "j3o");
|
||||
registerLoader(com.jme3.font.plugins.BitmapFontLoader.class, "fnt");
|
||||
|
||||
// Less common loaders (especially on Android)
|
||||
registerLoaderSafe("com.jme3.texture.plugins.DDSLoader", "dds");
|
||||
registerLoaderSafe("com.jme3.texture.plugins.PFMLoader", "pfm");
|
||||
registerLoaderSafe("com.jme3.texture.plugins.HDRLoader", "hdr");
|
||||
registerLoaderSafe("com.jme3.texture.plugins.TGALoader", "tga");
|
||||
registerLoaderSafe("com.jme3.scene.plugins.OBJLoader", "obj");
|
||||
registerLoaderSafe("com.jme3.scene.plugins.MTLLoader", "mtl");
|
||||
registerLoaderSafe("com.jme3.scene.plugins.ogre.MeshLoader", "mesh.xml");
|
||||
registerLoaderSafe("com.jme3.scene.plugins.ogre.SkeletonLoader", "skeleton.xml");
|
||||
registerLoaderSafe("com.jme3.scene.plugins.ogre.MaterialLoader", "material");
|
||||
registerLoaderSafe("com.jme3.scene.plugins.ogre.SceneLoader", "scene");
|
||||
|
||||
|
||||
logger.info("IosAssetManager created.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads a texture.
|
||||
*
|
||||
* @return the texture
|
||||
*/
|
||||
@Override
|
||||
public Texture loadTexture(TextureKey key) {
|
||||
Texture tex = (Texture) loadAsset(key);
|
||||
|
||||
// XXX: This will improve performance on some really
|
||||
// low end GPUs (e.g. ones with OpenGL ES 1 support only)
|
||||
// but otherwise won't help on the higher ones.
|
||||
// Strongly consider removing this.
|
||||
tex.setMagFilter(Texture.MagFilter.Nearest);
|
||||
tex.setAnisotropicFilter(0);
|
||||
if (tex.getMinFilter().usesMipMapLevels()) {
|
||||
tex.setMinFilter(Texture.MinFilter.NearestNearestMipMap);
|
||||
} else {
|
||||
tex.setMinFilter(Texture.MinFilter.NearestNoMipMaps);
|
||||
}
|
||||
return tex;
|
||||
}
|
||||
}
|
59
engine/src/ios/com/jme3/system/ios/IosHarness.java
Normal file
59
engine/src/ios/com/jme3/system/ios/IosHarness.java
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package com.jme3.system.ios;
|
||||
|
||||
import com.jme3.app.Application;
|
||||
import com.jme3.system.JmeSystem;
|
||||
|
||||
/**
|
||||
* @author normenhansen
|
||||
*/
|
||||
public class IosHarness {
|
||||
private final Application app;
|
||||
|
||||
public IosHarness(Application app) {
|
||||
this.app = app;
|
||||
JmeSystem.setSystemDelegate(new JmeIosSystem());
|
||||
app.start();
|
||||
}
|
||||
|
||||
public void appPaused(){
|
||||
}
|
||||
|
||||
public void appReactivated(){
|
||||
}
|
||||
|
||||
public void appClosed(){
|
||||
app.stop();
|
||||
}
|
||||
|
||||
}
|
68
engine/src/ios/com/jme3/system/ios/IosImageLoader.java
Normal file
68
engine/src/ios/com/jme3/system/ios/IosImageLoader.java
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package com.jme3.system.ios;
|
||||
|
||||
import com.jme3.asset.AssetInfo;
|
||||
import com.jme3.asset.AssetLoader;
|
||||
import com.jme3.texture.Image;
|
||||
import com.jme3.texture.Image.Format;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author normenhansen
|
||||
*/
|
||||
public class IosImageLoader implements AssetLoader {
|
||||
|
||||
public Object load(AssetInfo info) throws IOException {
|
||||
InputStream in = info.openStream();
|
||||
Image img = null;
|
||||
try {
|
||||
img = loadImageData(Image.Format.RGBA8, in);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
return img;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads images via iOS native API
|
||||
*
|
||||
* @param format has to be Image.Format.RGBA8
|
||||
* @param inputStream the InputStream to load the image data from
|
||||
* @return the loaded Image
|
||||
*/
|
||||
private static native Image loadImageData(Format format, InputStream inputStream);
|
||||
}
|
73
engine/src/ios/com/jme3/system/ios/IosLogHandler.java
Normal file
73
engine/src/ios/com/jme3/system/ios/IosLogHandler.java
Normal file
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package com.jme3.system.ios;
|
||||
|
||||
import com.jme3.util.JmeFormatter;
|
||||
import java.util.logging.Handler;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.LogRecord;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author normenhansen
|
||||
*/
|
||||
public class IosLogHandler extends Handler {
|
||||
|
||||
JmeFormatter formatter = new JmeFormatter();
|
||||
|
||||
public IosLogHandler() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void publish(LogRecord record) {
|
||||
if (record.getLevel().equals(Level.SEVERE)) {
|
||||
System.err.println(formatter.formatMessage(record));
|
||||
}
|
||||
else if (record.getLevel().equals(Level.WARNING)) {
|
||||
System.err.println(formatter.formatMessage(record));
|
||||
}
|
||||
else {
|
||||
System.err.println(formatter.formatMessage(record));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void flush() {
|
||||
// throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws SecurityException {
|
||||
// throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
}
|
113
engine/src/ios/com/jme3/system/ios/JmeIosSystem.java
Normal file
113
engine/src/ios/com/jme3/system/ios/JmeIosSystem.java
Normal file
@ -0,0 +1,113 @@
|
||||
/*
|
||||
* Copyright (c) 2009-2012 jMonkeyEngine
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package com.jme3.system.ios;
|
||||
|
||||
import com.jme3.asset.AssetManager;
|
||||
import com.jme3.audio.AudioRenderer;
|
||||
import com.jme3.system.AppSettings;
|
||||
import com.jme3.system.JmeContext;
|
||||
import com.jme3.system.JmeSystemDelegate;
|
||||
import com.jme3.system.NullContext;
|
||||
import com.jme3.texture.Image;
|
||||
import com.jme3.texture.image.ImageRaster;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.net.URL;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author normenhansen
|
||||
*/
|
||||
public class JmeIosSystem extends JmeSystemDelegate {
|
||||
|
||||
@Override
|
||||
public void writeImageFile(OutputStream outStream, String format, ByteBuffer imageData, int width, int height) throws IOException {
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public AssetManager newAssetManager(URL configFile) {
|
||||
return new IosAssetManager(configFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public AssetManager newAssetManager() {
|
||||
return new IosAssetManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void showErrorDialog(String message) {
|
||||
showDialog(message);
|
||||
System.err.println("JME APPLICATION ERROR:" + message);
|
||||
}
|
||||
|
||||
private native void showDialog(String message);
|
||||
|
||||
@Override
|
||||
public boolean showSettingsDialog(AppSettings sourceSettings, boolean loadFromRegistry) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JmeContext newContext(AppSettings settings, JmeContext.Type contextType) {
|
||||
initialize(settings);
|
||||
JmeContext ctx = null;
|
||||
if (settings.getRenderer() == null
|
||||
|| settings.getRenderer().equals("NULL")
|
||||
|| contextType == JmeContext.Type.Headless) {
|
||||
ctx = new NullContext();
|
||||
ctx.setSettings(settings);
|
||||
} else {
|
||||
ctx = new NullContext();
|
||||
ctx.setSettings(settings);
|
||||
}
|
||||
return ctx;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AudioRenderer newAudioRenderer(AppSettings settings) {
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(AppSettings settings) {
|
||||
Logger.getLogger("").addHandler(new IosLogHandler());
|
||||
// throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public ImageRaster createImageRaster(Image image, int slice) {
|
||||
throw new UnsupportedOperationException("Not supported yet.");
|
||||
}
|
||||
}
|
106
engine/src/ios/jme-ios.m
Normal file
106
engine/src/ios/jme-ios.m
Normal file
@ -0,0 +1,106 @@
|
||||
#include <jni.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
|
||||
#define JNIEXPORT __attribute__ ((visibility("default"))) \
|
||||
__attribute__ ((used))
|
||||
|
||||
BOOL checkJNIException(JNIEnv *e){
|
||||
if ((*e)->ExceptionCheck(e)) {
|
||||
(*e)->ExceptionDescribe(e);
|
||||
(*e)->ExceptionClear(e);
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
#ifndef _Included_com_jme3_system_ios_IosImageLoader
|
||||
#define _Included_com_jme3_system_ios_IosImageLoader
|
||||
#endif
|
||||
|
||||
JNIEXPORT jobject JNICALL
|
||||
Java_com_jme3_system_ios_IosImageLoader_loadImageData(JNIEnv* e, jclass obj, jobject imageFormat, jobject inputStream){
|
||||
// prepare java classes and method pointers
|
||||
jclass imageClass = (*e)->FindClass(e, "com.jme3.texture.Image");
|
||||
jclass inputStreamClass = (*e)->FindClass(e, "java.io.InputStream");
|
||||
jclass bufferUtilsClass = (*e)->FindClass(e, "com.jme3.util.BufferUtils");
|
||||
jmethodID imageConstructor = (*e)->GetMethodID(e, imageClass, "<init>", "(Lcom/jme3/texture/Image$Format;IILjava/nio/ByteBuffer;)V");
|
||||
jmethodID readMethod = (*e)->GetMethodID(e, inputStreamClass, "read", "([B)I");
|
||||
jmethodID newBufferMethod = (*e)->GetStaticMethodID(e, bufferUtilsClass, "createByteBuffer", "(I)Ljava/nio/ByteBuffer;");
|
||||
if (checkJNIException(e)) {
|
||||
return nil;
|
||||
}
|
||||
// read data from inputstream via byteArray to NSMutableData
|
||||
jbyteArray tempArray = (*e)->NewByteArray (e, 1000);
|
||||
NSMutableData *inData = [[NSMutableData alloc] init];
|
||||
jint size = (*e)->CallIntMethod(e, inputStream, readMethod, tempArray);
|
||||
if (checkJNIException(e)) {
|
||||
[inData release];
|
||||
return nil;
|
||||
}
|
||||
while (size != -1) {
|
||||
jbyte *data;
|
||||
data = (*e)->GetByteArrayElements(e, tempArray, false);
|
||||
[inData appendBytes:data length:size];
|
||||
(*e)->ReleaseByteArrayElements(e, tempArray, data, JNI_ABORT);
|
||||
size = (*e)->CallIntMethod(e, inputStream, readMethod, tempArray);
|
||||
if (checkJNIException(e)) {
|
||||
[inData release];
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
(*e)->DeleteLocalRef(e, tempArray);
|
||||
if (checkJNIException(e)) {
|
||||
[inData release];
|
||||
return nil;
|
||||
}
|
||||
// decode image data
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
UIImage* inputImage = [UIImage imageWithData:inData];
|
||||
if(inputImage == nil){
|
||||
[inData release];
|
||||
return nil;
|
||||
}
|
||||
CGImageRef inImage = [inputImage CGImage];
|
||||
int ht = CGImageGetWidth(inImage);
|
||||
int wdth = CGImageGetHeight(inImage);
|
||||
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
||||
// NewDirectByteBuffer seems to fail? -> Creating ByteBuffer in java
|
||||
jobject nativeBuffer = (*e)->CallStaticObjectMethod(e, bufferUtilsClass, newBufferMethod, ht*wdth*4);
|
||||
if (checkJNIException(e)) {
|
||||
CGColorSpaceRelease(colorSpace);
|
||||
[inData release];
|
||||
return nil;
|
||||
}
|
||||
void *rawData = (*e)->GetDirectBufferAddress(e, nativeBuffer);
|
||||
NSUInteger bytesPerRowImg = CGImageGetBytesPerRow(inImage);
|
||||
NSUInteger bitsPerComponentImg = CGImageGetBitsPerComponent(inImage);
|
||||
CGContextRef context = CGBitmapContextCreate(rawData,ht,wdth,bitsPerComponentImg,bytesPerRowImg,colorSpace,kCGImageAlphaPremultipliedLast| kCGBitmapByteOrder32Big);
|
||||
CGColorSpaceRelease(colorSpace);
|
||||
CGContextDrawImage(context,CGRectMake(0,0,wdth,ht), inImage);
|
||||
CGContextRelease(context);
|
||||
[inData release];
|
||||
[pool release];
|
||||
//create image
|
||||
jobject imageObject = (*e)->NewObject(e, imageClass, imageConstructor, imageFormat, wdth, ht, nativeBuffer);
|
||||
return imageObject;
|
||||
}
|
||||
|
||||
#ifndef _Included_com_jme3_system_ios_JmeIosSystem
|
||||
#define _Included_com_jme3_system_ios_JmeIosSystem
|
||||
#endif
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_jme3_system_ios_JmeIosSystem_showDialog(JNIEnv* e, jobject c, jstring text) {
|
||||
const char* chars = (*e)->GetStringUTFChars(e, text, 0);
|
||||
NSString* string = [[NSString alloc] initWithUTF8String : chars];
|
||||
(*e)->ReleaseStringUTFChars(e, text, chars);
|
||||
UIAlertView *alert = [[UIAlertView alloc] initWithTitle : @"Error"
|
||||
message : string
|
||||
delegate : nil
|
||||
cancelButtonTitle : @"OK"
|
||||
otherButtonTitles : nil];
|
||||
[alert show];
|
||||
[alert release];
|
||||
[string release];
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user