diff options
author | Jason Sams <rjsams@android.com> | 2009-07-29 20:55:44 -0700 |
---|---|---|
committer | Jason Sams <rjsams@android.com> | 2009-07-29 20:55:44 -0700 |
commit | faf1520be77aa01903f9ad87990377f44e185224 (patch) | |
tree | b19baaf038a4543185644735b8bc38405e7c4686 /libs/rs/java/Film | |
parent | 31b532ee9e1aaebbe383b13422cc59df43de4725 (diff) | |
download | frameworks_base-faf1520be77aa01903f9ad87990377f44e185224.zip frameworks_base-faf1520be77aa01903f9ad87990377f44e185224.tar.gz frameworks_base-faf1520be77aa01903f9ad87990377f44e185224.tar.bz2 |
Filmstrip work and boxed bitmap load bugfixes.
Diffstat (limited to 'libs/rs/java/Film')
-rw-r--r-- | libs/rs/java/Film/res/raw/filmstrip.c | 23 | ||||
-rw-r--r-- | libs/rs/java/Film/src/com/android/film/FilmRS.java | 56 | ||||
-rw-r--r-- | libs/rs/java/Film/src/com/android/film/FilmView.java | 2 |
3 files changed, 53 insertions, 28 deletions
diff --git a/libs/rs/java/Film/res/raw/filmstrip.c b/libs/rs/java/Film/res/raw/filmstrip.c index 495fe55..ac694ab 100644 --- a/libs/rs/java/Film/res/raw/filmstrip.c +++ b/libs/rs/java/Film/res/raw/filmstrip.c @@ -47,8 +47,8 @@ int main(int index) // Start of images. - bindProgramFragmentStore(NAMED_PFImages); - bindProgramFragment(NAMED_PFSImages); + bindProgramFragmentStore(NAMED_PFSImages); + bindProgramFragment(NAMED_PFImages); bindProgramVertex(NAMED_PVImages); float focusPos = loadF(1, POS_FOCUS); @@ -87,7 +87,16 @@ int main(int index) offset = offset + triangleOffsetsCount / 2; - if (!((offset < 0) || (offset >= triangleOffsetsCount))) { + int drawit = 1; + if (offset < 0) { + drawit = 0; + } + if (offset >= triangleOffsetsCount) { + drawit = 0; + } + + //if (!((offset < 0) || (offset >= triangleOffsetsCount))) { + if (drawit) { int start = offset -2; int end = offset + 2; @@ -99,11 +108,9 @@ int main(int index) } bindTexture(NAMED_PFImages, 0, loadI32(0, imgId - 1)); - /* - matrixLoadTranslate(con, &m, -pos - env->triangleOffsetsTex[env->triangleOffsetsCount / 2], 0, 0); - storeEnvMatrix(con, 3, RS_PROGRAM_VERTEX_TEXTURE_OFFSET, &m); - renderTriangleMeshRange(con, env->mesh, env->triangleOffsets[start], env->triangleOffsets[end] - env->triangleOffsets[start]); - */ + matrixLoadTranslate(&f16, -pos - loadF(5, triangleOffsetsCount / 2), 0, 0); + vpLoadTextureMatrix(&f16); + drawTriangleMeshRange(NAMED_mesh, loadI32(4, start), loadI32(4, end) - loadI32(4, start)); } } return 0; diff --git a/libs/rs/java/Film/src/com/android/film/FilmRS.java b/libs/rs/java/Film/src/com/android/film/FilmRS.java index 395bd35..1de44a7 100644 --- a/libs/rs/java/Film/src/com/android/film/FilmRS.java +++ b/libs/rs/java/Film/src/com/android/film/FilmRS.java @@ -67,7 +67,7 @@ public class FilmRS { float anim = ((float)x-50) / 270.f; mBufferPos[POS_TRANSLATE] = 2f * anim + 0.5f; // translation mBufferPos[POS_ROTATE] = (anim * 40); // rotation - mBufferPos[POS_FOCUS] = ((float)y) / 16.f - 8; // focusPos + mBufferPos[POS_FOCUS] = ((float)y) / 16.f - 10.f; // focusPos mAllocPos.data(mBufferPos); } @@ -92,6 +92,9 @@ public class FilmRS { private RenderScript.Allocation mAllocPos; private RenderScript.Allocation mAllocState; private RenderScript.Allocation mAllocPV; + private RenderScript.Allocation mAllocOffsetsTex; + private RenderScript.Allocation mAllocOffsets; + private RenderScript.TriangleMesh mMesh; private RenderScript.Light mLight; @@ -101,21 +104,11 @@ public class FilmRS { private float[] mBufferPos = new float[3]; private int[] mBufferState; - private void initSamplers() { - mRS.samplerBegin(); - mRS.samplerSet(RenderScript.SamplerParam.FILTER_MIN, - RenderScript.SamplerValue.LINEAR_MIP_LINEAR); - mRS.samplerSet(RenderScript.SamplerParam.WRAP_MODE_S, - RenderScript.SamplerValue.CLAMP); - mRS.samplerSet(RenderScript.SamplerParam.WRAP_MODE_T, - RenderScript.SamplerValue.CLAMP); - mSampler = mRS.samplerCreate(); - } - private void initPFS() { mRS.programFragmentStoreBegin(null, null); mRS.programFragmentStoreDepthFunc(RenderScript.DepthFunc.LESS); mRS.programFragmentStoreDitherEnable(true); + mRS.programFragmentStoreDepthMask(true); mPFSBackground = mRS.programFragmentStoreCreate(); mPFSBackground.setName("PFSBackground"); @@ -130,15 +123,27 @@ public class FilmRS { } private void initPF() { + mRS.samplerBegin(); + mRS.samplerSet(RenderScript.SamplerParam.FILTER_MIN, + RenderScript.SamplerValue.LINEAR);//_MIP_LINEAR); + mRS.samplerSet(RenderScript.SamplerParam.FILTER_MAG, + RenderScript.SamplerValue.LINEAR); + mRS.samplerSet(RenderScript.SamplerParam.WRAP_MODE_S, + RenderScript.SamplerValue.CLAMP); + mRS.samplerSet(RenderScript.SamplerParam.WRAP_MODE_T, + RenderScript.SamplerValue.WRAP); + mSampler = mRS.samplerCreate(); + + mRS.programFragmentBegin(null, null); mPFBackground = mRS.programFragmentCreate(); mPFBackground.setName("PFBackground"); mRS.programFragmentBegin(null, null); mRS.programFragmentSetTexEnable(0, true); - //mRS.programFragmentSetEnvMode(0, RS_TEX_ENV_MODE_REPLACE); - //rsProgramFragmentSetType(0, gEnv.tex[0]->getType()); + mRS.programFragmentSetTexEnvMode(0, RenderScript.EnvMode.REPLACE); mPFImages = mRS.programFragmentCreate(); + mPFImages.bindSampler(mSampler, 0); mPFImages.setName("PFImages"); } @@ -148,12 +153,12 @@ public class FilmRS { mLight.setPosition(0, -0.5f, -1.0f); mRS.programVertexBegin(null, null); - mRS.programVertexSetTextureMatrixEnable(true); mRS.programVertexAddLight(mLight); mPVBackground = mRS.programVertexCreate(); mPVBackground.setName("PVBackground"); mRS.programVertexBegin(null, null); + mRS.programVertexSetTextureMatrixEnable(true); mPVImages = mRS.programVertexCreate(); mPVImages.setName("PVImages"); } @@ -179,8 +184,8 @@ public class FilmRS { b = BitmapFactory.decodeResource(mRes, R.drawable.p03, opts); mImages[2] = mRS.allocationCreateFromBitmapBoxed(b, RenderScript.ElementPredefined.RGB_565, true); - b = BitmapFactory.decodeResource(mRes, R.drawable.p04, opts); - mImages[3] = mRS.allocationCreateFromBitmapBoxed(b, RenderScript.ElementPredefined.RGB_565, true); + b = BitmapFactory.decodeResource(mRes, R.drawable.path1927, opts); + mImages[3] = mRS.allocationCreateFromBitmap(b, RenderScript.ElementPredefined.RGB_565, true); b = BitmapFactory.decodeResource(mRes, R.drawable.p05, opts); mImages[4] = mRS.allocationCreateFromBitmapBoxed(b, RenderScript.ElementPredefined.RGB_565, true); @@ -242,10 +247,8 @@ public class FilmRS { mMesh.setName("mesh"); initPFS(); - initSamplers(); initPF(); initPV(); - mPFImages.bindSampler(mSampler, 0); Log.e("rs", "Done loading named"); @@ -274,6 +277,21 @@ public class FilmRS { mScriptStrip.bindAllocation(mPVA.mAlloc, 3); + mAllocOffsets = mRS.allocationCreatePredefSized( + RenderScript.ElementPredefined.USER_I32, + mFSM.mTriangleOffsets.length); + mAllocOffsets.data(mFSM.mTriangleOffsets); + mScriptStrip.bindAllocation(mAllocOffsets, 4); + + mAllocOffsetsTex = mRS.allocationCreatePredefSized( + RenderScript.ElementPredefined.USER_FLOAT, + mFSM.mTriangleOffsetsTex.length); + mAllocOffsetsTex.data(mFSM.mTriangleOffsetsTex); + mScriptStrip.bindAllocation(mAllocOffsetsTex, 5); + + + + /* { Resources res = getResources(); diff --git a/libs/rs/java/Film/src/com/android/film/FilmView.java b/libs/rs/java/Film/src/com/android/film/FilmView.java index a743b1b..73b7414 100644 --- a/libs/rs/java/Film/src/com/android/film/FilmView.java +++ b/libs/rs/java/Film/src/com/android/film/FilmView.java @@ -74,7 +74,7 @@ public class FilmView extends RSSurfaceView { if (act == ev.ACTION_UP) { ret = false; } - mRender.setFilmStripPosition((int)ev.getX(), (int)ev.getY()); + mRender.setFilmStripPosition((int)ev.getX(), (int)ev.getY() / 5); return ret; } } |