[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49790] branches/soc-2012-swiss_cheese/ source/android/app/jni: Adds support for sensor in Android app.

Alexander Kuznetsov kuzsasha at gmail.com
Sat Aug 11 02:22:03 CEST 2012


Revision: 49790
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49790
Author:   alexk
Date:     2012-08-11 00:22:03 +0000 (Sat, 11 Aug 2012)
Log Message:
-----------
Adds support for sensor in Android app.
Little rearrangements to make code more clear.

Modified Paths:
--------------
    branches/soc-2012-swiss_cheese/source/android/app/jni/aEvent.c
    branches/soc-2012-swiss_cheese/source/android/app/jni/aEvent.h
    branches/soc-2012-swiss_cheese/source/android/app/jni/main.c

Modified: branches/soc-2012-swiss_cheese/source/android/app/jni/aEvent.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/android/app/jni/aEvent.c	2012-08-11 00:11:01 UTC (rev 49789)
+++ branches/soc-2012-swiss_cheese/source/android/app/jni/aEvent.c	2012-08-11 00:22:03 UTC (rev 49790)
@@ -15,11 +15,12 @@
 {
 	switch(type)
 	{
-		case ET_MOUSE:	return sizeof(aEventMouse);
-		case ET_KEY:	return sizeof(aEventKey);
-		case ET_WINDOW:	return sizeof(aEventWindow);
+		case ET_MOUSE:		return sizeof(aEventMouse);
+		case ET_KEY:		return sizeof(aEventKey);
+		case ET_SENSOR:		return sizeof(aEventSensor);
+		case ET_WINDOW:		return sizeof(aEventWindow);
 		case ET_WINDOWSIZE:	return sizeof(aEventWindowSize);
-		case ET_APP:	return sizeof(aEventApp);
+		case ET_APP:		return sizeof(aEventApp);
 		default: assert(0);
 
 	}

Modified: branches/soc-2012-swiss_cheese/source/android/app/jni/aEvent.h
===================================================================
--- branches/soc-2012-swiss_cheese/source/android/app/jni/aEvent.h	2012-08-11 00:11:01 UTC (rev 49789)
+++ branches/soc-2012-swiss_cheese/source/android/app/jni/aEvent.h	2012-08-11 00:22:03 UTC (rev 49790)
@@ -11,6 +11,7 @@
 	ET_UNKNOWN = 0,
 	ET_MOUSE,
 	ET_KEY,
+	ET_SENSOR,
 	ET_WINDOW,
 	ET_WINDOWSIZE,
 	ET_APP
@@ -76,11 +77,19 @@
 	int action;
 } aEventApp;
 
+typedef struct aEventSensor
+{
+	aEventBase eb;
+	int type;
+	float sv[3];
+} aEventSensor;
+
 typedef union eEventAllTypes
 {
 	aEventBase eb;
 	aEventMouse Mouse;
 	aEventKey Key;
+	aEventSensor Sensor;
 	aEventWindow Window;
 	aEventWindowSize WindowSize;
 	aEventApp app;
@@ -115,7 +124,12 @@
 void aEventQueuexFree(aEventQueue * q);
 
 void aSwapBuffers(void);
+int aGetSensorsAvailability(int type);
+int aSetSensorsState(int type, int enable);
 
+int aGetWindowSize(int *size);
+
+
 #ifdef __cplusplus
 }
 #endif

Modified: branches/soc-2012-swiss_cheese/source/android/app/jni/main.c
===================================================================
--- branches/soc-2012-swiss_cheese/source/android/app/jni/main.c	2012-08-11 00:11:01 UTC (rev 49789)
+++ branches/soc-2012-swiss_cheese/source/android/app/jni/main.c	2012-08-11 00:22:03 UTC (rev 49790)
@@ -375,9 +375,19 @@
 	JavaVM *jvm;
 
 	jclass jcGhostSurface;
-	jmethodID midSwapBuffers;
-jmethodID midinitSurface;
 
