diff options
Diffstat (limited to 'rs/java')
| -rw-r--r-- | rs/java/android/renderscript/Allocation.java | 14 | ||||
| -rw-r--r-- | rs/java/android/renderscript/Element.java | 30 | ||||
| -rw-r--r-- | rs/java/android/renderscript/FieldPacker.java | 11 | ||||
| -rw-r--r-- | rs/java/android/renderscript/ProgramVertexFixedFunction.java | 3 |
4 files changed, 40 insertions, 18 deletions
diff --git a/rs/java/android/renderscript/Allocation.java b/rs/java/android/renderscript/Allocation.java index 2191b54..d9588e8 100644 --- a/rs/java/android/renderscript/Allocation.java +++ b/rs/java/android/renderscript/Allocation.java @@ -770,10 +770,11 @@ public class Allocation extends BaseObj { mRS.validate(); int eSize = mType.mElement.getBytesSize(); final byte[] data = fp.getData(); + int data_length = fp.getPos(); - int count = data.length / eSize; - if ((eSize * count) != data.length) { - throw new RSIllegalArgumentException("Field packer length " + data.length + + int count = data_length / eSize; + if ((eSize * count) != data_length) { + throw new RSIllegalArgumentException("Field packer length " + data_length + " not divisible by element size " + eSize + "."); } copy1DRangeFromUnchecked(xoff, count, data); @@ -797,16 +798,17 @@ public class Allocation extends BaseObj { } final byte[] data = fp.getData(); + int data_length = fp.getPos(); int eSize = mType.mElement.mElements[component_number].getBytesSize(); eSize *= mType.mElement.mArraySizes[component_number]; - if (data.length != eSize) { - throw new RSIllegalArgumentException("Field packer sizelength " + data.length + + if (data_length != eSize) { + throw new RSIllegalArgumentException("Field packer sizelength " + data_length + " does not match component size " + eSize + "."); } mRS.nAllocationElementData1D(getIDSafe(), xoff, mSelectedLOD, - component_number, data, data.length); + component_number, data, data_length); } private void data1DChecks(int off, int count, int len, int dataSize) { diff --git a/rs/java/android/renderscript/Element.java b/rs/java/android/renderscript/Element.java index 55b671d..c6b5b0d 100644 --- a/rs/java/android/renderscript/Element.java +++ b/rs/java/android/renderscript/Element.java @@ -140,17 +140,17 @@ public class Element extends BaseObj { MATRIX_3X3 (17, 36), MATRIX_2X2 (18, 16), - RS_ELEMENT (1000, 4), - RS_TYPE (1001, 4), - RS_ALLOCATION (1002, 4), - RS_SAMPLER (1003, 4), - RS_SCRIPT (1004, 4), - RS_MESH (1005, 4), - RS_PROGRAM_FRAGMENT (1006, 4), - RS_PROGRAM_VERTEX (1007, 4), - RS_PROGRAM_RASTER (1008, 4), - RS_PROGRAM_STORE (1009, 4), - RS_FONT (1010, 4); + RS_ELEMENT (1000), + RS_TYPE (1001), + RS_ALLOCATION (1002), + RS_SAMPLER (1003), + RS_SCRIPT (1004), + RS_MESH (1005), + RS_PROGRAM_FRAGMENT (1006), + RS_PROGRAM_VERTEX (1007), + RS_PROGRAM_RASTER (1008), + RS_PROGRAM_STORE (1009), + RS_FONT (1010); int mID; int mSize; @@ -158,6 +158,14 @@ public class Element extends BaseObj { mID = id; mSize = size; } + + DataType(int id) { + mID = id; + mSize = 4; + if (RenderScript.sPointerSize == 8) { + mSize = 32; + } + } } /** diff --git a/rs/java/android/renderscript/FieldPacker.java b/rs/java/android/renderscript/FieldPacker.java index c9bba69..f39aa5f 100644 --- a/rs/java/android/renderscript/FieldPacker.java +++ b/rs/java/android/renderscript/FieldPacker.java @@ -75,7 +75,7 @@ public class FieldPacker { mPos = 0; } public void reset(int i) { - if ((i < 0) || (i >= mLen)) { + if ((i < 0) || (i > mLen)) { throw new RSIllegalArgumentException("out of range argument: " + i); } mPos = i; @@ -605,6 +605,15 @@ public class FieldPacker { return mData; } + /** + * Get the actual length used for the FieldPacker. + * + * @hide + */ + public int getPos() { + return mPos; + } + private final byte mData[]; private int mPos; private int mLen; diff --git a/rs/java/android/renderscript/ProgramVertexFixedFunction.java b/rs/java/android/renderscript/ProgramVertexFixedFunction.java index 5173af2..45840ae 100644 --- a/rs/java/android/renderscript/ProgramVertexFixedFunction.java +++ b/rs/java/android/renderscript/ProgramVertexFixedFunction.java @@ -245,6 +245,9 @@ public class ProgramVertexFixedFunction extends ProgramVertex { for(int i = 0; i < 16; i ++) { mIOBuffer.addF32(m.mMat[i]); } + // Reset the buffer back to the end, since we want to flush all of + // the contents back (and not just what we wrote now). + mIOBuffer.reset(mIOBuffer.getData().length); mAlloc.setFromFieldPacker(0, mIOBuffer); } |
