summaryrefslogtreecommitdiffstats
path: root/graphics/java/android/renderscript/Element.java
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/java/android/renderscript/Element.java')
-rw-r--r--graphics/java/android/renderscript/Element.java122
1 files changed, 95 insertions, 27 deletions
diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java
index aeec739..0ca112c 100644
--- a/graphics/java/android/renderscript/Element.java
+++ b/graphics/java/android/renderscript/Element.java
@@ -25,30 +25,31 @@ import java.lang.reflect.Field;
public class Element extends BaseObj {
final int mPredefinedID;
final boolean mIsPredefined;
-
- public static final Element USER_U8 = new Element(0);
- public static final Element USER_I8 = new Element(1);
- public static final Element USER_U16 = new Element(2);
- public static final Element USER_I16 = new Element(3);
- public static final Element USER_U32 = new Element(4);
- public static final Element USER_I32 = new Element(5);
- public static final Element USER_FLOAT = new Element(6);
-
- public static final Element A_8 = new Element(7);
- public static final Element RGB_565 = new Element(8);
- public static final Element RGB_888 = new Element(11);
- public static final Element RGBA_5551 = new Element(9);
- public static final Element RGBA_4444 = new Element(10);
- public static final Element RGBA_8888 = new Element(12);
-
- public static final Element INDEX_16 = new Element(13);
- public static final Element INDEX_32 = new Element(14);
- public static final Element XY_F32 = new Element(15);
- public static final Element XYZ_F32 = new Element(16);
- public static final Element ST_XY_F32 = new Element(17);
- public static final Element ST_XYZ_F32 = new Element(18);
- public static final Element NORM_XYZ_F32 = new Element(19);
- public static final Element NORM_ST_XYZ_F32 = new Element(20);
+ final int mSize;
+
+ public static final Element USER_U8 = new Element(0, 1);
+ public static final Element USER_I8 = new Element(1, 1);
+ public static final Element USER_U16 = new Element(2, 2);
+ public static final Element USER_I16 = new Element(3, 2);
+ public static final Element USER_U32 = new Element(4, 4);
+ public static final Element USER_I32 = new Element(5, 4);
+ public static final Element USER_FLOAT = new Element(6, 4);
+
+ public static final Element A_8 = new Element(7, 1);
+ public static final Element RGB_565 = new Element(8, 2);
+ public static final Element RGB_888 = new Element(11, 2);
+ public static final Element RGBA_5551 = new Element(9, 2);
+ public static final Element RGBA_4444 = new Element(10, 2);
+ public static final Element RGBA_8888 = new Element(12, 4);
+
+ public static final Element INDEX_16 = new Element(13, 2);
+ public static final Element INDEX_32 = new Element(14, 2);
+ public static final Element XY_F32 = new Element(15, 8);
+ public static final Element XYZ_F32 = new Element(16, 12);
+ public static final Element ST_XY_F32 = new Element(17, 16);
+ public static final Element ST_XYZ_F32 = new Element(18, 20);
+ public static final Element NORM_XYZ_F32 = new Element(19, 24);
+ public static final Element NORM_ST_XYZ_F32 = new Element(20, 32);
void initPredef(RenderScript rs) {
mID = rs.nElementGetPredefined(mPredefinedID);
@@ -121,18 +122,20 @@ public class Element extends BaseObj {
}
- Element(int predef) {
+ Element(int predef, int size) {
super(null);
mID = 0;
mPredefinedID = predef;
mIsPredefined = true;
+ mSize = size;
}
- Element(int id, RenderScript rs) {
+ Element(int id, RenderScript rs, int size) {
super(rs);
mID = id;
mPredefinedID = 0;
mIsPredefined = false;
+ mSize = size;
}
public void destroy() throws IllegalStateException {
@@ -168,6 +171,7 @@ public class Element extends BaseObj {
RenderScript mRS;
Entry[] mEntries;
int mEntryCount;
+ int mSizeBits;
private class Entry {
Element mElement;
@@ -182,6 +186,7 @@ public class Element extends BaseObj {
mRS = rs;
mEntryCount = 0;
mEntries = new Entry[8];
+ mSizeBits = 0;
}
void addEntry(Entry e) {
@@ -201,6 +206,7 @@ public class Element extends BaseObj {
Entry en = new Entry();
en.mElement = e;
addEntry(en);
+ mSizeBits += e.mSize * 8;
return this;
}
@@ -211,6 +217,7 @@ public class Element extends BaseObj {
en.mIsNormalized = isNormalized;
en.mBits = bits;
en.mName = name;
+ mSizeBits += bits;
addEntry(en);
return this;
}
@@ -236,6 +243,12 @@ public class Element extends BaseObj {
return this;
}
+ public Builder addFloatXY(String prefix) {
+ add(DataType.FLOAT, DataKind.X, false, 32, prefix + "X");
+ add(DataType.FLOAT, DataKind.Y, false, 32, prefix + "Y");
+ return this;
+ }
+
public Builder addFloatXYZ() {
add(DataType.FLOAT, DataKind.X, false, 32, null);
add(DataType.FLOAT, DataKind.Y, false, 32, null);
@@ -243,17 +256,49 @@ public class Element extends BaseObj {
return this;
}
+ public Builder addFloatXYZ(String prefix) {
+ add(DataType.FLOAT, DataKind.X, false, 32, prefix + "X");
+ add(DataType.FLOAT, DataKind.Y, false, 32, prefix + "Y");
+ add(DataType.FLOAT, DataKind.Z, false, 32, prefix + "Z");
+ return this;
+ }
+
public Builder addFloatST() {
add(DataType.FLOAT, DataKind.S, false, 32, null);
add(DataType.FLOAT, DataKind.T, false, 32, null);
return this;
}
+ public Builder addFloatST(String prefix) {
+ add(DataType.FLOAT, DataKind.S, false, 32, prefix + "S");
+ add(DataType.FLOAT, DataKind.T, false, 32, prefix + "T");
+ return this;
+ }
+
+ public Builder addFloatNorm() {
+ add(DataType.FLOAT, DataKind.NX, false, 32, null);
+ add(DataType.FLOAT, DataKind.NY, false, 32, null);
+ add(DataType.FLOAT, DataKind.NZ, false, 32, null);
+ return this;
+ }
+
+ public Builder addFloatNorm(String prefix) {
+ add(DataType.FLOAT, DataKind.NX, false, 32, prefix + "NX");
+ add(DataType.FLOAT, DataKind.NY, false, 32, prefix + "NY");
+ add(DataType.FLOAT, DataKind.NZ, false, 32, prefix + "NZ");
+ return this;
+ }
+
public Builder addFloatPointSize() {
add(DataType.FLOAT, DataKind.POINT_SIZE, false, 32, null);
return this;
}
+ public Builder addFloatPointSize(String name) {
+ add(DataType.FLOAT, DataKind.POINT_SIZE, false, 32, name);
+ return this;
+ }
+
public Builder addFloatRGB() {
add(DataType.FLOAT, DataKind.RED, false, 32, null);
add(DataType.FLOAT, DataKind.GREEN, false, 32, null);
@@ -261,6 +306,13 @@ public class Element extends BaseObj {
return this;
}
+ public Builder addFloatRGB(String prefix) {
+ add(DataType.FLOAT, DataKind.RED, false, 32, prefix + "R");
+ add(DataType.FLOAT, DataKind.GREEN, false, 32, prefix + "G");
+ add(DataType.FLOAT, DataKind.BLUE, false, 32, prefix + "B");
+ return this;
+ }
+
public Builder addFloatRGBA() {
add(DataType.FLOAT, DataKind.RED, false, 32, null);
add(DataType.FLOAT, DataKind.GREEN, false, 32, null);
@@ -269,6 +321,14 @@ public class Element extends BaseObj {
return this;
}
+ public Builder addFloatRGBA(String prefix) {
+ add(DataType.FLOAT, DataKind.RED, false, 32, prefix + "R");
+ add(DataType.FLOAT, DataKind.GREEN, false, 32, prefix + "G");
+ add(DataType.FLOAT, DataKind.BLUE, false, 32, prefix + "B");
+ add(DataType.FLOAT, DataKind.ALPHA, false, 32, prefix + "A");
+ return this;
+ }
+
public Builder addUNorm8RGBA() {
add(DataType.UNSIGNED, DataKind.RED, true, 8, null);
add(DataType.UNSIGNED, DataKind.GREEN, true, 8, null);
@@ -277,6 +337,14 @@ public class Element extends BaseObj {
return this;
}
+ public Builder addUNorm8RGBA(String prefix) {
+ add(DataType.UNSIGNED, DataKind.RED, true, 8, prefix + "R");
+ add(DataType.UNSIGNED, DataKind.GREEN, true, 8, prefix + "G");
+ add(DataType.UNSIGNED, DataKind.BLUE, true, 8, prefix + "B");
+ add(DataType.UNSIGNED, DataKind.ALPHA, true, 8, prefix + "A");
+ return this;
+ }
+
static synchronized Element internalCreate(RenderScript rs, Builder b) {
rs.nElementBegin();
for (int ct=0; ct < b.mEntryCount; ct++) {
@@ -292,7 +360,7 @@ public class Element extends BaseObj {
}
}
int id = rs.nElementCreate();
- return new Element(id, rs);
+ return new Element(id, rs, (b.mSizeBits + 7) >> 3);
}
public Element create() {