+	jmethodID mid_SwapBuffers;
+	jmethodID mid_initSurface;
+	jmethodID mid_getWindowSize;
+
+
+
+	jclass jcGhostActivity;
+
+	jmethodID mid_getSensorsAvailability;
+	jmethodID mid_setSensorsState;
+
+	jobject jsys;
 	jobject mainwin; /* should be stored */
 } jb;
 
@@ -516,7 +526,36 @@
 
 }
 
+JNIEXPORT void JNICALL Java_org_blender_play_BlenderNativeAPI_eventSensor3D(JNIEnv * env, jclass class, jint jtype, jfloat jx, jfloat jy, jfloat jz)
+{
+	aEventSensor sensor;
 
+	sensor.eb.aeventype = ET_SENSOR;
+
+	sensor.type = jtype;
+
+	sensor.sv[0] = jx;
+	sensor.sv[1] = jy;
+	sensor.sv[2] = jz;
+
+
+	aEventQueueAdd(&mq, (char*)&sensor, sizeof(sensor));
+}
+
+JNIEXPORT void JNICALL Java_org_blender_play_BlenderNativeAPI_eventSensor1D(JNIEnv * env, jclass class, jint jtype, jfloat jx)
+{
+	aEventSensor sensor;
+
+	sensor.eb.aeventype = ET_SENSOR;
+
+	sensor.type = jtype;
+
+	sensor.sv[0] = jx;
+
+	aEventQueueAdd(&mq, (char*)&sensor, sizeof(sensor));
+}
+
+
 JNIEXPORT void JNICALL Java_org_blender_play_BlenderNativeAPI_actionClose(JNIEnv * env, jclass class)
 {
 	aEventApp app;
@@ -532,6 +571,20 @@
 
 }
 
+JNIEXPORT void JNICALL Java_org_blender_play_BlenderNativeAPI_SetASystem
+  (JNIEnv * env, jclass class, jobject jsys)
+{
+
+jb.jsys = (*env)->NewGlobalRef(env, jsys);
+jb.jcGhostActivity = (*env)->NewGlobalRef(env, (*env)->GetObjectClass(env, jb.jsys));
+jb.mid_getSensorsAvailability = (*env)->GetMethodID(env, jb.jcGhostActivity, "export_getSensorsAvailability", "(I)I");
+jb.mid_setSensorsState =		(*env)->GetMethodID(env, jb.jcGhostActivity, "export_setSensorsState", "(II)I");
+
+LOGW("Accelerometer Set %i", aSetSensorsState(1,1));
+}
+
+
+
 JNIEXPORT void JNICALL Java_org_blender_play_BlenderNativeAPI_SetScreen
   (JNIEnv * env, jclass class, jobject win)
   {
@@ -542,9 +595,20 @@
 // LOGW("Hiopea2 ");
   jb.jcGhostSurface = (*env)->NewGlobalRef(env, (*env)->GetObjectClass(env, jb.mainwin));
  // LOGW("Hiopea3 ");
-  jb.midSwapBuffers = (*env)->GetMethodID(env, jb.jcGhostSurface, "SwapBuffers", "()V");//(*env)->NewGlobalRef(env, (*env)->GetMethodID(env, jb.jcGhostSurface, "SwapBuffers", "()V"));
+  jb.mid_SwapBuffers = (*env)->GetMethodID(env, jb.jcGhostSurface, "SwapBuffers", "()V");//(*env)->NewGlobalRef(env, (*env)->GetMethodID(env, jb.jcGhostSurface, "SwapBuffers", "()V"));
   //LOGW("Hiopea4 ");
-  LOGW("cl %i %i", (int)jb.midSwapBuffers, (int)jb.jcGhostSurface);
+
+  jb.mid_getWindowSize = (*env)->GetMethodID(env, jb.jcGhostSurface, "export_getWindowSize", "()I");
+
+  LOGW("cl %i %i", (int)jb.mid_SwapBuffers, (int)jb.jcGhostSurface);
+
+  {
+	  int size[2] = {0};
+	  aGetWindowSize(size);
+
+	  LOGW("Size %i x %i", size[0], size[1]);
+  }
+
   //glClearColor(0.5f, 0.0f, 0.5f, 1.0f);
   //glClear(GL_COLOR_BUFFER_BIT);
   }
