diff options
| author | Jason Sams <rjsams@android.com> | 2010-12-11 17:42:30 -0800 |
|---|---|---|
| committer | Jason Sams <rjsams@android.com> | 2010-12-11 17:42:30 -0800 |
| commit | 4859f5233c024c979e806a617ba059fa0cd9a154 (patch) | |
| tree | 877db7a40d22d6ec2aef3e6b35f7790f9bac227c | |
| parent | 4ef6650bd05a39a09958ea1db92f120ea4949cb1 (diff) | |
| download | frameworks_base-4859f5233c024c979e806a617ba059fa0cd9a154.zip frameworks_base-4859f5233c024c979e806a617ba059fa0cd9a154.tar.gz frameworks_base-4859f5233c024c979e806a617ba059fa0cd9a154.tar.bz2 | |
Add multitouch support to physics test.
Fix context state overwrite calling invoke.
Change-Id: I7a71237bcf36abb31f98eb6d872501fdfb007d81
| -rw-r--r-- | libs/rs/java/Balls/src/com/android/balls/BallsRS.java | 4 | ||||
| -rw-r--r-- | libs/rs/java/Balls/src/com/android/balls/BallsView.java | 1 | ||||
| -rw-r--r-- | libs/rs/java/Balls/src/com/android/balls/ball_physics.rs | 38 | ||||
| -rw-r--r-- | libs/rs/rsScriptC.cpp | 4 |
4 files changed, 21 insertions, 26 deletions
diff --git a/libs/rs/java/Balls/src/com/android/balls/BallsRS.java b/libs/rs/java/Balls/src/com/android/balls/BallsRS.java index 897b231..4338f33 100644 --- a/libs/rs/java/Balls/src/com/android/balls/BallsRS.java +++ b/libs/rs/java/Balls/src/com/android/balls/BallsRS.java @@ -129,9 +129,7 @@ public class BallsRS { } public void newTouchPosition(float x, float y, float pressure, int id) { - mPhysicsScript.set_touchX(x); - mPhysicsScript.set_touchY(y); - mPhysicsScript.set_touchPressure(pressure); + mPhysicsScript.invoke_touch(x, y, pressure, id); } public void setAccel(float x, float y) { diff --git a/libs/rs/java/Balls/src/com/android/balls/BallsView.java b/libs/rs/java/Balls/src/com/android/balls/BallsView.java index 12f017b..4442eec 100644 --- a/libs/rs/java/Balls/src/com/android/balls/BallsView.java +++ b/libs/rs/java/Balls/src/com/android/balls/BallsView.java @@ -82,6 +82,7 @@ public class BallsView extends RSSurfaceView { int pointerIndex = ev.getActionIndex(); int pointerId = ev.getPointerId(pointerIndex); mRender.newTouchPosition(0, 0, 0, pointerId); + return false; } int count = ev.getHistorySize(); int pcount = ev.getPointerCount(); diff --git a/libs/rs/java/Balls/src/com/android/balls/ball_physics.rs b/libs/rs/java/Balls/src/com/android/balls/ball_physics.rs index 7c86c67..ff38be5 100644 --- a/libs/rs/java/Balls/src/com/android/balls/ball_physics.rs +++ b/libs/rs/java/Balls/src/com/android/balls/ball_physics.rs @@ -8,18 +8,22 @@ float2 gGravityVector = {0.f, 9.8f}; float2 gMinPos = {0.f, 0.f}; float2 gMaxPos = {1280.f, 700.f}; -float touchX; -float touchY; -float touchPressure = 0.f; +static float2 touchPos[10]; +static float touchPressure[10]; -void setGamma(float g) { -} +void touch(float x, float y, float pressure, int id) { + if (id >= 10) { + return; + } + touchPos[id].x = x; + touchPos[id].y = y; + touchPressure[id] = pressure; +} void root(const Ball_t *ballIn, Ball_t *ballOut, const BallControl_t *ctl, uint32_t x) { float2 fv = {0, 0}; float2 pos = ballIn->position; - //rsDebug("physics pos in", pos); int arcID = -1; float arcInvStr = 100000; @@ -38,10 +42,6 @@ void root(const Ball_t *ballIn, Ball_t *ballOut, const BallControl_t *ctl, uint3 if (len2 > 16 /* (minDist*minDist)*/) { // Repulsion float len = sqrt(len2); - //if (len < arcInvStr) { - //arcInvStr = len; - //arcID = xin; - //} fv -= (vec / (len * len * len)) * 20000.f * forceScale; } else { if (len2 < 1) { @@ -78,12 +78,13 @@ void root(const Ball_t *ballIn, Ball_t *ballOut, const BallControl_t *ctl, uint3 fv -= gGravityVector * 4.f; fv *= ctl->dt; - if (touchPressure > 0.1f) { - float2 tp = {touchX, touchY}; - float2 vec = tp - ballIn->position; - float2 vec2 = vec * vec; - float len2 = max(2.f, vec2.x + vec2.y); - fv -= (vec / len2) * touchPressure * 400.f; + for (int i=0; i < 10; i++) { + if (touchPressure[i] > 0.1f) { + float2 vec = touchPos[i] - ballIn->position; + float2 vec2 = vec * vec; + float len2 = max(2.f, vec2.x + vec2.y); + fv -= (vec / len2) * touchPressure[i] * 300.f; + } } ballOut->delta = (ballIn->delta * (1.f - 0.004f)) + fv; @@ -138,11 +139,6 @@ void root(const Ball_t *ballIn, Ball_t *ballOut, const BallControl_t *ctl, uint3 } } - //ballOut->color.b = 1.f; - //ballOut->color.r = min(sqrt(length(ballOut->delta)) * 0.1f, 1.f); - //ballOut->color.g = min(sqrt(length(fv) * 0.1f), 1.f); - //ballOut->arcID = arcID; - //ballOut->arcStr = 8 / arcInvStr; ballOut->size = ballIn->size; //rsDebug("physics pos out", ballOut->position); diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp index d4edafd..b3dbf11 100644 --- a/libs/rs/rsScriptC.cpp +++ b/libs/rs/rsScriptC.cpp @@ -47,7 +47,6 @@ ScriptC::~ScriptC() { } void ScriptC::setupScript(Context *rsc) { - setupGLState(rsc); mEnviroment.mStartTimeMillis = nanoseconds_to_milliseconds(systemTime(SYSTEM_TIME_MONOTONIC)); @@ -123,6 +122,7 @@ uint32_t ScriptC::run(Context *rsc) { return 0; } + setupGLState(rsc); setupScript(rsc); uint32_t ret = 0; @@ -278,6 +278,7 @@ void ScriptC::runForEach(Context *rsc, rsAssert(ain->getType()->getDimZ() == 0); + setupGLState(rsc); setupScript(rsc); Script * oldTLS = setTLS(this); @@ -336,7 +337,6 @@ void ScriptC::runForEach(Context *rsc, } void ScriptC::Invoke(Context *rsc, uint32_t slot, const void *data, uint32_t len) { - //LOGE("rsi_ScriptInvoke %i", slot); if ((slot >= mEnviroment.mInvokeFunctionCount) || (mEnviroment.mInvokeFunctions[slot] == NULL)) { rsc->setError(RS_ERROR_BAD_SCRIPT, "Calling invoke on bad script"); |
