summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authorJoe Onorato <joeo@android.com>2009-08-09 22:57:44 -0700
committerJoe Onorato <joeo@android.com>2009-08-09 22:58:20 -0700
commitd7b3774da62d3c70cc7e8cf549967a1c823501e6 (patch)
tree42fa1d36c3a0d2d07850352758bfc22650d60308 /graphics
parent3370ec9e54c373ccca3c4f545b4c96f9419a081d (diff)
downloadframeworks_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.java4
-rw-r--r--graphics/java/android/renderscript/ScriptC.java33
-rw-r--r--graphics/jni/android_renderscript_RenderScript.cpp43
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 },