diff options
author | Joe Onorato <joeo@android.com> | 2009-08-09 22:57:44 -0700 |
---|---|---|
committer | Joe Onorato <joeo@android.com> | 2009-08-09 22:58:20 -0700 |
commit | d7b3774da62d3c70cc7e8cf549967a1c823501e6 (patch) | |
tree | 42fa1d36c3a0d2d07850352758bfc22650d60308 /graphics | |
parent | 3370ec9e54c373ccca3c4f545b4c96f9419a081d (diff) | |
download | frameworks_base-d7b3774da62d3c70cc7e8cf549967a1c823501e6.zip frameworks_base-d7b3774da62d3c70cc7e8cf549967a1c823501e6.tar.gz frameworks_base-d7b3774da62d3c70cc7e8cf549967a1c823501e6.tar.bz2 |
Let java put #defines into renderscript
Diffstat (limited to 'graphics')
-rw-r--r-- | graphics/java/android/renderscript/RenderScript.java | 4 | ||||
-rw-r--r-- | graphics/java/android/renderscript/ScriptC.java | 33 | ||||
-rw-r--r-- | graphics/jni/android_renderscript_RenderScript.cpp | 43 |
3 files changed, 71 insertions, 9 deletions
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java index 8fc5ad5..9840bbb 100644 --- a/graphics/java/android/renderscript/RenderScript.java +++ b/graphics/java/android/renderscript/RenderScript.java @@ -68,6 +68,8 @@ public class RenderScript { native void nContextBindProgramFragmentStore(int pfs); native void nContextBindProgramFragment(int pf); native void nContextBindProgramVertex(int pf); + native void nContextAddDefineI32(String name, int value); + native void nContextAddDefineF(String name, float value); native void nAssignName(int obj, byte[] name); native int nFileOpen(byte[] name); @@ -139,6 +141,8 @@ public class RenderScript { native void nScriptCSetRoot(boolean isRoot); native void nScriptCSetScript(byte[] script, int offset, int length); native int nScriptCCreate(); + native void nScriptCAddDefineI32(String name, int value); + native void nScriptCAddDefineF(String name, float value); native void nSamplerDestroy(int sampler); native void nSamplerBegin(); diff --git a/graphics/java/android/renderscript/ScriptC.java b/graphics/java/android/renderscript/ScriptC.java index 0592f5d..0f231d6 100644 --- a/graphics/java/android/renderscript/ScriptC.java +++ b/graphics/java/android/renderscript/ScriptC.java @@ -16,11 +16,13 @@ package android.renderscript; -import java.io.IOException; -import java.io.InputStream; - import android.content.res.Resources; +import android.util.Log; +import java.io.IOException; +import java.io.InputStream; +import java.util.Map.Entry; +import java.util.HashMap; /** * @hide @@ -30,12 +32,11 @@ public class ScriptC extends Script { super(id, rs); } - - - public static class Builder extends Script.Builder { byte[] mProgram; int mProgramLength; + HashMap<String,Integer> mIntDefines = new HashMap(); + HashMap<String,Float> mFloatDefines = new HashMap(); public Builder(RenderScript rs) { super(rs); @@ -63,7 +64,7 @@ public class ScriptC extends Script { } } - public void setScript(InputStream is) throws IOException { + public void setScript(InputStream is) throws IOException { byte[] buf = new byte[1024]; int currentPos = 0; while(true) { @@ -88,19 +89,33 @@ public class ScriptC extends Script { b.mRS.nScriptCBegin(); b.transferCreate(); - b.mRS.nScriptCSetScript(b.mProgram, 0, b.mProgramLength); + for (Entry<String,Integer> e: b.mIntDefines.entrySet()) { + b.mRS.nScriptCAddDefineI32(e.getKey(), e.getValue().intValue()); + } + for (Entry<String,Float> e: b.mFloatDefines.entrySet()) { + b.mRS.nScriptCAddDefineF(e.getKey(), e.getValue().floatValue()); + } + b.mRS.nScriptCSetScript(b.mProgram, 0, b.mProgramLength); int id = b.mRS.nScriptCCreate(); ScriptC obj = new ScriptC(id, b.mRS); b.transferObject(obj); + return obj; } + public void addDefine(String name, int value) { + mIntDefines.put(name, value); + } + + public void addDefine(String name, float value) { + mFloatDefines.put(name, value); + } + public ScriptC create() { return internalCreate(this); } } - } diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp index 06525fc..2c3a6cb 100644 --- a/graphics/jni/android_renderscript_RenderScript.cpp +++ b/graphics/jni/android_renderscript_RenderScript.cpp @@ -765,6 +765,26 @@ nScriptCCreate(JNIEnv *_env, jobject _this) return (jint)rsScriptCCreate(); } +static void +nScriptCAddDefineI32(JNIEnv *_env, jobject _this, jstring name, jint value) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + const char* n = _env->GetStringUTFChars(name, NULL); + LOG_API("nScriptCAddDefineI32, con(%p) name(%s) value(%d)", con, n, value); + rsScriptCSetDefineI32(n, value); + _env->ReleaseStringUTFChars(name, n); +} + +static void +nScriptCAddDefineF(JNIEnv *_env, jobject _this, jstring name, jfloat value) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + const char* n = _env->GetStringUTFChars(name, NULL); + LOG_API("nScriptCAddDefineF, con(%p) name(%s) value(%f)", con, n, value); + rsScriptCSetDefineF(n, value); + _env->ReleaseStringUTFChars(name, n); +} + // --------------------------------------------------------------------------- static void @@ -985,6 +1005,27 @@ nContextBindProgramVertex(JNIEnv *_env, jobject _this, jint pf) rsContextBindProgramVertex((RsProgramVertex)pf); } +static void +nContextAddDefineI32(JNIEnv *_env, jobject _this, jstring name, jint value) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + const char* n = _env->GetStringUTFChars(name, NULL); + LOG_API("nScriptCAddDefineI32, con(%p) name(%s) value(%d)", con, n, value); + rsContextSetDefineI32(n, value); + _env->ReleaseStringUTFChars(name, n); +} + +static void +nContextAddDefineF(JNIEnv *_env, jobject _this, jstring name, jfloat value) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + const char* n = _env->GetStringUTFChars(name, NULL); + LOG_API("nScriptCAddDefineF, con(%p) name(%s) value(%f)", con, n, value); + rsContextSetDefineF(n, value); + _env->ReleaseStringUTFChars(name, n); +} + + // --------------------------------------------------------------------------- static void @@ -1197,6 +1238,8 @@ static JNINativeMethod methods[] = { {"nScriptCSetRoot", "(Z)V", (void*)nScriptCSetRoot }, {"nScriptCSetScript", "([BII)V", (void*)nScriptCSetScript }, {"nScriptCCreate", "()I", (void*)nScriptCCreate }, +{"nScriptCAddDefineI32", "(Ljava/lang/String;I)V", (void*)nScriptCAddDefineI32 }, +{"nScriptCAddDefineF", "(Ljava/lang/String;F)V", (void*)nScriptCAddDefineF }, {"nProgramFragmentStoreBegin", "(II)V", (void*)nProgramFragmentStoreBegin }, {"nProgramFragmentStoreDepthFunc", "(I)V", (void*)nProgramFragmentStoreDepthFunc }, |