diff options
| author | Jason Sams <rjsams@android.com> | 2009-06-16 17:49:58 -0700 |
|---|---|---|
| committer | Jason Sams <rjsams@android.com> | 2009-06-16 17:49:58 -0700 |
| commit | b37c0a5db65cd8b72cac6a3250faddd1aecb722e (patch) | |
| tree | 5f3c30f30b5e3e7d114fdabb37882bc1bceffd8d | |
| parent | 0826a6f90f049bf94fc39fb23ad3a736a14b96eb (diff) | |
| download | frameworks_base-b37c0a5db65cd8b72cac6a3250faddd1aecb722e.zip frameworks_base-b37c0a5db65cd8b72cac6a3250faddd1aecb722e.tar.gz frameworks_base-b37c0a5db65cd8b72cac6a3250faddd1aecb722e.tar.bz2 | |
Switch fountain to use ProgramVertex rather than hard coded camers in scripts. Remove camera code from scripts.
| -rw-r--r-- | libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java | 15 | ||||
| -rw-r--r-- | libs/rs/java/RenderScript/android/renderscript/Matrix.java | 4 | ||||
| -rw-r--r-- | libs/rs/java/RenderScript/android/renderscript/RenderScript.java | 15 | ||||
| -rw-r--r-- | libs/rs/java/Rollo/res/raw/rollo.c | 1 | ||||
| -rw-r--r-- | libs/rs/java/Rollo/src/com/android/rollo/RolloMesh.java | 43 | ||||
| -rw-r--r-- | libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java | 7 | ||||
| -rw-r--r-- | libs/rs/jni/RenderScript_jni.cpp | 27 | ||||
| -rw-r--r-- | libs/rs/rs.spec | 16 | ||||
| -rw-r--r-- | libs/rs/rsContext.cpp | 18 | ||||
| -rw-r--r-- | libs/rs/rsProgramVertex.cpp | 40 | ||||
| -rw-r--r-- | libs/rs/rsProgramVertex.h | 5 | ||||
| -rw-r--r-- | libs/rs/rsScript.h | 1 | ||||
| -rw-r--r-- | libs/rs/rsScriptC.cpp | 7 |
13 files changed, 66 insertions, 133 deletions
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 0a0b05a..d167b5f 100644 --- a/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java +++ b/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java @@ -18,12 +18,13 @@ package com.android.fountain; import java.io.Writer; -import android.renderscript.RenderScript; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.renderscript.RenderScript; +import android.renderscript.ProgramVertexAlloc; import android.util.Log; public class FountainRS { @@ -57,8 +58,10 @@ public class FountainRS { private RenderScript.ProgramFragmentStore mPFS; private RenderScript.ProgramFragment mPF; private RenderScript.ProgramFragment mPF2; + private RenderScript.ProgramVertex mPV; private RenderScript.Allocation mTexture; private RenderScript.Sampler mSampler; + private ProgramVertexAlloc mPVA; private Bitmap mBackground; @@ -107,6 +110,16 @@ public class FountainRS { mPF2.bindSampler(mSampler, 0); mPF2.setName("PgmFragBackground"); + mRS.programVertexBegin(null, null); + mPV = mRS.programVertexCreate(); + mPVA = new ProgramVertexAlloc(mRS); + mPV.bindAllocation(0, mPVA.mAlloc); + mPVA.setupOrthoWindow(320, 480); + mRS.contextBindProgramVertex(mPV); + + + + mParams[0] = 0; mParams[1] = partCount; mParams[2] = 0; diff --git a/libs/rs/java/RenderScript/android/renderscript/Matrix.java b/libs/rs/java/RenderScript/android/renderscript/Matrix.java index 03222aa..91e7b34 100644 --- a/libs/rs/java/RenderScript/android/renderscript/Matrix.java +++ b/libs/rs/java/RenderScript/android/renderscript/Matrix.java @@ -139,8 +139,8 @@ class Matrix { mMat[5] = 2 / (t - b); mMat[10]= -2 / (f - n); mMat[12]= -(r + l) / (r - l); - mMat[12]= -(t + b) / (t - b); - mMat[12]= -(f + n) / (f - n); + mMat[13]= -(t + b) / (t - b); + mMat[14]= -(f + n) / (f - n); } public void loadFrustum(float l, float r, float b, float t, float n, float f) { diff --git a/libs/rs/java/RenderScript/android/renderscript/RenderScript.java b/libs/rs/java/RenderScript/android/renderscript/RenderScript.java index afb4ae3..4d5c4a0 100644 --- a/libs/rs/java/RenderScript/android/renderscript/RenderScript.java +++ b/libs/rs/java/RenderScript/android/renderscript/RenderScript.java @@ -154,10 +154,7 @@ public class RenderScript { native private void nProgramVertexBindAllocation(int pv, int slot, int mID); native private void nProgramVertexBegin(int inID, int outID); native private void nProgramVertexSetType(int slot, int mID); - native private void nProgramVertexSetCameraMode(boolean isOrtho); native private void nProgramVertexSetTextureMatrixEnable(boolean enable); - native private void nProgramVertexSetModelMatrixEnable(boolean enable); - native private void nProgramVertexSetProjectionMatrixEnable(boolean enable); native private int nProgramVertexCreate(); @@ -733,22 +730,10 @@ public class RenderScript { nProgramVertexSetType(slot, t.mID); } - public void programVertexSetCameraMode(boolean isOrtho) { - nProgramVertexSetCameraMode(isOrtho); - } - public void programVertexSetTextureMatrixEnable(boolean enable) { nProgramVertexSetTextureMatrixEnable(enable); } - public void programVertexSetModelMatrixEnable(boolean enable) { - nProgramVertexSetModelMatrixEnable(enable); - } - - public void programVertexSetProjectionMatrixEnable(boolean enable) { - nProgramVertexSetProjectionMatrixEnable(enable); - } - public ProgramVertex programVertexCreate() { int id = nProgramVertexCreate(); return new ProgramVertex(id); diff --git a/libs/rs/java/Rollo/res/raw/rollo.c b/libs/rs/java/Rollo/res/raw/rollo.c index b81c567..56ee425 100644 --- a/libs/rs/java/Rollo/res/raw/rollo.c +++ b/libs/rs/java/Rollo/res/raw/rollo.c @@ -8,6 +8,7 @@ int main(void* con, int ft, int launchID) int x; renderTriangleMesh(con, NAMED_MeshCard); + renderTriangleMesh(con, NAMED_MeshTab); return 1; } diff --git a/libs/rs/java/Rollo/src/com/android/rollo/RolloMesh.java b/libs/rs/java/Rollo/src/com/android/rollo/RolloMesh.java index c44a817..d7252fb 100644 --- a/libs/rs/java/Rollo/src/com/android/rollo/RolloMesh.java +++ b/libs/rs/java/Rollo/src/com/android/rollo/RolloMesh.java @@ -24,6 +24,11 @@ import android.renderscript.RenderScript; class RolloMesh { + static public final float mCardHeight = 1.2f; + static public final float mCardWidth = 1.8f; + static public final float mTabHeight = 0.2f; + static public final float mTabs = 3; + static public final float mTabGap = 0.1f; static RenderScript.TriangleMesh createCard(RenderScript rs) { RenderScript.Element vtx = rs.elementGetPredefined( @@ -31,12 +36,15 @@ class RolloMesh { RenderScript.Element idx = rs.elementGetPredefined( RenderScript.ElementPredefined.INDEX_16); - rs.triangleMeshBegin(vtx, idx); - rs.triangleMeshAddVertex_XYZ_ST(0, 0, 0, 0, 0); - rs.triangleMeshAddVertex_XYZ_ST(0, 1, 0, 0, 1); - rs.triangleMeshAddVertex_XYZ_ST(1, 1, 0, 1, 1); - rs.triangleMeshAddVertex_XYZ_ST(1, 0, 0, 1, 0); + float w = mCardWidth / 2; + float h = mCardHeight; + float z = 0; + rs.triangleMeshBegin(vtx, idx); + rs.triangleMeshAddVertex_XYZ_ST(-w, 0, z, 0, 0); + rs.triangleMeshAddVertex_XYZ_ST(-w, h, z, 0, 1); + rs.triangleMeshAddVertex_XYZ_ST( w, h, z, 1, 1); + rs.triangleMeshAddVertex_XYZ_ST( w, 0, z, 1, 0); rs.triangleMeshAddTriangle(0,1,2); rs.triangleMeshAddTriangle(0,2,3); return rs.triangleMeshCreate(); @@ -48,11 +56,28 @@ class RolloMesh { RenderScript.Element idx = rs.elementGetPredefined( RenderScript.ElementPredefined.INDEX_16); + + float tabSlope = 0.1f; + float num = 0; + + float w = (mCardWidth - ((mTabs - 1) * mTabGap)) / mTabs; + float w1 = -(mCardWidth / 2) + ((w + mTabGap) * num); + float w2 = w1 + (w * tabSlope); + float w3 = w1 + w - (w * tabSlope); + float w4 = w1 + w; + float h1 = mCardHeight; + float h2 = h1 + mTabHeight; + float z = 0; + + float stScale = w / mTabHeight / 2; + float stScale2 = stScale * (tabSlope / w); + + rs.triangleMeshBegin(vtx, idx); - rs.triangleMeshAddVertex_XYZ_ST(0.0f, 0, 0, -1.0f, 0); - rs.triangleMeshAddVertex_XYZ_ST(0.2f, 1, 0, -0.8f, 1); - rs.triangleMeshAddVertex_XYZ_ST(1.8f, 1, 0, 0.8f, 1); - rs.triangleMeshAddVertex_XYZ_ST(2.0f, 0, 0, 1.0f, 0); + rs.triangleMeshAddVertex_XYZ_ST(w1, h1, z, -stScale, 0); + rs.triangleMeshAddVertex_XYZ_ST(w2, h2, z, -stScale2, 1); + rs.triangleMeshAddVertex_XYZ_ST(w3, h2, z, stScale2, 1); + rs.triangleMeshAddVertex_XYZ_ST(w4, h1, z, stScale, 0); rs.triangleMeshAddTriangle(0,1,2); rs.triangleMeshAddTriangle(0,2,3); return rs.triangleMeshCreate(); 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 aa9f338..da0b146 100644 --- a/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java +++ b/libs/rs/java/Rollo/src/com/android/rollo/RolloRS.java @@ -74,8 +74,8 @@ public class RolloRS { //private float[] mBufferPV; private void initNamed() { - //mMeshTab = RolloMesh.createTab(mRS); - //mMeshTab.setName("MeshTab"); + mMeshTab = RolloMesh.createTab(mRS); + mMeshTab.setName("MeshTab"); mMeshCard = RolloMesh.createCard(mRS); mMeshCard.setName("MeshCard"); Log.e("rs", "Done loading strips"); @@ -117,10 +117,7 @@ public class RolloRS { mPVAlloc = new ProgramVertexAlloc(mRS); mRS.programVertexBegin(null, null); - mRS.programVertexSetCameraMode(true); mRS.programVertexSetTextureMatrixEnable(true); - mRS.programVertexSetModelMatrixEnable(true); - mRS.programVertexSetProjectionMatrixEnable(true); mPV = mRS.programVertexCreate(); mPV.setName("PV"); mPV.bindAllocation(0, mPVAlloc.mAlloc); diff --git a/libs/rs/jni/RenderScript_jni.cpp b/libs/rs/jni/RenderScript_jni.cpp index 7a3a7af..ab17a4a 100644 --- a/libs/rs/jni/RenderScript_jni.cpp +++ b/libs/rs/jni/RenderScript_jni.cpp @@ -791,14 +791,6 @@ nProgramVertexSetType(JNIEnv *_env, jobject _this, jint slot, jint t) } static void -nProgramVertexSetCameraMode(JNIEnv *_env, jobject _this, jboolean isOrtho) -{ - RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); - LOG_API("nProgramVertexSetCameraMode, con(%p), isOrtho(%i)", con, isOrtho); - rsProgramVertexSetCameraMode(isOrtho); -} - -static void nProgramVertexSetTextureMatrixEnable(JNIEnv *_env, jobject _this, jboolean enable) { RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); @@ -806,22 +798,6 @@ nProgramVertexSetTextureMatrixEnable(JNIEnv *_env, jobject _this, jboolean enabl rsProgramVertexSetTextureMatrixEnable(enable); } -static void -nProgramVertexSetModelMatrixEnable(JNIEnv *_env, jobject _this, jboolean enable) -{ - RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); - LOG_API("nProgramVertexSetModelMatrixEnable, con(%p), enable(%i)", con, enable); - rsProgramVertexSetModelMatrixEnable(enable); -} - -static void -nProgramVertexSetProjectionMatrixEnable(JNIEnv *_env, jobject _this, jboolean enable) -{ - RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); - LOG_API("nProgramVertexSetProjectionMatrixEnable, con(%p), enable(%i)", con, enable); - rsProgramVertexSetProjectionMatrixEnable(enable); -} - static jint nProgramVertexCreate(JNIEnv *_env, jobject _this) { @@ -1000,10 +976,7 @@ static JNINativeMethod methods[] = { {"nProgramVertexBindAllocation", "(III)V", (void*)nProgramVertexBindAllocation }, {"nProgramVertexBegin", "(II)V", (void*)nProgramVertexBegin }, {"nProgramVertexSetType", "(II)V", (void*)nProgramVertexSetType }, -{"nProgramVertexSetCameraMode", "(Z)V", (void*)nProgramVertexSetCameraMode }, {"nProgramVertexSetTextureMatrixEnable", "(Z)V", (void*)nProgramVertexSetTextureMatrixEnable }, -{"nProgramVertexSetModelMatrixEnable", "(Z)V", (void*)nProgramVertexSetModelMatrixEnable }, -{"nProgramVertexSetProjectionMatrixEnable", "(Z)V", (void*)nProgramVertexSetProjectionMatrixEnable }, {"nProgramVertexCreate", "()I", (void*)nProgramVertexCreate }, {"nContextBindRootScript", "(I)V", (void*)nContextBindRootScript }, diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec index 107096f..dd489b8 100644 --- a/libs/rs/rs.spec +++ b/libs/rs/rs.spec @@ -286,10 +286,6 @@ ScriptCSetRoot { param bool isRoot } -ScriptCSetOrtho { - param bool isOrtho - } - ScriptCSetScript { param void * codePtr } @@ -403,19 +399,7 @@ ProgramVertexSetType { param RsType constants } -ProgramVertexSetCameraMode { - param bool ortho - } - ProgramVertexSetTextureMatrixEnable { param bool enable } -ProgramVertexSetModelMatrixEnable { - param bool enable - } - -ProgramVertexSetProjectionMatrixEnable { - param bool enable - } - diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp index 266c455..c466f46 100644 --- a/libs/rs/rsContext.cpp +++ b/libs/rs/rsContext.cpp @@ -81,24 +81,6 @@ bool Context::runRootScript() glEnable(GL_LIGHT0); glViewport(0, 0, mWidth, mHeight); - if(mRootScript->mEnviroment.mIsOrtho) { - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrthof(0, mWidth, mHeight, 0, 0, 1); - glMatrixMode(GL_MODELVIEW); - } else { - float aspectH = ((float)mWidth) / mHeight; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustumf(-1, 1, -aspectH, aspectH, 1, 100); - glRotatef(-90, 0,0,1); - glTranslatef(0, 0, -3); - glMatrixMode(GL_MODELVIEW); - } - - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glDepthMask(GL_TRUE); glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp index fc26ab5..c24f228 100644 --- a/libs/rs/rsProgramVertex.cpp +++ b/libs/rs/rsProgramVertex.cpp @@ -25,14 +25,21 @@ ProgramVertex::ProgramVertex(Element *in, Element *out) : Program(in, out) { mTextureMatrixEnable = false; - mProjectionEnable = false; - mTransformEnable = false; } ProgramVertex::~ProgramVertex() { } +static void logMatrix(const char *txt, const float *f) +{ + LOGE("Matrix %s, %p", txt, f); + LOGE("%6.2f, %6.2f, %6.2f, %6.2f", f[0], f[4], f[8], f[12]); + LOGE("%6.2f, %6.2f, %6.2f, %6.2f", f[1], f[5], f[9], f[13]); + LOGE("%6.2f, %6.2f, %6.2f, %6.2f", f[2], f[6], f[10], f[14]); + LOGE("%6.2f, %6.2f, %6.2f, %6.2f", f[3], f[7], f[11], f[15]); +} + void ProgramVertex::setupGL() { const float *f = static_cast<const float *>(mConstants[0]->getPtr()); @@ -44,19 +51,13 @@ void ProgramVertex::setupGL() glLoadIdentity(); } + //logMatrix("prog", &f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET]); + //logMatrix("model", &f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET]); glMatrixMode(GL_PROJECTION); - if (mProjectionEnable) { - glLoadMatrixf(&f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET]); - } else { - } - + glLoadMatrixf(&f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET]); glMatrixMode(GL_MODELVIEW); - if (mTransformEnable) { - glLoadMatrixf(&f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET]); - } else { - glLoadIdentity(); - } + glLoadMatrixf(&f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET]); } void ProgramVertex::setConstantType(uint32_t slot, const Type *t) @@ -110,26 +111,11 @@ void rsi_ProgramVertexSetType(Context *rsc, uint32_t slot, RsType constants) rsc->mStateVertex.mPV->setConstantType(slot, static_cast<const Type *>(constants)); } -void rsi_ProgramVertexSetCameraMode(Context *rsc, bool ortho) -{ - rsc->mStateVertex.mPV->setProjectionEnabled(!ortho); -} - void rsi_ProgramVertexSetTextureMatrixEnable(Context *rsc, bool enable) { rsc->mStateVertex.mPV->setTextureMatrixEnable(enable); } -void rsi_ProgramVertexSetModelMatrixEnable(Context *rsc, bool enable) -{ - rsc->mStateVertex.mPV->setTransformEnable(enable); -} - -void rsi_ProgramVertexSetProjectionMatrixEnable(Context *rsc, bool enable) -{ - rsc->mStateVertex.mPV->setProjectionEnable(enable); -} - } diff --git a/libs/rs/rsProgramVertex.h b/libs/rs/rsProgramVertex.h index 677be6e..0b3a3eb 100644 --- a/libs/rs/rsProgramVertex.h +++ b/libs/rs/rsProgramVertex.h @@ -38,9 +38,6 @@ public: void setConstantType(uint32_t slot, const Type *); void bindAllocation(uint32_t slot, Allocation *); void setTextureMatrixEnable(bool e) {mTextureMatrixEnable = e;} - void setProjectionEnabled(bool e) {mProjectionEnable = e;} - void setTransformEnable(bool e) {mTransformEnable = e;} - void setProjectionEnable(bool e) {mProjectionEnable = e;} protected: bool mDirty; @@ -50,8 +47,6 @@ protected: // Hacks to create a program for now bool mTextureMatrixEnable; - bool mProjectionEnable; - bool mTransformEnable; }; diff --git a/libs/rs/rsScript.h b/libs/rs/rsScript.h index d32f116..7dd2b61 100644 --- a/libs/rs/rsScript.h +++ b/libs/rs/rsScript.h @@ -39,7 +39,6 @@ public: struct Enviroment_t { bool mIsRoot; - bool mIsOrtho; float mClearColor[4]; float mClearDepth; uint32_t mClearStencil; diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp index d29eb9f..2963831 100644 --- a/libs/rs/rsScriptC.cpp +++ b/libs/rs/rsScriptC.cpp @@ -428,7 +428,6 @@ void ScriptCState::clear() mEnviroment.mClearDepth = 1; mEnviroment.mClearStencil = 0; mEnviroment.mIsRoot = false; - mEnviroment.mIsOrtho = true; mAccScript = NULL; @@ -556,12 +555,6 @@ void rsi_ScriptCSetRoot(Context * rsc, bool isRoot) ss->mEnviroment.mIsRoot = isRoot; } -void rsi_ScriptCSetOrtho(Context * rsc, bool isOrtho) -{ - ScriptCState *ss = &rsc->mScriptC; - ss->mEnviroment.mIsOrtho = isOrtho; -} - void rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len) { ScriptCState *ss = &rsc->mScriptC; |
