summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'graphics')
-rw-r--r--graphics/java/android/renderscript/ProgramFragment.java9
-rw-r--r--graphics/java/android/renderscript/ProgramVertex.java15
-rw-r--r--graphics/java/android/renderscript/RenderScript.java2
-rw-r--r--graphics/jni/android_renderscript_RenderScript.cpp24
4 files changed, 47 insertions, 3 deletions
diff --git a/graphics/java/android/renderscript/ProgramFragment.java b/graphics/java/android/renderscript/ProgramFragment.java
index 1a72578..2b2557d 100644
--- a/graphics/java/android/renderscript/ProgramFragment.java
+++ b/graphics/java/android/renderscript/ProgramFragment.java
@@ -71,6 +71,7 @@ public class ProgramFragment extends BaseObj {
Element mIn;
Element mOut;
boolean mPointSpriteEnable;
+ String mShader;
private class Slot {
Type mType;
@@ -94,6 +95,10 @@ public class ProgramFragment extends BaseObj {
}
}
+ public void setShader(String s) {
+ mShader = s;
+ }
+
public void setType(int slot, Type t)
throws IllegalArgumentException {
if((slot < 0) || (slot >= MAX_SLOT)) {
@@ -146,6 +151,10 @@ public class ProgramFragment extends BaseObj {
}
}
+ if (b.mShader != null) {
+ rs.nProgramFragmentSetShader(b.mShader);
+ }
+
int id = rs.nProgramFragmentCreate();
return new ProgramFragment(id, rs);
}
diff --git a/graphics/java/android/renderscript/ProgramVertex.java b/graphics/java/android/renderscript/ProgramVertex.java
index ba97d5b..e284984 100644
--- a/graphics/java/android/renderscript/ProgramVertex.java
+++ b/graphics/java/android/renderscript/ProgramVertex.java
@@ -46,6 +46,7 @@ public class ProgramVertex extends BaseObj {
Light[] mLights;
int mLightCount;
boolean mTextureMatrixEnable;
+ String mShader;
public Builder(RenderScript rs, Element in, Element out) {
@@ -60,6 +61,10 @@ public class ProgramVertex extends BaseObj {
mTextureMatrixEnable = enable;
}
+ public void setShader(String s) {
+ mShader = s;
+ }
+
public void addLight(Light l) throws IllegalStateException {
if(mLightCount >= MAX_LIGHT) {
throw new IllegalArgumentException("Max light count exceeded.");
@@ -80,10 +85,14 @@ public class ProgramVertex extends BaseObj {
outID = b.mOut.mID;
}
rs.nProgramVertexBegin(inID, outID);
- for(int ct=0; ct < b.mLightCount; ct++) {
- rs.nProgramVertexAddLight(b.mLights[ct].mID);
+ if (b.mShader != null) {
+ rs.nProgramVertexSetShader(b.mShader);
+ } else {
+ for(int ct=0; ct < b.mLightCount; ct++) {
+ rs.nProgramVertexAddLight(b.mLights[ct].mID);
+ }
+ rs.nProgramVertexSetTextureMatrixEnable(b.mTextureMatrixEnable);
}
- rs.nProgramVertexSetTextureMatrixEnable(b.mTextureMatrixEnable);
int id = rs.nProgramVertexCreate();
return new ProgramVertex(id, rs);
}
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 0d8b675..c8213c8 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -171,12 +171,14 @@ public class RenderScript {
native void nProgramFragmentBindTexture(int vpf, int slot, int a);
native void nProgramFragmentBindSampler(int vpf, int slot, int s);
native void nProgramFragmentSetSlot(int slot, boolean enable, int env, int vt);
+ native void nProgramFragmentSetShader(String txt);
native int nProgramFragmentCreate();
native void nProgramVertexBindAllocation(int pv, int mID);
native void nProgramVertexBegin(int inID, int outID);
native void nProgramVertexSetTextureMatrixEnable(boolean enable);
native void nProgramVertexAddLight(int id);
+ native void nProgramVertexSetShader(String txt);
native int nProgramVertexCreate();
native void nLightBegin();
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index af3bc74..ea5feb8 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -1053,9 +1053,20 @@ nProgramFragmentStoreCreate(JNIEnv *_env, jobject _this)
return (jint)rsProgramFragmentStoreCreate(con);
}
+
// ---------------------------------------------------------------------------
static void
+nProgramFragmentSetShader(JNIEnv *_env, jobject _this, jstring name)
+{
+ RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+ const char* n = _env->GetStringUTFChars(name, NULL);
+ LOG_API("nProgramFragmentSetShader, con(%p)", con);
+ rsProgramFragmentSetShader(con, n, _env->GetStringUTFLength(name));
+ _env->ReleaseStringUTFChars(name, n);
+}
+
+static void
nProgramFragmentBegin(JNIEnv *_env, jobject _this, jint in, jint out, jboolean pointSpriteEnable)
{
RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
@@ -1098,6 +1109,17 @@ nProgramFragmentCreate(JNIEnv *_env, jobject _this, jint slot, jboolean enable)
// ---------------------------------------------------------------------------
static void
+nProgramVertexSetShader(JNIEnv *_env, jobject _this, jstring name)
+{
+ RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+ const char* n = _env->GetStringUTFChars(name, NULL);
+ LOG_API("nProgramVertexSetShader, con(%p)", con);
+ rsProgramVertexSetShader(con, n, _env->GetStringUTFLength(name));
+ _env->ReleaseStringUTFChars(name, n);
+}
+
+
+static void
nProgramVertexBegin(JNIEnv *_env, jobject _this, jint in, jint out)
{
RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
@@ -1436,6 +1458,7 @@ static JNINativeMethod methods[] = {
{"nProgramFragmentBindTexture", "(III)V", (void*)nProgramFragmentBindTexture },
{"nProgramFragmentBindSampler", "(III)V", (void*)nProgramFragmentBindSampler },
{"nProgramFragmentSetSlot", "(IZII)V", (void*)nProgramFragmentSetSlot },
+{"nProgramFragmentSetShader", "(Ljava/lang/String;)V", (void*)nProgramFragmentSetShader },
{"nProgramFragmentCreate", "()I", (void*)nProgramFragmentCreate },
{"nProgramRasterCreate", "(IIZZZ)I", (void*)nProgramRasterCreate },
@@ -1446,6 +1469,7 @@ static JNINativeMethod methods[] = {
{"nProgramVertexBegin", "(II)V", (void*)nProgramVertexBegin },
{"nProgramVertexSetTextureMatrixEnable", "(Z)V", (void*)nProgramVertexSetTextureMatrixEnable },
{"nProgramVertexAddLight", "(I)V", (void*)nProgramVertexAddLight },
+{"nProgramVertexSetShader", "(Ljava/lang/String;)V", (void*)nProgramVertexSetShader },
{"nProgramVertexCreate", "()I", (void*)nProgramVertexCreate },
{"nLightBegin", "()V", (void*)nLightBegin },