diff options
author | Jason Sams <rjsams@android.com> | 2009-08-13 12:59:04 -0700 |
---|---|---|
committer | Jason Sams <rjsams@android.com> | 2009-08-13 12:59:04 -0700 |
commit | fbf0b9ecda03fbdbd4ebabfd18da09a789686249 (patch) | |
tree | 6c321ebb1d011aae9961ed7c046645028b05da86 /graphics | |
parent | 1b52aae4d908fcf749e9a8d86bb0a33c70728c56 (diff) | |
download | frameworks_base-fbf0b9ecda03fbdbd4ebabfd18da09a789686249.zip frameworks_base-fbf0b9ecda03fbdbd4ebabfd18da09a789686249.tar.gz frameworks_base-fbf0b9ecda03fbdbd4ebabfd18da09a789686249.tar.bz2 |
Implement named slots and convert script.addType to script.setType to remove ordering restrictions.
Diffstat (limited to 'graphics')
-rw-r--r-- | graphics/java/android/renderscript/RenderScript.java | 4 | ||||
-rw-r--r-- | graphics/java/android/renderscript/Script.java | 39 | ||||
-rw-r--r-- | graphics/java/android/renderscript/Type.java | 8 | ||||
-rw-r--r-- | graphics/jni/android_renderscript_RenderScript.cpp | 33 |
4 files changed, 48 insertions, 36 deletions
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java index 31bfc57..b98a48a 100644 --- a/graphics/java/android/renderscript/RenderScript.java +++ b/graphics/java/android/renderscript/RenderScript.java @@ -142,10 +142,10 @@ public class RenderScript { native void nScriptSetClearDepth(int script, float depth); native void nScriptSetClearStencil(int script, int stencil); native void nScriptSetTimeZone(int script, byte[] timeZone); + native void nScriptSetType(int type, String name, int slot); + native void nScriptSetRoot(boolean isRoot); native void nScriptCBegin(); - native void nScriptCAddType(int type); - native void nScriptCSetRoot(boolean isRoot); native void nScriptCSetScript(byte[] script, int offset, int length); native int nScriptCCreate(); native void nScriptCAddDefineI32(String name, int value); diff --git a/graphics/java/android/renderscript/Script.java b/graphics/java/android/renderscript/Script.java index 42c58ce..47479d8 100644 --- a/graphics/java/android/renderscript/Script.java +++ b/graphics/java/android/renderscript/Script.java @@ -20,6 +20,8 @@ package android.renderscript; * @hide **/ public class Script extends BaseObj { + public static final int MAX_SLOT = 16; + boolean mIsRoot; Type[] mTypes; @@ -64,39 +66,36 @@ public class Script extends BaseObj { RenderScript mRS; boolean mIsRoot = false; Type[] mTypes; - int mTypeCount; + String[] mNames; Builder(RenderScript rs) { mRS = rs; - mTypes = new Type[4]; - mTypeCount = 0; + mTypes = new Type[MAX_SLOT]; + mNames = new String[MAX_SLOT]; } - public void addType(Type t) { - if(mTypeCount >= mTypes.length) { - Type[] nt = new Type[mTypeCount * 2]; - for(int ct=0; ct < mTypeCount; ct++) { - nt[ct] = mTypes[ct]; - } - mTypes = nt; - } - mTypes[mTypeCount] = t; - mTypeCount++; + public void setType(Type t, int slot) { + mTypes[slot] = t; + mNames[slot] = null; + } + + public void setType(Type t, String name, int slot) { + mTypes[slot] = t; + mNames[slot] = name; } void transferCreate() { - mRS.nScriptCSetRoot(mIsRoot); - for(int ct=0; ct < mTypeCount; ct++) { - mRS.nScriptCAddType(mTypes[ct].mID); + mRS.nScriptSetRoot(mIsRoot); + for(int ct=0; ct < mTypes.length; ct++) { + if(mTypes[ct] != null) { + mRS.nScriptSetType(mTypes[ct].mID, mNames[ct], ct); + } } } void transferObject(Script s) { s.mIsRoot = mIsRoot; - s.mTypes = new Type[mTypeCount]; - for(int ct=0; ct < mTypeCount; ct++) { - s.mTypes[ct] = mTypes[ct]; - } + s.mTypes = mTypes; } public void setRoot(boolean r) { diff --git a/graphics/java/android/renderscript/Type.java b/graphics/java/android/renderscript/Type.java index d35d482..afb0e60 100644 --- a/graphics/java/android/renderscript/Type.java +++ b/graphics/java/android/renderscript/Type.java @@ -56,7 +56,7 @@ public class Type extends BaseObj { mRS.nTypeDestroy(mID); } - public static Type createFromClass(RenderScript rs, Class c, int size, String scriptName) { + public static Type createFromClass(RenderScript rs, Class c, int size) { Element e = Element.createFromClass(rs, c); Builder b = new Builder(rs, e); b.add(Dimension.X, size); @@ -91,10 +91,16 @@ public class Type extends BaseObj { rs.nTypeSetupFields(t, arTypes, arBits, fields); } t.mJavaClass = c; + return t; + } + + public static Type createFromClass(RenderScript rs, Class c, int size, String scriptName) { + Type t = createFromClass(rs, c, size); t.setName(scriptName); return t; } + public static class Builder { RenderScript mRS; Entry[] mEntries; diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp index ef0cf68..5780e02 100644 --- a/graphics/jni/android_renderscript_RenderScript.cpp +++ b/graphics/jni/android_renderscript_RenderScript.cpp @@ -824,30 +824,37 @@ nScriptSetTimeZone(JNIEnv *_env, jobject _this, jint script, jbyteArray timeZone } } -// ----------------------------------- - static void -nScriptCBegin(JNIEnv *_env, jobject _this) +nScriptSetType(JNIEnv *_env, jobject _this, jint type, jstring _str, jint slot) { RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); - LOG_API("nScriptCBegin, con(%p)", con); - rsScriptCBegin(); + LOG_API("nScriptCAddType, con(%p), type(%p), slot(%i)", con, (RsType)type, slot); + const char* n = NULL; + if (_str) { + n = _env->GetStringUTFChars(_str, NULL); + } + rsScriptSetType((RsType)type, slot, n); + if (n) { + _env->ReleaseStringUTFChars(_str, n); + } } static void -nScriptCAddType(JNIEnv *_env, jobject _this, jint type) +nScriptSetRoot(JNIEnv *_env, jobject _this, jboolean isRoot) { RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); - LOG_API("nScriptCAddType, con(%p), type(%p)", con, (RsType)type); - rsScriptCAddType((RsType)type); + LOG_API("nScriptCSetRoot, con(%p), isRoot(%i)", con, isRoot); + rsScriptSetRoot(isRoot); } +// ----------------------------------- + static void -nScriptCSetRoot(JNIEnv *_env, jobject _this, jboolean isRoot) +nScriptCBegin(JNIEnv *_env, jobject _this) { RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); - LOG_API("nScriptCSetRoot, con(%p), isRoot(%i)", con, isRoot); - rsScriptCSetRoot(isRoot); + LOG_API("nScriptCBegin, con(%p)", con); + rsScriptCBegin(); } static void @@ -1374,10 +1381,10 @@ static JNINativeMethod methods[] = { {"nScriptSetClearDepth", "(IF)V", (void*)nScriptSetClearDepth }, {"nScriptSetClearStencil", "(II)V", (void*)nScriptSetClearStencil }, {"nScriptSetTimeZone", "(I[B)V", (void*)nScriptSetTimeZone }, +{"nScriptSetType", "(ILjava/lang/String;I)V", (void*)nScriptSetType }, +{"nScriptSetRoot", "(Z)V", (void*)nScriptSetRoot }, {"nScriptCBegin", "()V", (void*)nScriptCBegin }, -{"nScriptCAddType", "(I)V", (void*)nScriptCAddType }, -{"nScriptCSetRoot", "(Z)V", (void*)nScriptCSetRoot }, {"nScriptCSetScript", "([BII)V", (void*)nScriptCSetScript }, {"nScriptCCreate", "()I", (void*)nScriptCCreate }, {"nScriptCAddDefineI32", "(Ljava/lang/String;I)V", (void*)nScriptCAddDefineI32 }, |