Loading libs/rs/java/Rollo/res/raw/rollo.c +50 −2 Original line number Diff line number Diff line Loading @@ -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; } libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java +15 −11 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading Loading @@ -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); Loading @@ -131,6 +129,7 @@ public class RolloRS { } private void initRS() { mRS.scriptCBegin(); mRS.scriptCSetClearColor(0.0f, 0.7f, 0.0f, 1.0f); Loading @@ -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); } Loading libs/rs/java/Rollo/src/com/android/rollo/RolloView.java +5 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading libs/rs/rsScriptC.cpp +54 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading
libs/rs/java/Rollo/res/raw/rollo.c +50 −2 Original line number Diff line number Diff line Loading @@ -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; }
libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java +15 −11 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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); Loading Loading @@ -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); Loading @@ -131,6 +129,7 @@ public class RolloRS { } private void initRS() { mRS.scriptCBegin(); mRS.scriptCSetClearColor(0.0f, 0.7f, 0.0f, 1.0f); Loading @@ -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); } Loading
libs/rs/java/Rollo/src/com/android/rollo/RolloView.java +5 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading
libs/rs/rsScriptC.cpp +54 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading