diff options
| author | 2009-07-01 16:41:34 -0700 | |
|---|---|---|
| committer | 2009-07-01 16:41:34 -0700 | |
| commit | fdcc14e7a2a514f779e77b49a72a4f1b5ecfec00 (patch) | |
| tree | 062ea42ba2e3c34a70d257f33801453c244da3d6 | |
| parent | 7c878f3a8379daf21dca6de7aa722ff75328afbe (diff) | |
Update rollo and support functions. Includes mockup of some new ui concepts.
| -rw-r--r-- | libs/rs/java/Rollo/res/raw/rollo.c | 52 | ||||
| -rw-r--r-- | libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java | 26 | ||||
| -rw-r--r-- | libs/rs/java/Rollo/src/com/android/rollo/RolloView.java | 5 | ||||
| -rw-r--r-- | libs/rs/rsScriptC.cpp | 54 |
4 files changed, 124 insertions, 13 deletions
diff --git a/libs/rs/java/Rollo/res/raw/rollo.c b/libs/rs/java/Rollo/res/raw/rollo.c index 56ee425d32e8..e6acc9cef44e 100644 --- a/libs/rs/java/Rollo/res/raw/rollo.c +++ b/libs/rs/java/Rollo/res/raw/rollo.c @@ -5,10 +5,58 @@ int main(void* con, int ft, int launchID) { + int rowCount; int x; + int y; + int row; + int col; + int imageID; + int tx1; + int ty1; + int tz1; + int tx2; + int ty2; + int tz2; + int rot; + int rotStep; + int tmpSin; + int tmpCos; + int iconCount; + int pressure; - renderTriangleMesh(con, NAMED_MeshCard); - renderTriangleMesh(con, NAMED_MeshTab); + + iconCount = 38;//loadI32(0, 1); + rotStep = 20 * 0x10000; + pressure = loadI32(0, 2); + + rowCount = 4; + rot = (-20 + loadI32(0, 0)) * 0x10000; + + while (iconCount) { + tmpSin = sinx(rot); + tmpCos = cosx(rot); + + tx1 = tmpSin * 8 - tmpCos; + tx2 = tx1 + tmpCos * 2; + + tz1 = tmpCos * 8 + tmpSin + pressure; + tz2 = tz1 - tmpSin * 2; + + for (y = 0; (y < rowCount) && iconCount; y++) { + ty1 = (y * 0x30000) - 0x48000; + ty2 = ty1 + 0x20000; + + drawQuad(tx1, ty1, tz1, + tx2, ty1, tz2, + tx2, ty2, tz2, + tx1, ty2, tz1); + iconCount--; + } + rot = rot + rotStep; + } + + //renderTriangleMesh(con, NAMED_MeshCard); + //renderTriangleMesh(con, NAMED_MeshTab); return 1; } diff --git a/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java b/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java index da0b146ef0ba..0f7e26b0fa0e 100644 --- a/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java +++ b/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java @@ -48,6 +48,12 @@ public class RolloRS { initRS(); } + public void setPosition(float dx, float pressure) { + mAllocStateBuf[0] += (int)(dx); + mAllocStateBuf[2] = (int)(pressure * 0x40000); + mAllocState.data(mAllocStateBuf); + } + private Resources mRes; private RenderScript mRS; @@ -63,23 +69,13 @@ public class RolloRS { private RenderScript.ProgramVertex mPV; private ProgramVertexAlloc mPVAlloc; - private RenderScript.Allocation mAllocEnv; - private RenderScript.Allocation mAllocPos; + private int[] mAllocStateBuf; private RenderScript.Allocation mAllocState; - //private RenderScript.Allocation mAllocPV; - private RenderScript.TriangleMesh mMeshCard; - private RenderScript.TriangleMesh mMeshTab; private float[] mBufferPos; //private float[] mBufferPV; private void initNamed() { - mMeshTab = RolloMesh.createTab(mRS); - mMeshTab.setName("MeshTab"); - mMeshCard = RolloMesh.createCard(mRS); - mMeshCard.setName("MeshCard"); - Log.e("rs", "Done loading strips"); - mRS.samplerBegin(); mRS.samplerSet(RenderScript.SamplerParam.FILTER_MIN, RenderScript.SamplerValue.LINEAR_MIP_LINEAR); @@ -122,6 +118,8 @@ public class RolloRS { mPV.setName("PV"); mPV.bindAllocation(0, mPVAlloc.mAlloc); + + mPVAlloc.setupProjectionNormalized(320, 480); //mPVAlloc.setupOrthoNormalized(320, 480); mRS.contextBindProgramVertex(mPV); @@ -131,6 +129,7 @@ public class RolloRS { } + private void initRS() { mRS.scriptCBegin(); mRS.scriptCSetClearColor(0.0f, 0.7f, 0.0f, 1.0f); @@ -138,6 +137,11 @@ public class RolloRS { mRS.scriptCSetRoot(true); mScript = mRS.scriptCCreate(); + mAllocStateBuf = new int[] {0, 38, 0}; + mAllocState = mRS.allocationCreatePredefSized( + RenderScript.ElementPredefined.USER_I32, mAllocStateBuf.length); + mScript.bindAllocation(mAllocState, 0); + setPosition(0, 0); mRS.contextBindRootScript(mScript); } diff --git a/libs/rs/java/Rollo/src/com/android/rollo/RolloView.java b/libs/rs/java/Rollo/src/com/android/rollo/RolloView.java index 9a30aed48e87..27d2dd67d11e 100644 --- a/libs/rs/java/Rollo/src/com/android/rollo/RolloView.java +++ b/libs/rs/java/Rollo/src/com/android/rollo/RolloView.java @@ -74,6 +74,11 @@ public class RolloView extends RSSurfaceView { if (act == ev.ACTION_UP) { ret = false; } + float x = ev.getX(); + x = (x - 180) / 40; + //Log.e("rs", Float(x).toString()); + + mRender.setPosition(x, ev.getPressure()); //mRender.newTouchPosition((int)ev.getX(), (int)ev.getY()); return ret; } diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp index 522ed00b79a1..9c99e2b4f8c2 100644 --- a/libs/rs/rsScriptC.cpp +++ b/libs/rs/rsScriptC.cpp @@ -307,6 +307,60 @@ extern "C" void drawRect(int32_t x1, int32_t x2, int32_t y1, int32_t y2) glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); } +extern "C" void drawQuad(int32_t x1, int32_t y1, int32_t z1, + int32_t x2, int32_t y2, int32_t z2, + int32_t x3, int32_t y3, int32_t z3, + int32_t x4, int32_t y4, int32_t z4) +{ + GET_TLS(); + //x1 = (x1 << 16); + //x2 = (x2 << 16); + //y1 = (y1 << 16); + //y2 = (y2 << 16); + + //LOGE("Quad"); + //LOGE("0x%08x, 0x%08x, 0x%08x", x1, y1, z1); + //LOGE("0x%08x, 0x%08x, 0x%08x", x2, y2, z2); + //LOGE("0x%08x, 0x%08x, 0x%08x", x3, y3, z3); + //LOGE("0x%08x, 0x%08x, 0x%08x", x4, y4, z4); + + int32_t vtx[] = {x1,y1,z1, x4,y4,z4, x3,y3,z3, x2,y2,z2}; + static const int32_t tex[] = {0,0, 0,0x10000, 0x10000,0, 0x10000,0x10000}; + + + rsc->setupCheck(); + + glBindBuffer(GL_ARRAY_BUFFER, 0); + //glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, tm->mBufferObjects[1]); + + glEnableClientState(GL_VERTEX_ARRAY); + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + + glVertexPointer(3, GL_FIXED, 0, vtx); + glTexCoordPointer(2, GL_FIXED, 0, tex); + //glColorPointer(4, GL_UNSIGNED_BYTE, 12, ptr); + + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); +} + +extern "C" int32_t sinx(int32_t angle) +{ + float a = ((float)angle) / 0x10000; + a *= 3.14f / 180.f; + float s = (float)sin(a); + return int32_t(s * 0x10000); +} + +extern "C" int32_t cosx(int32_t angle) +{ + float a = ((float)angle) / 0x10000; + a *= 3.14f / 180.f; + float s = (float)cos(a); + return int32_t(s * 0x10000); +} + extern "C" void pfBindTexture(RsProgramFragment vpf, uint32_t slot, RsAllocation va) { GET_TLS(); |