@@ -566,12 +630,36 @@
 }
   
 
+int aGetWindowSize(int *size)
+{
+	JNIEnv* env = jGetEnv();
+	int r = (*env)->CallIntMethod(env, jb.mainwin, jb.mid_getWindowSize);
+	if(r==0)
+		return 0;
+
+	size[0] = (r>>16) & 0xFFFF;
+	size[1] =r & 0xFFFF;
+
+	return 1;
+}
+
+int aGetSensorsAvailability(int type)
+{
+	JNIEnv* env = jGetEnv();
+	return (*env)->CallIntMethod(env, jb.jsys, jb.mid_getSensorsAvailability, type);
+}
+
+
+int aSetSensorsState(int type, int enable)
+{
+	JNIEnv* env = jGetEnv();
+	return (*env)->CallIntMethod(env, jb.jsys, jb.mid_setSensorsState, type, enable);
+}
+
 void aSwapBuffers(void)
 {
 	JNIEnv* env = jGetEnv();
-LOGW("Start Swap ");
-	(*env)->CallVoidMethod(env, jb.mainwin, jb.midSwapBuffers);
-	LOGW("Swapped");
+	(*env)->CallVoidMethod(env, jb.mainwin, jb.mid_SwapBuffers);
 }
   
 JNIEXPORT void JNICALL Java_org_blender_play_BlenderNativeAPI_Swap(JNIEnv * env, jclass class)
@@ -584,7 +672,7 @@
 {
 	char * copyfilepath = parp;
 	JNIEnv* env = NULL;
-	(*jb.jvm)->AttachCurrentThread(jb.jvm, (void**) &env, NULL);
+	(*jb.jvm)->AttachCurrentThread(jb.jvm, (const struct JNINativeInterface ***) &env, NULL);
 	LOGW("One moment");
 	{
 
@@ -592,16 +680,16 @@
 
 LOGW("env %p",*env);
 
-jb.midinitSurface = (*env)->GetMethodID(env, jb.jcGhostSurface, "initSurface", "()V");//(*env)->NewGlobalRef(env, (*env)->GetMethodID(env, jb.jcGhostSurface, "initSurface", "()V"));
+jb.mid_initSurface = (*env)->GetMethodID(env, jb.jcGhostSurface, "initSurface", "()V");//(*env)->NewGlobalRef(env, (*env)->GetMethodID(env, jb.jcGhostSurface, "initSurface", "()V"));
 
-LOGW("midinitSurface2 %p",jb.midinitSurface);
+LOGW("midinitSurface2 %p",jb.mid_initSurface);
 
-(*env)->CallVoidMethod(env, jb.mainwin, jb.midinitSurface);
+(*env)->CallVoidMethod(env, jb.mainwin, jb.mid_initSurface);
 	}
+///mnt/sdcard/com.googlecode.python3forandroid/extras/python3:
+	setenv("PYTHONPATH","/data/data/org.blender.play/python/scripts:/data/data/org.blender.play/python/lib/python3.2/lib-dynload",1);
+	setenv("PYTHONHOME","/data/data/org.blender.play/python",1);
 
-	setenv("PYTHONPATH","/mnt/sdcard/com.googlecode.python3forandroid/extras/python3:/data/data/com.googlecode.python3forandroid/files/python3/lib/python3.2/lib-dynload",1);
-	setenv("PYTHONHOME","/data/data/com.googlecode.python3forandroid/files/python3",1);
-
 	loadownlib("jpeg", 8);
 	loadownlib("freetype", 6);
 	loadownlib("z", 1);




More information about the Bf-blender-cvs mailing list