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.java87
1 files changed, 84 insertions, 3 deletions
diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java
index f844331..8a9ca85 100644
--- a/graphics/java/android/renderscript/Element.java
+++ b/graphics/java/android/renderscript/Element.java
@@ -46,13 +46,18 @@ public class Element extends BaseObj {
Element[] mElements;
String[] mElementNames;
int[] mArraySizes;
+ int[] mOffsetInBytes;
DataType mType;
DataKind mKind;
boolean mNormalized;
int mVectorSize;
- int getSizeBytes() {return mSize;}
+ /**
+ * @hide
+ * @return element size in bytes
+ */
+ public int getSizeBytes() {return mSize;}
/**
@@ -152,6 +157,77 @@ public class Element extends BaseObj {
}
/**
+ * @hide
+ * @return number of sub-elements in this element
+ */
+ public int getSubElementCount() {
+ if (mElements == null) {
+ return 0;
+ }
+ return mElements.length;
+ }
+
+ /**
+ * @hide
+ * @param index index of the sub-element to return
+ * @return sub-element in this element at given index
+ */
+ public Element getSubElement(int index) {
+ if (mElements == null) {
+ throw new RSIllegalArgumentException("Element contains no sub-elements");
+ }
+ if (index < 0 || index >= mElements.length) {
+ throw new RSIllegalArgumentException("Illegal sub-element index");
+ }
+ return mElements[index];
+ }
+
+ /**
+ * @hide
+ * @param index index of the sub-element
+ * @return sub-element in this element at given index
+ */
+ public String getSubElementName(int index) {
+ if (mElements == null) {
+ throw new RSIllegalArgumentException("Element contains no sub-elements");
+ }
+ if (index < 0 || index >= mElements.length) {
+ throw new RSIllegalArgumentException("Illegal sub-element index");
+ }
+ return mElementNames[index];
+ }
+
+ /**
+ * @hide
+ * @param index index of the sub-element
+ * @return array size of sub-element in this element at given index
+ */
+ public int getSubElementArraySize(int index) {
+ if (mElements == null) {
+ throw new RSIllegalArgumentException("Element contains no sub-elements");
+ }
+ if (index < 0 || index >= mElements.length) {
+ throw new RSIllegalArgumentException("Illegal sub-element index");
+ }
+ return mArraySizes[index];
+ }
+
+ /**
+ * @hide
+ * @param index index of the sub-element
+ * @return offset in bytes of sub-element in this element at given index
+ */
+ public int getSubElementOffsetBytes(int index) {
+ if (mElements == null) {
+ throw new RSIllegalArgumentException("Element contains no sub-elements");
+ }
+ if (index < 0 || index >= mElements.length) {
+ throw new RSIllegalArgumentException("Illegal sub-element index");
+ }
+ return mOffsetInBytes[index];
+ }
+
+ /**
* Utility function for returning an Element containing a single Boolean.
*
* @param rs Context to which the element will belong.
@@ -602,7 +678,9 @@ public class Element extends BaseObj {
mElements = e;
mElementNames = n;
mArraySizes = as;
+ mOffsetInBytes = new int[mElements.length];
for (int ct = 0; ct < mElements.length; ct++ ) {
+ mOffsetInBytes[ct] = mSize;
mSize += mElements[ct].mSize * mArraySizes[ct];
}
}
@@ -653,13 +731,16 @@ public class Element extends BaseObj {
if(numSubElements > 0) {
mElements = new Element[numSubElements];
mElementNames = new String[numSubElements];
+ mArraySizes = new int[numSubElements];
+ mOffsetInBytes = new int[numSubElements];
int[] subElementIds = new int[numSubElements];
- mRS.nElementGetSubElements(getID(), subElementIds, mElementNames);
+ mRS.nElementGetSubElements(getID(), subElementIds, mElementNames, mArraySizes);
for(int i = 0; i < numSubElements; i ++) {
mElements[i] = new Element(subElementIds[i], mRS);
mElements[i].updateFromNative();
- mSize += mElements[i].mSize;
+ mOffsetInBytes[i] = mSize;
+ mSize += mElements[i].mSize * mArraySizes[i];
}
}