summaryrefslogtreecommitdiffstats
path: root/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2011-05-17 20:22:04 -0700
committerMathias Agopian <mathias@google.com>2011-05-27 16:36:58 -0700
commit35ccf46533c76cdc7c2f6c0ce8f33b34b29bc5e6 (patch)
tree8cafb0c046480991c44d281435cd328d90b9161e /tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java
parent9ff73de08f137ba03e18b8fd9fe0b070029c00f5 (diff)
downloadframeworks_base-35ccf46533c76cdc7c2f6c0ce8f33b34b29bc5e6.zip
frameworks_base-35ccf46533c76cdc7c2f6c0ce8f33b34b29bc5e6.tar.gz
frameworks_base-35ccf46533c76cdc7c2f6c0ce8f33b34b29bc5e6.tar.bz2
model rotation can now be controlled by the device's sensors
Diffstat (limited to 'tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java')
-rw-r--r--tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java57
1 files changed, 55 insertions, 2 deletions
diff --git a/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java b/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java
index 9ab0f22..4b7836b 100644
--- a/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java
+++ b/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelView.java
@@ -16,29 +16,46 @@
package com.android.modelviewer;
+import android.renderscript.Matrix4f;
import android.renderscript.RSSurfaceView;
import android.renderscript.RenderScriptGL;
import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.ScaleGestureDetector;
import android.util.Log;
-public class SimpleModelView extends RSSurfaceView {
+public class SimpleModelView extends RSSurfaceView implements SensorEventListener {
private RenderScriptGL mRS;
private SimpleModelRS mRender;
private ScaleGestureDetector mScaleDetector;
+ private SensorManager mSensorManager;
+ private Sensor mRotationVectorSensor;
+ private final float[] mRotationMatrix = new float[16];
+
private static final int INVALID_POINTER_ID = -1;
private int mActivePointerId = INVALID_POINTER_ID;
+ private boolean mUseSensor = false;
+ private Matrix4f mIdentityMatrix = new Matrix4f();
public SimpleModelView(Context context) {
super(context);
ensureRenderScript();
mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
+ // Get an instance of the SensorManager
+ mSensorManager = (SensorManager)getContext().getSystemService(Context.SENSOR_SERVICE);
+ // find the rotation-vector sensor
+ mRotationVectorSensor = mSensorManager.getDefaultSensor(
+ Sensor.TYPE_ROTATION_VECTOR);
+ mIdentityMatrix.loadIdentity();
}
private void ensureRenderScript() {
@@ -52,6 +69,16 @@ public class SimpleModelView extends RSSurfaceView {
}
@Override
+ public void resume() {
+ mSensorManager.registerListener(this, mRotationVectorSensor, 10000);
+ }
+
+ @Override
+ public void pause() {
+ mSensorManager.unregisterListener(this);
+ }
+
+ @Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
ensureRenderScript();
@@ -139,6 +166,32 @@ public class SimpleModelView extends RSSurfaceView {
return true;
}
}
-}
+ public void onSensorChanged(SensorEvent event) {
+ // we received a sensor event. it is a good practice to check
+ // that we received the proper event
+ if (mUseSensor) {
+ if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
+ // convert the rotation-vector to a 4x4 matrix. the matrix
+ // is interpreted by Open GL as the inverse of the
+ // rotation-vector, which is what we want.
+ SensorManager.getRotationMatrixFromVector(
+ mRotationMatrix , event.values);
+
+ if (mRender != null) {
+ mRender.onPostureChanged(new Matrix4f(mRotationMatrix));
+ }
+ }
+ }
+ }
+
+ public void onAccuracyChanged(Sensor sensor, int accuracy) {
+ }
+ public void toggleSensor() {
+ mUseSensor = !mUseSensor;
+ if (mUseSensor == false) {
+ mRender.onPostureChanged(mIdentityMatrix);
+ }
+ }
+}