git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9914 75d07b2b-3a1a-0410-a2c5-0572b91ccdca3.0
parent
8b9b09e4cd
commit
b3dc16535f
@ -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; |
||||||
|
} |
||||||
|
} |
@ -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(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -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); |
||||||
|
} |
@ -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.");
|
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -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."); |
||||||
|
} |
||||||
|
} |
@ -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…
Reference in new issue