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