Split ProgramFragment and ProgramStore from RenderScript.java. Update Element and Type to new cached builder for easier app developement.
diff --git a/graphics/java/android/renderscript/Type.java b/graphics/java/android/renderscript/Type.java
index 86932c4..4078c8a 100644
--- a/graphics/java/android/renderscript/Type.java
+++ b/graphics/java/android/renderscript/Type.java
@@ -45,23 +45,47 @@
public static class Builder {
RenderScript mRS;
- boolean mActive = true;
+ Entry[] mEntries;
+ int mEntryCount;
+ Element mElement;
- Builder(RenderScript rs) {
- mRS = rs;
+ class Entry {
+ Dimension mDim;
+ int mValue;
}
- public void begin(Element e) {
- mRS.nTypeBegin(e.mID);
+ public Builder(RenderScript rs, Element e) {
+ mRS = rs;
+ mEntries = new Entry[4];
+ mElement = e;
}
public void add(Dimension d, int value) {
- mRS.nTypeAdd(d.mID, value);
+ if(mEntries.length >= mEntryCount) {
+ Entry[] en = new Entry[mEntryCount + 8];
+ for(int ct=0; ct < mEntries.length; ct++) {
+ en[ct] = mEntries[ct];
+ }
+ mEntries = en;
+ }
+ mEntries[mEntryCount] = new Entry();
+ mEntries[mEntryCount].mDim = d;
+ mEntries[mEntryCount].mValue = value;
+ mEntryCount++;
+ }
+
+ static synchronized Type internalCreate(RenderScript rs, Builder b) {
+ rs.nTypeBegin(b.mElement.mID);
+ for (int ct=0; ct < b.mEntryCount; ct++) {
+ Entry en = b.mEntries[ct];
+ rs.nTypeAdd(en.mDim.mID, en.mValue);
+ }
+ int id = rs.nTypeCreate();
+ return new Type(id, rs);
}
public Type create() {
- int id = mRS.nTypeCreate();
- return new Type(id, mRS);
+ return internalCreate(mRS, this);
}
}