- move native jme-ios.m file to plugin for now
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9924 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
2aae8d72a6
commit
7bb5e9bfdd
@ -1,107 +0,0 @@
|
||||
#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];
|
||||
[pool release];
|
||||
return nil;
|
||||
}
|
||||
CGImageRef inImage = [inputImage CGImage];
|
||||
int ht = CGImageGetWidth(inImage);
|
||||
int wdth = CGImageGetHeight(inImage);
|
||||
// NewDirectByteBuffer seems to fail? -> Creating ByteBuffer in java
|
||||
jobject nativeBuffer = (*e)->CallStaticObjectMethod(e, bufferUtilsClass, newBufferMethod, ht*wdth*4);
|
||||
if (checkJNIException(e)) {
|
||||
[inData release];
|
||||
[pool release];
|
||||
return nil;
|
||||
}
|
||||
void *rawData = (*e)->GetDirectBufferAddress(e, nativeBuffer);
|
||||
NSUInteger bytesPerRowImg = CGImageGetBytesPerRow(inImage);
|
||||
NSUInteger bitsPerComponentImg = CGImageGetBitsPerComponent(inImage);
|
||||
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
||||
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