summaryrefslogtreecommitdiffstats
path: root/graphics/java/android/renderscript/ProgramVertex.java
diff options
context:
space:
mode:
authorAlex Sakhartchouk <alexst@google.com>2010-12-21 14:42:26 -0800
committerAlex Sakhartchouk <alexst@google.com>2010-12-21 14:57:04 -0800
commitb4d7bb6872f523b4318144202e119766ed9054ed (patch)
tree2e7e18e9864c7c9398bbce8f0bc227f147b648f4 /graphics/java/android/renderscript/ProgramVertex.java
parent1528d8f47cc6f0e0d5c9f905f82d15a35ce1bafb (diff)
downloadframeworks_base-b4d7bb6872f523b4318144202e119766ed9054ed.zip
frameworks_base-b4d7bb6872f523b4318144202e119766ed9054ed.tar.gz
frameworks_base-b4d7bb6872f523b4318144202e119766ed9054ed.tar.bz2
API cleanup for renderscript. This will be a multiproject commit.
Change-Id: Ida62d3a155285a20725be9daa62217faef1c3734
Diffstat (limited to 'graphics/java/android/renderscript/ProgramVertex.java')
-rw-r--r--graphics/java/android/renderscript/ProgramVertex.java184
1 files changed, 14 insertions, 170 deletions
diff --git a/graphics/java/android/renderscript/ProgramVertex.java b/graphics/java/android/renderscript/ProgramVertex.java
index 5d41f63..954ac9a 100644
--- a/graphics/java/android/renderscript/ProgramVertex.java
+++ b/graphics/java/android/renderscript/ProgramVertex.java
@@ -27,23 +27,28 @@ import android.util.Log;
*
**/
public class ProgramVertex extends Program {
- public static final int MAX_LIGHT = 8;
-
ProgramVertex(int id, RenderScript rs) {
super(id, rs);
}
- public void bindAllocation(MatrixAllocation va) {
- mRS.validate();
- bindConstants(va.mAlloc, 0);
- }
-
- public static class ShaderBuilder extends BaseProgramBuilder {
- public ShaderBuilder(RenderScript rs) {
+ public static class Builder extends BaseProgramBuilder {
+ public Builder(RenderScript rs) {
super(rs);
}
+ public Builder addInput(Element e) throws IllegalStateException {
+ // Should check for consistant and non-conflicting names...
+ if(mInputCount >= MAX_INPUT) {
+ throw new RSIllegalArgumentException("Max input count exceeded.");
+ }
+ if (e.isComplex()) {
+ throw new RSIllegalArgumentException("Complex elements not allowed.");
+ }
+ mInputs[mInputCount++] = e;
+ return this;
+ }
+
public ProgramVertex create() {
mRS.validate();
int[] tmp = new int[(mInputCount + mOutputCount + mConstantCount + mTextureCount) * 2];
@@ -73,165 +78,4 @@ public class ProgramVertex extends Program {
}
}
- public static class Builder extends ShaderBuilder {
- boolean mTextureMatrixEnable;
-
- public Builder(RenderScript rs, Element in, Element out) {
- super(rs);
- }
- public Builder(RenderScript rs) {
- super(rs);
- }
-
- public Builder setTextureMatrixEnable(boolean enable) {
- mTextureMatrixEnable = enable;
- return this;
- }
- static Type getConstantInputType(RenderScript rs) {
- Element.Builder b = new Element.Builder(rs);
- b.add(Element.MATRIX4X4(rs), "MV");
- b.add(Element.MATRIX4X4(rs), "P");
- b.add(Element.MATRIX4X4(rs), "TexMatrix");
- b.add(Element.MATRIX4X4(rs), "MVP");
-
- Type.Builder typeBuilder = new Type.Builder(rs, b.create());
- typeBuilder.setX(1);
- return typeBuilder.create();
- }
-
- private void buildShaderString() {
-
- mShader = "//rs_shader_internal\n";
- mShader += "varying vec4 varColor;\n";
- mShader += "varying vec2 varTex0;\n";
-
- mShader += "void main() {\n";
- mShader += " gl_Position = UNI_MVP * ATTRIB_position;\n";
- mShader += " gl_PointSize = 1.0;\n";
-
- mShader += " varColor = ATTRIB_color;\n";
- if (mTextureMatrixEnable) {
- mShader += " varTex0 = (UNI_TexMatrix * vec4(ATTRIB_texture0, 0.0, 1.0)).xy;\n";
- } else {
- mShader += " varTex0 = ATTRIB_texture0;\n";
- }
- mShader += "}\n";
- }
-
- @Override
- public ProgramVertex create() {
- buildShaderString();
-
- addConstant(getConstantInputType(mRS));
-
- Element.Builder b = new Element.Builder(mRS);
- b.add(Element.F32_4(mRS), "position");
- b.add(Element.F32_4(mRS), "color");
- b.add(Element.F32_3(mRS), "normal");
- b.add(Element.F32_2(mRS), "texture0");
- addInput(b.create());
-
- return super.create();
- }
- }
-
-
-
- public static class MatrixAllocation {
- static final int MODELVIEW_OFFSET = 0;
- static final int PROJECTION_OFFSET = 16;
- static final int TEXTURE_OFFSET = 32;
-
- Matrix4f mModel;
- Matrix4f mProjection;
- Matrix4f mTexture;
-
- public Allocation mAlloc;
- private FieldPacker mIOBuffer;
-
- public MatrixAllocation(RenderScript rs) {
- Type constInputType = ProgramVertex.Builder.getConstantInputType(rs);
- mAlloc = Allocation.createTyped(rs, constInputType);
- int bufferSize = constInputType.getElement().getSizeBytes()*
- constInputType.getCount();
- mIOBuffer = new FieldPacker(bufferSize);
- loadModelview(new Matrix4f());
- loadProjection(new Matrix4f());
- loadTexture(new Matrix4f());
- }
-
- public void destroy() {
- mAlloc.destroy();
- mAlloc = null;
- }
-
- private void addToBuffer(int offset, Matrix4f m) {
- mIOBuffer.reset(offset);
- for(int i = 0; i < 16; i ++) {
- mIOBuffer.addF32(m.mMat[i]);
- }
- mAlloc.copyFrom(mIOBuffer.getData());
- }
-
- public void loadModelview(Matrix4f m) {
- mModel = m;
- addToBuffer(MODELVIEW_OFFSET*4, m);
- }
-
- public void loadProjection(Matrix4f m) {
- mProjection = m;
- addToBuffer(PROJECTION_OFFSET*4, m);
- }
-
- public void loadTexture(Matrix4f m) {
- mTexture = m;
- addToBuffer(TEXTURE_OFFSET*4, m);
- }
-
- public void setupOrthoWindow(int w, int h) {
- mProjection.loadOrtho(0,w, h,0, -1,1);
- addToBuffer(PROJECTION_OFFSET*4, mProjection);
- }
-
- public void setupOrthoNormalized(int w, int h) {
- // range -1,1 in the narrow axis.
- if(w > h) {
- float aspect = ((float)w) / h;
- mProjection.loadOrtho(-aspect,aspect, -1,1, -1,1);
- } else {
- float aspect = ((float)h) / w;
- mProjection.loadOrtho(-1,1, -aspect,aspect, -1,1);
- }
- addToBuffer(PROJECTION_OFFSET*4, mProjection);
- }
-
- public void setupProjectionNormalized(int w, int h) {
- // range -1,1 in the narrow axis at z = 0.
- Matrix4f m1 = new Matrix4f();
- Matrix4f m2 = new Matrix4f();
-
- if(w > h) {
- float aspect = ((float)w) / h;
- m1.loadFrustum(-aspect,aspect, -1,1, 1,100);
- } else {
- float aspect = ((float)h) / w;
- m1.loadFrustum(-1,1, -aspect,aspect, 1,100);
- }
-
- m2.loadRotate(180, 0, 1, 0);
- m1.loadMultiply(m1, m2);
-
- m2.loadScale(-2, 2, 1);
- m1.loadMultiply(m1, m2);
-
- m2.loadTranslate(0, 0, 2);
- m1.loadMultiply(m1, m2);
-
- mProjection = m1;
- addToBuffer(PROJECTION_OFFSET*4, mProjection);
- }
-
- }
-
}
-