diff options
author | Jason Sams <rjsams@android.com> | 2009-12-15 13:27:04 -0800 |
---|---|---|
committer | Jason Sams <rjsams@android.com> | 2009-12-15 13:27:04 -0800 |
commit | 7e5ab3b177b10fee304d011b3a4b9ee03e2b18b5 (patch) | |
tree | 87e037e70a81ed8d250eff1c20ae8f799c62c7c6 /graphics/java | |
parent | b686ec70445226d3f865b6e838b3f2cdf034ca31 (diff) | |
download | frameworks_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')
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); |