adding getters to Sampler ProgramRaster, ProgramStore, Element.
Element adds ability to get subelement info. Tests for new stuff.
Change-Id: I4a77b91e4e0e73c95ab28b42c50732a64e71e7b9
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 @@
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 @@
}
/**
+ * @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 @@
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 @@
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];
}
}
diff --git a/graphics/java/android/renderscript/ProgramRaster.java b/graphics/java/android/renderscript/ProgramRaster.java
index 60d9698..93ee0ce 100644
--- a/graphics/java/android/renderscript/ProgramRaster.java
+++ b/graphics/java/android/renderscript/ProgramRaster.java
@@ -37,23 +37,32 @@
}
}
- boolean mPointSmooth;
- boolean mLineSmooth;
boolean mPointSprite;
- float mLineWidth;
CullMode mCullMode;
ProgramRaster(int id, RenderScript rs) {
super(id, rs);
- mLineWidth = 1.0f;
- mPointSmooth = false;
- mLineSmooth = false;
mPointSprite = false;
-
mCullMode = CullMode.BACK;
}
+ /**
+ * @hide
+ * @return whether point sprites are enabled
+ */
+ public boolean getPointSpriteEnabled() {
+ return mPointSprite;
+ }
+
+ /**
+ * @hide
+ * @return cull mode
+ */
+ public CullMode getCullMode() {
+ return mCullMode;
+ }
+
public static ProgramRaster CULL_BACK(RenderScript rs) {
if(rs.mProgramRaster_CULL_BACK == null) {
ProgramRaster.Builder builder = new ProgramRaster.Builder(rs);
@@ -105,7 +114,10 @@
public ProgramRaster create() {
mRS.validate();
int id = mRS.nProgramRasterCreate(mPointSprite, mCullMode.mID);
- return new ProgramRaster(id, mRS);
+ ProgramRaster programRaster = new ProgramRaster(id, mRS);
+ programRaster.mPointSprite = mPointSprite;
+ programRaster.mCullMode = mCullMode;
+ return programRaster;
}
}
diff --git a/graphics/java/android/renderscript/ProgramStore.java b/graphics/java/android/renderscript/ProgramStore.java
index fb7c8ca..677dadd 100644
--- a/graphics/java/android/renderscript/ProgramStore.java
+++ b/graphics/java/android/renderscript/ProgramStore.java
@@ -135,12 +135,93 @@
}
}
+ DepthFunc mDepthFunc;
+ boolean mDepthMask;
+ boolean mColorMaskR;
+ boolean mColorMaskG;
+ boolean mColorMaskB;
+ boolean mColorMaskA;
+ BlendSrcFunc mBlendSrc;
+ BlendDstFunc mBlendDst;
+ boolean mDither;
ProgramStore(int id, RenderScript rs) {
super(id, rs);
}
/**
+ * @hide
+ * @return depth function
+ */
+ public DepthFunc getDepthFunc() {
+ return mDepthFunc;
+ }
+
+ /**
+ * @hide
+ * @return whether depth writes are enabled
+ */
+ public boolean getDepthMaskEnabled() {
+ return mDepthMask;
+ }
+
+ /**
+ * @hide
+ * @return red color channel mask
+ */
+ public boolean getColorMaskREnabled() {
+ return mColorMaskR;
+ }
+
+ /**
+ * @hide
+ * @return green color channel mask
+ */
+ public boolean getColorMaskGEnabled() {
+ return mColorMaskG;
+ }
+
+ /**
+ * @hide
+ * @return blue color channel mask
+ */
+ public boolean getColorMaskBEnabled() {
+ return mColorMaskB;
+ }
+
+ /**
+ * @hide
+ * @return alpha channel mask
+ */
+ public boolean getColorMaskAEnabled() {
+ return mColorMaskA;
+ }
+
+ /**
+ * @hide
+ * @return source blend function
+ */
+ public BlendSrcFunc getBlendSrcFunc() {
+ return mBlendSrc;
+ }
+
+ /**
+ * @hide
+ * @return destination blend function
+ */
+ public BlendDstFunc getBlendDstFunc() {
+ return mBlendDst;
+ }
+
+ /**
+ * @hide
+ * @return whether dither is enabled
+ */
+ public boolean getDitherEnabled() {
+ return mDither;
+ }
+
+ /**
* Returns a pre-defined program store object with the following
* characteristics:
* - incoming pixels are drawn if their depth value is less than
@@ -340,7 +421,17 @@
int id = mRS.nProgramStoreCreate(mColorMaskR, mColorMaskG, mColorMaskB, mColorMaskA,
mDepthMask, mDither,
mBlendSrc.mID, mBlendDst.mID, mDepthFunc.mID);
- return new ProgramStore(id, mRS);
+ ProgramStore programStore = new ProgramStore(id, mRS);
+ programStore.mDepthFunc = mDepthFunc;
+ programStore.mDepthMask = mDepthMask;
+ programStore.mColorMaskR = mColorMaskR;
+ programStore.mColorMaskG = mColorMaskG;
+ programStore.mColorMaskB = mColorMaskB;
+ programStore.mColorMaskA = mColorMaskA;
+ programStore.mBlendSrc = mBlendSrc;
+ programStore.mBlendDst = mBlendDst;
+ programStore.mDither = mDither;
+ return programStore;
}
}
diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java
index d3d65a3..1305633 100644
--- a/graphics/java/android/renderscript/RenderScript.java
+++ b/graphics/java/android/renderscript/RenderScript.java
@@ -210,10 +210,11 @@
validate();
rsnElementGetNativeData(mContext, id, elementData);
}
- native void rsnElementGetSubElements(int con, int id, int[] IDs, String[] names);
- synchronized void nElementGetSubElements(int id, int[] IDs, String[] names) {
+ native void rsnElementGetSubElements(int con, int id,
+ int[] IDs, String[] names, int[] arraySizes);
+ synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
validate();
- rsnElementGetSubElements(mContext, id, IDs, names);
+ rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
}
native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
diff --git a/graphics/java/android/renderscript/Sampler.java b/graphics/java/android/renderscript/Sampler.java
index 98943a1..0a3c91d 100644
--- a/graphics/java/android/renderscript/Sampler.java
+++ b/graphics/java/android/renderscript/Sampler.java
@@ -47,11 +47,58 @@
}
}
+ Value mMin;
+ Value mMag;
+ Value mWrapS;
+ Value mWrapT;
+ Value mWrapR;
+ float mAniso;
+
Sampler(int id, RenderScript rs) {
super(id, rs);
}
/**
+ * @hide
+ * @return minification setting for the sampler
+ */
+ public Value getMinification() {
+ return mMin;
+ }
+
+ /**
+ * @hide
+ * @return magnification setting for the sampler
+ */
+ public Value getMagnification() {
+ return mMag;
+ }
+
+ /**
+ * @hide
+ * @return S wrapping mode for the sampler
+ */
+ public Value getWrapS() {
+ return mWrapS;
+ }
+
+ /**
+ * @hide
+ * @return T wrapping mode for the sampler
+ */
+ public Value getWrapT() {
+ return mWrapT;
+ }
+
+ /**
+ * @hide
+ * @return anisotropy setting for the sampler
+ */
+ public float getAnisotropy() {
+ return mAniso;
+ }
+
+ /**
* Retrieve a sampler with min and mag set to nearest and wrap modes set to
* clamp.
*
@@ -241,8 +288,16 @@
public Sampler create() {
mRS.validate();
- int id = mRS.nSamplerCreate(mMag.mID, mMin.mID, mWrapS.mID, mWrapT.mID, mWrapR.mID, mAniso);
- return new Sampler(id, mRS);
+ int id = mRS.nSamplerCreate(mMag.mID, mMin.mID,
+ mWrapS.mID, mWrapT.mID, mWrapR.mID, mAniso);
+ Sampler sampler = new Sampler(id, mRS);
+ sampler.mMin = mMin;
+ sampler.mMag = mMag;
+ sampler.mWrapS = mWrapS;
+ sampler.mWrapT = mWrapT;
+ sampler.mWrapR = mWrapR;
+ sampler.mAniso = mAniso;
+ return sampler;
}
}