diff --git a/libs/rs/java/Fountain/AndroidManifest.xml b/libs/rs/java/Fountain/AndroidManifest.xml index a10938bae863d..dd0e42876f53a 100644 --- a/libs/rs/java/Fountain/AndroidManifest.xml +++ b/libs/rs/java/Fountain/AndroidManifest.xml @@ -3,7 +3,7 @@ package="com.android.fountain"> + android:theme="@android:style/Theme.Translucent"> diff --git a/libs/rs/java/Fountain/res/raw/fountain.c b/libs/rs/java/Fountain/res/raw/fountain.c index 69195654732a5..99551fcdf915f 100644 --- a/libs/rs/java/Fountain/res/raw/fountain.c +++ b/libs/rs/java/Fountain/res/raw/fountain.c @@ -2,8 +2,8 @@ #pragma version(1) #pragma stateVertex(default) -#pragma stateFragment(PgmFragBackground) -#pragma stateFragmentStore(PFSReplace) +#pragma stateFragment(PgmFragParts) +#pragma stateFragmentStore(PFSBlend) int main(int launchID) { @@ -34,15 +34,11 @@ int main(int launchID) { } } - drawRect(0, 256, 0, 512); - contextBindProgramFragment(NAMED_PgmFragParts); - contextBindProgramFragmentStore(NAMED_PFSBlend); - if (touch) { newPart = loadI32(2, 0); for (ct2=0; ct2> lifeShift) << 24); - storeU32(1, dstIdx, c); + storeI32(1, dstIdx, c); storeI32(1, dstIdx + 1, posx); storeI32(1, dstIdx + 2, posy); - storeU32(1, dstIdx + 3, c); + storeI32(1, dstIdx + 3, c); storeI32(1, dstIdx + 4, posx + 0x10000); storeI32(1, dstIdx + 5, posy + dy * 4); - storeU32(1, dstIdx + 6, c); + storeI32(1, dstIdx + 6, c); storeI32(1, dstIdx + 7, posx - 0x10000); storeI32(1, dstIdx + 8, posy + dy * 4); drawCount ++; diff --git a/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java b/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java index 745635fb1269a..c8e9a1ed9a7f7 100644 --- a/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java +++ b/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java @@ -56,11 +56,7 @@ public class FountainRS { private RenderScript.Allocation mVertAlloc; private RenderScript.Script mScript; private RenderScript.ProgramFragmentStore mPFS; - private RenderScript.ProgramFragmentStore mPFS2; private RenderScript.ProgramFragment mPF; - private RenderScript.ProgramFragment mPF2; - private RenderScript.Allocation mTexture; - private RenderScript.Sampler mSampler; private Bitmap mBackground; @@ -74,16 +70,6 @@ public class FountainRS { mPartAlloc.setName("PartBuffer"); mVertAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, partCount * 5 + 1); - { - Drawable d = mRes.getDrawable(R.drawable.gadgets_clock_mp3); - BitmapDrawable bd = (BitmapDrawable)d; - Bitmap b = bd.getBitmap(); - mTexture = mRS.allocationCreateFromBitmap(b, - RenderScript.ElementPredefined.RGB_565, - false); - mTexture.uploadToTexture(0); - } - mRS.programFragmentStoreBegin(null, null); mRS.programFragmentStoreBlendFunc(RenderScript.BlendSrcFunc.SRC_ALPHA, RenderScript.BlendDstFunc.ONE); mRS.programFragmentStoreDepthFunc(RenderScript.DepthFunc.ALWAYS); @@ -92,33 +78,10 @@ public class FountainRS { mPFS = mRS.programFragmentStoreCreate(); mPFS.setName("PFSBlend"); - mRS.programFragmentStoreBegin(null, null); - mRS.programFragmentStoreDepthFunc(RenderScript.DepthFunc.ALWAYS); - mRS.programFragmentStoreDepthMask(false); - mRS.programFragmentStoreDitherEnable(false); - mPFS2 = mRS.programFragmentStoreCreate(); - mPFS2.setName("PFSReplace"); - mRS.contextBindProgramFragmentStore(mPFS2); - - mRS.samplerBegin(); - mRS.samplerSet(RenderScript.SamplerParam.FILTER_MAG, RenderScript.SamplerValue.NEAREST); - mRS.samplerSet(RenderScript.SamplerParam.FILTER_MIN, RenderScript.SamplerValue.NEAREST); - mSampler = mRS.samplerCreate(); - - mRS.programFragmentBegin(null, null); mPF = mRS.programFragmentCreate(); mPF.setName("PgmFragParts"); - mRS.programFragmentBegin(null, null); - mRS.programFragmentSetTexEnable(0, true); - mPF2 = mRS.programFragmentCreate(); - mRS.contextBindProgramFragment(mPF2); - mPF2.bindTexture(mTexture, 0); - mPF2.bindSampler(mSampler, 0); - mPF2.setName("PgmFragBackground"); - - mParams[0] = 0; mParams[1] = partCount; mParams[2] = 0; diff --git a/libs/rs/java/RenderScript/android/renderscript/RenderScript.java b/libs/rs/java/RenderScript/android/renderscript/RenderScript.java index 09d18369f39c6..733009e9a5550 100644 --- a/libs/rs/java/RenderScript/android/renderscript/RenderScript.java +++ b/libs/rs/java/RenderScript/android/renderscript/RenderScript.java @@ -846,6 +846,10 @@ public class RenderScript { nProgramFragmentSetTexEnable(slot, enable); } + public void programFragmentSetTexEnvMode(int slot, EnvMode env) { + nProgramFragmentSetEnvMode(slot, env.mID); + } + public ProgramFragment programFragmentCreate() { int id = nProgramFragmentCreate(); return new ProgramFragment(id); diff --git a/libs/rs/java/Rollo/res/raw/rollo.c b/libs/rs/java/Rollo/res/raw/rollo.c index 0f68372ee79f3..70b48fa5d0b58 100644 --- a/libs/rs/java/Rollo/res/raw/rollo.c +++ b/libs/rs/java/Rollo/res/raw/rollo.c @@ -8,11 +8,11 @@ #define SCRATCH_ZOOM 1 #define SCRATCH_ROT 2 -#define STATE_POS_X 0 -#define STATE_POS_Y 1 -#define STATE_PRESSURE 2 +//#define STATE_POS_X 0 +#define STATE_DONE 1 +//#define STATE_PRESSURE 2 #define STATE_ZOOM 3 -#define STATE_WARP 4 +//#define STATE_WARP 4 #define STATE_ORIENTATION 5 #define STATE_SELECTION 6 #define STATE_FIRST_VISIBLE 7 @@ -31,13 +31,22 @@ int main(void* con, int ft, int launchID) int row; int col; int imageID; - int iconCount; + int done = loadI32(0, STATE_DONE); + int selectedID = loadI32(0, STATE_SELECTION); float f = loadF(2, 0); + pfClearColor(0.0f, 0.0f, 0.0f, f); - if (f < 0.8f) { - f = f + 0.02f; - storeF(2, 0, f); + if (done) { + if (f > 0.02f) { + //f = f - 0.02f; + //storeF(2, 0, f); + } + } else { + if (f < 0.8f) { + f = f + 0.02f; + storeF(2, 0, f); + } } float touchCut = 1.f; @@ -45,7 +54,8 @@ int main(void* con, int ft, int launchID) touchCut = 5.f; } - float targetZoom = ((float)loadI32(0, STATE_ZOOM)) / 10.f; + + float targetZoom = ((float)loadI32(0, STATE_ZOOM)) / 1000.f; float zoom = filter(loadF(2, SCRATCH_ZOOM), targetZoom, 0.15 * touchCut); storeF(2, SCRATCH_ZOOM, zoom); @@ -59,7 +69,8 @@ int main(void* con, int ft, int launchID) rot = rot * scale; float rotStep = 20.0f / 180.0f * 3.14f * scale; rowCount = 4; - iconCount = 32;//loadI32(0, 1); + int index = 0; + int iconCount = loadI32(0, STATE_COUNT); while (iconCount) { float tmpSin = sinf(rot); float tmpCos = cosf(rot); @@ -70,15 +81,20 @@ int main(void* con, int ft, int launchID) float tz2 = tz1 - (tmpSin * scale * 2.f); int y; - for (y = 0; (y < rowCount) && iconCount; y++) { + for (y = rowCount -1; (y >= 0) && iconCount; y--) { float ty1 = ((y * 3.0f) - 4.5f) * scale; float ty2 = ty1 + scale * 2.f; pfBindTexture(NAMED_PF, 0, loadI32(1, y)); + color(1.0f, 1.0f, 1.0f, 1.0f); + if (done && (index != selectedID)) { + color(0.4f, 0.4f, 0.4f, 1.0f); + } drawQuad(tx1, ty1, tz1, tx2, ty1, tz2, tx2, ty2, tz2, tx1, ty2, tz1); iconCount--; + index++; } rot = rot + rotStep; } 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 eb8189abda5dc..8f4833519a62d 100644 --- a/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java +++ b/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java @@ -38,11 +38,11 @@ import android.view.KeyEvent; import android.view.MotionEvent; public class RolloRS { - public static final int STATE_POS_X = 0; - public static final int STATE_POS_Y = 1; - public static final int STATE_PRESSURE = 2; + //public static final int STATE_SELECTED_ID = 0; + public static final int STATE_DONE = 1; + //public static final int STATE_PRESSURE = 2; public static final int STATE_ZOOM = 3; - public static final int STATE_WARP = 4; + //public static final int STATE_WARP = 4; public static final int STATE_ORIENTATION = 5; public static final int STATE_SELECTION = 6; public static final int STATE_FIRST_VISIBLE = 7; @@ -61,7 +61,7 @@ public class RolloRS { } public void setPosition(float column) { - mAllocStateBuf[STATE_FIRST_VISIBLE] = (int)(column * 20); + mAllocStateBuf[STATE_FIRST_VISIBLE] = (int)(column * (-20)); mAllocState.data(mAllocStateBuf); } @@ -73,23 +73,22 @@ public class RolloRS { public void setZoom(float z) { //Log.e("rs", "zoom " + Float.toString(z)); - mAllocStateBuf[STATE_ZOOM] = (int)(z * 10.f); + mAllocStateBuf[STATE_ZOOM] = (int)(z * 1000.f); mAllocState.data(mAllocStateBuf); } - public void setCurve(float c) { - mAllocStateBuf[STATE_WARP] = (int)(c * 100); - Log.e("rs", "curve " + Integer.toString(mAllocStateBuf[STATE_WARP])); + public void setSelected(int index) { + Log.e("rs", "setSelected " + Integer.toString(index)); + + mAllocStateBuf[STATE_SELECTION] = index; + mAllocStateBuf[STATE_DONE] = 1; mAllocState.data(mAllocStateBuf); } private Resources mRes; private RenderScript mRS; - - private RenderScript.Script mScript; - private RenderScript.Sampler mSampler; private RenderScript.ProgramFragmentStore mPFSBackground; private RenderScript.ProgramFragment mPFBackground; @@ -123,13 +122,10 @@ public class RolloRS { mRS.programFragmentBegin(null, null); mRS.programFragmentSetTexEnable(0, true); - //mRS.programFragmentSetTexEnable(1, true); - //mRS.programFragmentSetEnvMode(0, RS_TEX_ENV_MODE_REPLACE); - //mRS.programFragmentSetEnvMode(1, RS_TEX_ENV_MODE_MODULATE); + mRS.programFragmentSetTexEnvMode(0, RenderScript.EnvMode.MODULATE); mPFImages = mRS.programFragmentCreate(); mPFImages.setName("PF"); mPFImages.bindSampler(mSampler, 0); - mPFImages.bindSampler(mSampler, 1); mRS.programFragmentStoreBegin(null, null); mRS.programFragmentStoreDepthFunc(RenderScript.DepthFunc.LESS); 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 5f11a1f27d499..eefebf8c18b34 100644 --- a/libs/rs/java/Rollo/src/com/android/rollo/RolloView.java +++ b/libs/rs/java/Rollo/src/com/android/rollo/RolloView.java @@ -40,8 +40,8 @@ import android.view.KeyEvent; import android.view.MotionEvent; import android.graphics.PixelFormat; -public class RolloView extends RSSurfaceView { +public class RolloView extends RSSurfaceView { public RolloView(Context context) { super(context); setFocusable(true); @@ -68,13 +68,48 @@ public class RolloView extends RSSurfaceView { } boolean mControlMode = false; + boolean mZoomMode = false; boolean mFlingMode = false; float mFlingX = 0; float mFlingY = 0; float mColumn = -1; - float mCurve = 1; + float mOldColumn; float mZoom = 1; + int mIconCount = 38; + int mRows = 4; + int mColumns = (mIconCount + mRows - 1) / mRows; + + float mMaxZoom = ((float)mColumns) / 3.f; + + + void setColumn(boolean clamp) + { + //Log.e("rs", " col = " + Float.toString(mColumn)); + float c = mColumn; + if(c > (mColumns -2)) { + c = (mColumns -2); + } + if(c < 1) { + c = 1; + } + mRender.setPosition(c); + if(clamp) { + mColumn = c; + } + } + + void computeSelection(float x, float y) + { + float col = mColumn + (x - 0.5f) * 3; + int iCol = (int)(col + 0.25f); + + float row = (y / 0.8f) * mRows; + int iRow = (int)(row - 0.25f); + + mRender.setSelected(iCol * mRows + iRow); + } + @Override public boolean onTouchEvent(MotionEvent ev) { @@ -95,61 +130,53 @@ public class RolloView extends RSSurfaceView { // Projector control if((nx > 0.2f) && (nx < 0.8f) || mControlMode) { if(act != ev.ACTION_UP) { - float zoom = 5.f;//1.f + 10.f * ev.getSize(); + float zoom = mMaxZoom; if(mControlMode) { + if(!mZoomMode) { + zoom = 1.f; + } float dx = nx - mFlingX; - if(ny < 0.9) { - zoom = 5.f - ((0.9f - ny) * 15.f); + if((ny < 0.9) && mZoomMode) { + zoom = mMaxZoom - ((0.9f - ny) * 10.f); if(zoom < 1) { zoom = 1; - mControlMode = false; + mZoomMode = false; } + mOldColumn = mColumn; } - mColumn += -dx * 2.3;// * zoom; - mColumn += -(mZoom - zoom) * (nx - 0.5f) * 2 * zoom; - mZoom = zoom; - - if(mColumn > 1) { - mColumn = 1; + mColumn += dx * 4;// * zoom; + if(zoom > 1.01f) { + mColumn += (mZoom - zoom) * (nx - 0.5f) * 4 * zoom; } - mRender.setPosition(mColumn); } else { + mOldColumn = mColumn; + mColumn = ((float)mColumns) / 2; mControlMode = true; - mZoom = 5; + mZoomMode = true; } + mZoom = zoom; mFlingX = nx; mRender.setZoom(zoom); } else { + if(mControlMode && (mZoom < 1.01f)) { + computeSelection(nx, ny); + } mControlMode = false; + mColumn = mOldColumn; mRender.setZoom(1.f); } } else { - if(nx > 0.2f) { - mCurve += 0.1f; - if(mCurve > 2) { - mCurve = 2; - } - } - if(nx < 0.8f) { - mCurve -= 0.1f; - if(mCurve < (-2)) { - mCurve = -2; - } - } - mRender.setCurve(mCurve); + // Do something with corners here.... } + setColumn(true); } else { // icon control if(act != ev.ACTION_UP) { if(mFlingMode) { - float dx = nx - mFlingX; - mColumn += dx * 5; - if(mColumn > 1) { - mColumn = 1; - } - mRender.setPosition(mColumn); + mColumn += (mFlingX - nx) * 5; + setColumn(true); } mFlingMode = true; mFlingX = nx; @@ -175,7 +202,7 @@ public class RolloView extends RSSurfaceView { return true; } - + } diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp index 82bad7cb84868..e9fc4d079b9c1 100644 --- a/libs/rs/rsScriptC.cpp +++ b/libs/rs/rsScriptC.cpp @@ -197,7 +197,7 @@ extern "C" void storeEnvMatrix(uint32_t bank, uint32_t offset, const rsc_Matrix } -extern "C" void color(float r, float g, float b, float a) +static void SC_color(float r, float g, float b, float a) { glColor4f(r, g, b, a); } @@ -253,15 +253,17 @@ extern "C" void disable(uint32_t p) glDisable(p); } -extern "C" uint32_t scriptRand(uint32_t max) +static float SC_randf(float max) { - return (uint32_t)(((float)rand()) * max / RAND_MAX); + float r = (float)rand(); + return r / RAND_MAX * max; } // Assumes (GL_FIXED) x,y,z (GL_UNSIGNED_BYTE)r,g,b,a -extern "C" void drawTriangleArray(RsAllocation alloc, uint32_t count) +static void SC_drawTriangleArray(int ialloc, uint32_t count) { GET_TLS(); + RsAllocation alloc = (RsAllocation)ialloc; const Allocation *a = (const Allocation *)alloc; const uint32_t *ptr = (const uint32_t *)a->getPtr(); @@ -398,7 +400,8 @@ extern "C" void contextBindProgramFragment(RsProgramFragment pf) } -static rsc_FunctionTable scriptCPtrTable = { +static rsc_FunctionTable scriptCPtrTable; +/* = { loadVp, SC_loadF, SC_loadI32, @@ -424,7 +427,7 @@ static rsc_FunctionTable scriptCPtrTable = { matrixScale, matrixTranslate, - color, + SC_color, pfBindTexture, pfBindSampler, @@ -437,7 +440,7 @@ static rsc_FunctionTable scriptCPtrTable = { enable, disable, - scriptRand, + SC_randf, contextBindProgramFragment, contextBindProgramFragmentStore, @@ -445,11 +448,11 @@ static rsc_FunctionTable scriptCPtrTable = { renderTriangleMesh, renderTriangleMeshRange, - drawTriangleArray, + SC_drawTriangleArray, drawRect }; - +*/ bool ScriptC::run(Context *rsc, uint32_t launchIndex) { @@ -503,18 +506,29 @@ void ScriptCState::clear() } ScriptCState::SymbolTable_t ScriptCState::gSyms[] = { + // IO { "loadI32", (void *)&SC_loadI32, "int loadI32(int, int)" }, + //{ "loadU32", (void *)&SC_loadU32, "unsigned int loadU32(int, int)" }, { "loadF", (void *)&SC_loadF, "float loadF(int, int)" }, { "storeI32", (void *)&SC_storeI32, "void storeI32(int, int, int)" }, + //{ "storeU32", (void *)&SC_storeU32, "void storeU32(int, int, unsigned int)" }, { "storeF", (void *)&SC_storeF, "void storeF(int, int, float)" }, - { "drawQuad", (void *)&SC_drawQuad, "void drawQuad(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4)" }, + + // math { "sinf", (void *)&sinf, "float sinf(float)" }, { "cosf", (void *)&cosf, "float cosf(float)" }, { "fabs", (void *)&fabs, "float fabs(float)" }, + { "randf", (void *)&SC_randf, "float randf(float)" }, + + // context + { "drawQuad", (void *)&SC_drawQuad, "void drawQuad(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4)" }, { "contextBindProgramFragmentStore", (void *)&contextBindProgramFragmentStore, "void contextBindProgramFragmentStore(int)" }, { "pfClearColor", (void *)&pfClearColor, "void pfClearColor(float, float, float, float)" }, { "pfBindTexture", (void *)&pfBindTexture, "void pfBindTexture(int, int, int)" }, + { "color", (void *)&SC_color, "void color(float, float, float, float)" }, + { "drawTriangleArray", (void *)&SC_drawTriangleArray, "void drawTriangleArray(int ialloc, int count)" }, + { NULL, NULL, NULL } };