summaryrefslogtreecommitdiffstats
path: root/graphics/java
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2009-12-15 13:27:04 -0800
committerJason Sams <rjsams@android.com>2009-12-15 13:27:04 -0800
commit7e5ab3b177b10fee304d011b3a4b9ee03e2b18b5 (patch)
tree87e037e70a81ed8d250eff1c20ae8f799c62c7c6 /graphics/java
parentb686ec70445226d3f865b6e838b3f2cdf034ca31 (diff)
downloadframeworks_base-7e5ab3b177b10fee304d011b3a4b9ee03e2b18b5.zip
frameworks_base-7e5ab3b177b10fee304d011b3a4b9ee03e2b18b5.tar.gz
frameworks_base-7e5ab3b177b10fee304d011b3a4b9ee03e2b18b5.tar.bz2
Continue es2 shader dev
Conflicts: graphics/java/android/renderscript/Program.java graphics/java/android/renderscript/ProgramVertex.java
Diffstat (limited to 'graphics/java')
-rw-r--r--graphics/java/android/renderscript/Program.java14
-rw-r--r--graphics/java/android/renderscript/ProgramFragment.java36
-rw-r--r--graphics/java/android/renderscript/ProgramVertex.java6
-rw-r--r--graphics/java/android/renderscript/RenderScript.java1
4 files changed, 44 insertions, 13 deletions
diff --git a/graphics/java/android/renderscript/Program.java b/graphics/java/android/renderscript/Program.java
index bf6aac7..88b87b0 100644
--- a/graphics/java/android/renderscript/Program.java
+++ b/graphics/java/android/renderscript/Program.java
@@ -29,10 +29,12 @@ public class Program extends BaseObj {
public static final int MAX_INPUT = 8;
public static final int MAX_OUTPUT = 8;
public static final int MAX_CONSTANT = 8;
+ public static final int MAX_TEXTURE = 8;
Element mInputs[];
Element mOutputs[];
Type mConstants[];
+ int mTextureCount;
String mShader;
Program(int id, RenderScript rs) {
@@ -65,6 +67,7 @@ public class Program extends BaseObj {
mInputCount = 0;
mOutputCount = 0;
mConstantCount = 0;
+ mTextureCount = 0;
}
public void setShader(String s) {
@@ -95,12 +98,12 @@ public class Program extends BaseObj {
mConstants[mConstantCount++] = t;
}
- public void addTexture(Type t) throws IllegalStateException {
+ public void setTextureCount(int count) throws IllegalArgumentException {
// Should check for consistant and non-conflicting names...
- if(mTextureCount >= MAX_CONSTANT) {
- throw new IllegalArgumentException("Max input count exceeded.");
+ if(count >= MAX_CONSTANT) {
+ throw new IllegalArgumentException("Max texture count exceeded.");
}
- mTextures[mTextureCount++] = t;
+ mTextureCount = count;
}
protected void initProgram(Program p) {
@@ -110,8 +113,7 @@ public class Program extends BaseObj {
System.arraycopy(mOutputs, 0, p.mOutputs, 0, mOutputCount);
p.mConstants = new Type[mConstantCount];
System.arraycopy(mConstants, 0, p.mConstants, 0, mConstantCount);
- p.mTextures = new Type[mTextureCount];
- System.arraycopy(mTextures, 0, p.mTextures, 0, mTextureCount);
+ p.mTextureCount = mTextureCount;
}
}
diff --git a/graphics/java/android/renderscript/ProgramFragment.java b/graphics/java/android/renderscript/ProgramFragment.java
index 2b2557d..f150043 100644
--- a/graphics/java/android/renderscript/ProgramFragment.java
+++ b/graphics/java/android/renderscript/ProgramFragment.java
@@ -25,7 +25,7 @@ import android.util.Log;
* @hide
*
**/
-public class ProgramFragment extends BaseObj {
+public class ProgramFragment extends Program {
public static final int MAX_SLOT = 2;
public enum EnvMode {
@@ -41,8 +41,7 @@ public class ProgramFragment extends BaseObj {
ProgramFragment(int id, RenderScript rs) {
- super(rs);
- mID = id;
+ super(id, rs);
}
public void bindTexture(Allocation va, int slot)
@@ -65,6 +64,37 @@ public class ProgramFragment extends BaseObj {
mRS.nProgramFragmentBindSampler(mID, slot, vs.mID);
}
+ public static class ShaderBuilder extends BaseProgramBuilder {
+ public ShaderBuilder(RenderScript rs) {
+ super(rs);
+ }
+
+ public ProgramFragment create() {
+ mRS.validate();
+ int[] tmp = new int[(mInputCount + mOutputCount + mConstantCount + 1) * 2];
+ int idx = 0;
+
+ for (int i=0; i < mInputCount; i++) {
+ tmp[idx++] = 0;
+ tmp[idx++] = mInputs[i].mID;
+ }
+ for (int i=0; i < mOutputCount; i++) {
+ tmp[idx++] = 1;
+ tmp[idx++] = mOutputs[i].mID;
+ }
+ for (int i=0; i < mConstantCount; i++) {
+ tmp[idx++] = 2;
+ tmp[idx++] = mConstants[i].mID;
+ }
+ tmp[idx++] = 3;
+ tmp[idx++] = mTextureCount;
+
+ int id = mRS.nProgramFragmentCreate2(mShader, tmp);
+ ProgramFragment pf = new ProgramFragment(id, mRS);
+ initProgram(pf);
+ return pf;
+ }
+ }
public static class Builder {
RenderScript mRS;
diff --git a/graphics/java/android/renderscript/ProgramVertex.java b/graphics/java/android/renderscript/ProgramVertex.java
index 06cfc93..101f030 100644
--- a/graphics/java/android/renderscript/ProgramVertex.java
+++ b/graphics/java/android/renderscript/ProgramVertex.java
@@ -79,10 +79,8 @@ public class ProgramVertex extends Program {
tmp[idx++] = 2;
tmp[idx++] = mConstants[i].mID;
}
- for (int i=0; i < mTextureCount; i++) {
- tmp[idx++] = 3;
- tmp[idx++] = mTextures[i].mID;
- }
+ tmp[idx++] = 3;
+ tmp[idx++] = mTextureCount;
int id = mRS.nProgramVertexCreate2(mShader, tmp);
ProgramVertex pv = new ProgramVertex(id, mRS);
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index 75bd3d0..0e4d5b0 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -175,6 +175,7 @@ public class RenderScript {
native void nProgramFragmentSetSlot(int slot, boolean enable, int env, int vt);
native void nProgramFragmentSetShader(String txt);
native int nProgramFragmentCreate();
+ native int nProgramFragmentCreate2(String shader, int[] params);
native int nProgramVertexCreate(boolean texMat);
native int nProgramVertexCreate2(String shader, int[] params);