diff options
Diffstat (limited to 'tests')
7 files changed, 72 insertions, 3 deletions
diff --git a/tests/RenderScriptTests/ModelViewer/AndroidManifest.xml b/tests/RenderScriptTests/ModelViewer/AndroidManifest.xml index e5e449b..57ec4fe 100644 --- a/tests/RenderScriptTests/ModelViewer/AndroidManifest.xml +++ b/tests/RenderScriptTests/ModelViewer/AndroidManifest.xml @@ -3,7 +3,8 @@ package="com.android.modelviewer"> <application android:label="ModelViewer"> <activity android:name="SimpleModel" - android:label="SimpleModel"> + android:label="SimpleModel" + android:screenOrientation="nosensor"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> diff --git a/tests/RenderScriptTests/ModelViewer/res/menu/loader_menu.xml b/tests/RenderScriptTests/ModelViewer/res/menu/loader_menu.xml index 3c34023..2a8759c 100644 --- a/tests/RenderScriptTests/ModelViewer/res/menu/loader_menu.xml +++ b/tests/RenderScriptTests/ModelViewer/res/menu/loader_menu.xml @@ -22,4 +22,6 @@ android:title="@string/load_model" /> <item android:id="@+id/display_options" android:title="@string/display_options" /> + <item android:id="@+id/sensor" + android:title="@string/sensor" /> </menu> diff --git a/tests/RenderScriptTests/ModelViewer/res/values/strings.xml b/tests/RenderScriptTests/ModelViewer/res/values/strings.xml index 8e1673f..a5c8f22 100644 --- a/tests/RenderScriptTests/ModelViewer/res/values/strings.xml +++ b/tests/RenderScriptTests/ModelViewer/res/values/strings.xml @@ -21,4 +21,5 @@ <skip /> <string name="load_model">Load Model</string> <string name="display_options">Display Options</string> + <string name="sensor">Toggle Sensor</string> </resources> diff --git a/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModel.java b/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModel.java index 00e8a5e..2b29ff4 100644 --- a/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModel.java +++ b/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModel.java @@ -85,6 +85,9 @@ public class SimpleModel extends Activity { return true; case R.id.display_options: return true; + case R.id.sensor: + mView.toggleSensor(); + return true; default: return super.onOptionsItemSelected(item); } diff --git a/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelRS.java b/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelRS.java index 63ef466..5fa3a9e 100644 --- a/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelRS.java +++ b/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/SimpleModelRS.java @@ -70,6 +70,10 @@ public class SimpleModelRS { mScript.invoke_onActionMove(x, y); } + public void onPostureChanged(Matrix4f posture) { + mScript.set_gPostureMatrix(posture); + } + private void initPFS() { ProgramStore.Builder b = new ProgramStore.Builder(mRS); 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); + } + } +} diff --git a/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/simplemodel.rs b/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/simplemodel.rs index 809f02c..8cec409 100644 --- a/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/simplemodel.rs +++ b/tests/RenderScriptTests/ModelViewer/src/com/android/modelviewer/simplemodel.rs @@ -28,6 +28,8 @@ rs_program_store gPFSBackground; rs_font gItalic; rs_allocation gTextAlloc; +rs_matrix4x4 gPostureMatrix; + typedef struct MeshInfo { rs_mesh mMesh; int mNumIndexSets; @@ -89,6 +91,7 @@ void init() { gRotateY = 0.0f; gZoom = 50.0f; gLookAt = 0.0f; + rsMatrixLoadIdentity(&gPostureMatrix); } void updateMeshInfo() { @@ -149,8 +152,10 @@ int root(void) { rsMatrixLoadIdentity(&matrix); // Position our models on the screen rsMatrixTranslate(&matrix, gLookAt.x, gLookAt.y, gLookAt.z - gZoom); + rsMatrixMultiply(&matrix, &gPostureMatrix); rsMatrixRotate(&matrix, gRotateX, 1.0f, 0.0f, 0.0f); rsMatrixRotate(&matrix, gRotateY, 0.0f, 1.0f, 0.0f); + rsgProgramVertexLoadModelMatrix(&matrix); renderAllMeshes(); |