From 110195fe9ff96255242bfa4df1d15c6a56b140d6 Mon Sep 17 00:00:00 2001 From: Jason Sams Date: Tue, 4 Aug 2009 18:47:46 -0700 Subject: Seperate ProgramVertex from RenderScript.java and merge ProgramVertexAlloc into the ProgramVertex class. --- graphics/java/android/renderscript/Light.java | 9 - .../java/android/renderscript/ProgramFragment.java | 17 +- .../java/android/renderscript/ProgramVertex.java | 190 +++++++++++++++++++++ .../android/renderscript/ProgramVertexAlloc.java | 115 ------------- .../java/android/renderscript/RenderScript.java | 49 ------ 5 files changed, 204 insertions(+), 176 deletions(-) create mode 100644 graphics/java/android/renderscript/ProgramVertex.java delete mode 100644 graphics/java/android/renderscript/ProgramVertexAlloc.java (limited to 'graphics/java') diff --git a/graphics/java/android/renderscript/Light.java b/graphics/java/android/renderscript/Light.java index c9196aa..8067f19 100644 --- a/graphics/java/android/renderscript/Light.java +++ b/graphics/java/android/renderscript/Light.java @@ -16,18 +16,9 @@ package android.renderscript; - -import java.io.IOException; -import java.io.InputStream; - -import android.content.res.Resources; -import android.os.Bundle; import android.util.Config; import android.util.Log; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; - /** * @hide * diff --git a/graphics/java/android/renderscript/ProgramFragment.java b/graphics/java/android/renderscript/ProgramFragment.java index 005fdf6..c228cf2 100644 --- a/graphics/java/android/renderscript/ProgramFragment.java +++ b/graphics/java/android/renderscript/ProgramFragment.java @@ -26,6 +26,8 @@ import android.util.Log; * **/ public class ProgramFragment extends BaseObj { + public static final int MAX_SLOT = 2; + public enum EnvMode { REPLACE (0), MODULATE (1), @@ -48,17 +50,26 @@ public class ProgramFragment extends BaseObj { mID = 0; } - public void bindTexture(Allocation va, int slot) { + public void bindTexture(Allocation va, int slot) + throws IllegalArgumentException { + if((slot < 0) || (slot >= MAX_SLOT)) { + throw new IllegalArgumentException("Slot ID out of range."); + } + mRS.nProgramFragmentBindTexture(mID, slot, va.mID); } - public void bindSampler(Sampler vs, int slot) { + public void bindSampler(Sampler vs, int slot) + throws IllegalArgumentException { + if((slot < 0) || (slot >= MAX_SLOT)) { + throw new IllegalArgumentException("Slot ID out of range."); + } + mRS.nProgramFragmentBindSampler(mID, slot, vs.mID); } public static class Builder { - public static final int MAX_SLOT = 2; RenderScript mRS; Element mIn; Element mOut; diff --git a/graphics/java/android/renderscript/ProgramVertex.java b/graphics/java/android/renderscript/ProgramVertex.java new file mode 100644 index 0000000..a6fdf1f --- /dev/null +++ b/graphics/java/android/renderscript/ProgramVertex.java @@ -0,0 +1,190 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.renderscript; + + +import android.util.Config; +import android.util.Log; + + +/** + * @hide + * + **/ +public class ProgramVertex extends BaseObj { + public static final int MAX_LIGHT = 8; + + ProgramVertex(int id, RenderScript rs) { + super(rs); + mID = id; + } + + public void destroy() { + mRS.nProgramVertexDestroy(mID); + mID = 0; + } + + public void bindAllocation(int slot, MatrixAllocation va) { + mRS.nProgramVertexBindAllocation(mID, slot, va.mAlloc.mID); + } + + + public static class Builder { + RenderScript mRS; + Element mIn; + Element mOut; + Light[] mLights; + int mLightCount; + boolean mTextureMatrixEnable; + + + public Builder(RenderScript rs, Element in, Element out) { + mRS = rs; + mIn = in; + mOut = out; + mLights = new Light[MAX_LIGHT]; + mLightCount = 0; + } + + public void setTextureMatrixEnable(boolean enable) { + mTextureMatrixEnable = enable; + } + + public void addLight(Light l) throws IllegalStateException { + if(mLightCount >= MAX_LIGHT) { + throw new IllegalArgumentException("Max light count exceeded."); + } + mLights[mLightCount] = l; + mLightCount++; + } + + + + static synchronized ProgramVertex internalCreate(RenderScript rs, Builder b) { + int inID = 0; + int outID = 0; + if (b.mIn != null) { + inID = b.mIn.mID; + } + if (b.mOut != null) { + outID = b.mOut.mID; + } + rs.nProgramVertexBegin(inID, outID); + for(int ct=0; ct < b.mLightCount; ct++) { + rs.nProgramVertexAddLight(b.mLights[ct].mID); + } + rs.nProgramVertexSetTextureMatrixEnable(b.mTextureMatrixEnable); + int id = rs.nProgramVertexCreate(); + return new ProgramVertex(id, rs); + } + + public ProgramVertex create() { + return internalCreate(mRS, this); + } + } + + + + public static class MatrixAllocation { + static final int MODELVIEW_OFFSET = 0; + static final int PROJECTION_OFFSET = 16; + static final int TEXTURE_OFFSET = 32; + + Matrix mModel; + Matrix mProjection; + Matrix mTexture; + + public Allocation mAlloc; + + public MatrixAllocation(RenderScript rs) { + mModel = new Matrix(); + mProjection = new Matrix(); + mTexture = new Matrix(); + + mAlloc = Allocation.createSized(rs, Element.USER_FLOAT, 48); + mAlloc.subData1D(MODELVIEW_OFFSET, 16, mModel.mMat); + mAlloc.subData1D(PROJECTION_OFFSET, 16, mProjection.mMat); + mAlloc.subData1D(TEXTURE_OFFSET, 16, mTexture.mMat); + } + + public void destroy() { + mAlloc.destroy(); + mAlloc = null; + } + + public void loadModelview(Matrix m) { + mModel = m; + mAlloc.subData1D(MODELVIEW_OFFSET, 16, m.mMat); + } + + public void loadProjection(Matrix m) { + mProjection = m; + mAlloc.subData1D(PROJECTION_OFFSET, 16, m.mMat); + } + + public void loadTexture(Matrix m) { + mTexture = m; + mAlloc.subData1D(TEXTURE_OFFSET, 16, m.mMat); + } + + public void setupOrthoWindow(int w, int h) { + mProjection.loadOrtho(0,w, h,0, -1,1); + mAlloc.subData1D(PROJECTION_OFFSET, 16, mProjection.mMat); + } + + 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); + } + mAlloc.subData1D(PROJECTION_OFFSET, 16, mProjection.mMat); + } + + public void setupProjectionNormalized(int w, int h) { + // range -1,1 in the narrow axis at z = 0. + Matrix m1 = new Matrix(); + Matrix m2 = new Matrix(); + + 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; + mAlloc.subData1D(PROJECTION_OFFSET, 16, mProjection.mMat); + } + + } + +} + diff --git a/graphics/java/android/renderscript/ProgramVertexAlloc.java b/graphics/java/android/renderscript/ProgramVertexAlloc.java deleted file mode 100644 index 37b037c..0000000 --- a/graphics/java/android/renderscript/ProgramVertexAlloc.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.renderscript; - -import java.lang.Math; - -import android.renderscript.Element; -import android.util.Log; - - -/** - * @hide - * - **/ -public class ProgramVertexAlloc { - public static final int MODELVIEW_OFFSET = 0; - public static final int PROJECTION_OFFSET = 16; - public static final int TEXTURE_OFFSET = 32; - - Matrix mModel; - Matrix mProjection; - Matrix mTexture; - - public Allocation mAlloc; - - public ProgramVertexAlloc(RenderScript rs) { - mModel = new Matrix(); - mProjection = new Matrix(); - mTexture = new Matrix(); - - mAlloc = Allocation.createSized(rs, Element.USER_FLOAT, 48); - mAlloc.subData1D(MODELVIEW_OFFSET, 16, mModel.mMat); - mAlloc.subData1D(PROJECTION_OFFSET, 16, mProjection.mMat); - mAlloc.subData1D(TEXTURE_OFFSET, 16, mTexture.mMat); - } - - public void loadModelview(Matrix m) { - mModel = m; - mAlloc.subData1D(MODELVIEW_OFFSET, 16, m.mMat); - } - - public void loadProjection(Matrix m) { - mProjection = m; - mAlloc.subData1D(PROJECTION_OFFSET, 16, m.mMat); - } - - public void loadTexture(Matrix m) { - mTexture = m; - mAlloc.subData1D(TEXTURE_OFFSET, 16, m.mMat); - } - - public void setupOrthoWindow(int w, int h) { - mProjection.loadOrtho(0,w, h,0, -1,1); - mAlloc.subData1D(PROJECTION_OFFSET, 16, mProjection.mMat); - } - - 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); - } - mAlloc.subData1D(PROJECTION_OFFSET, 16, mProjection.mMat); - } - - public void setupProjectionNormalized(int w, int h) { - // range -1,1 in the narrow axis at z = 0. - Matrix m1 = new Matrix(); - Matrix m2 = new Matrix(); - - 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; - mAlloc.subData1D(PROJECTION_OFFSET, 16, mProjection.mMat); - } - -} - - - - - - diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java index cae80e9..5fb7f08 100644 --- a/graphics/java/android/renderscript/RenderScript.java +++ b/graphics/java/android/renderscript/RenderScript.java @@ -252,55 +252,6 @@ public class RenderScript { } ////////////////////////////////////////////////////////////////////////////////// - // ProgramVertex - - public class ProgramVertex extends BaseObj { - ProgramVertex(int id) { - super(RenderScript.this); - mID = id; - } - - public void destroy() { - nProgramVertexDestroy(mID); - mID = 0; - } - - public void bindAllocation(int slot, Allocation va) { - nProgramVertexBindAllocation(mID, slot, va.mID); - } - } - - public void programVertexBegin(Element in, Element out) { - int inID = 0; - int outID = 0; - if (in != null) { - inID = in.mID; - } - if (out != null) { - outID = out.mID; - } - nProgramVertexBegin(inID, outID); - } - - public void programVertexSetType(int slot, Type t) { - nProgramVertexSetType(slot, t.mID); - } - - public void programVertexSetTextureMatrixEnable(boolean enable) { - nProgramVertexSetTextureMatrixEnable(enable); - } - - public void programVertexAddLight(Light l) { - nProgramVertexAddLight(l.mID); - } - - public ProgramVertex programVertexCreate() { - int id = nProgramVertexCreate(); - return new ProgramVertex(id); - } - - - ////////////////////////////////////////////////////////////////////////////////// // File public class File extends BaseObj { -- cgit v1.1