am b02dadd4: Merge "Create FieldPacker.getPos() to get the actual amount of data used for FP."

* commit 'b02dadd47c20b65569413cb4575c6050fe7b609f':
  Create FieldPacker.getPos() to get the actual amount of data used for FP.
This commit is contained in:
Stephen Hines
2014-06-19 03:13:37 +00:00
committed by Android Git Automerger
3 changed files with 21 additions and 7 deletions

View File

@@ -776,10 +776,11 @@ public class Allocation extends BaseObj {
mRS.validate(); mRS.validate();
int eSize = mType.mElement.getBytesSize(); int eSize = mType.mElement.getBytesSize();
final byte[] data = fp.getData(); final byte[] data = fp.getData();
int data_length = fp.getPos();
int count = data.length / eSize; int count = data_length / eSize;
if ((eSize * count) != data.length) { if ((eSize * count) != data_length) {
throw new RSIllegalArgumentException("Field packer length " + data.length + throw new RSIllegalArgumentException("Field packer length " + data_length +
" not divisible by element size " + eSize + "."); " not divisible by element size " + eSize + ".");
} }
copy1DRangeFromUnchecked(xoff, count, data); copy1DRangeFromUnchecked(xoff, count, data);
@@ -803,16 +804,17 @@ public class Allocation extends BaseObj {
} }
final byte[] data = fp.getData(); final byte[] data = fp.getData();
int data_length = fp.getPos();
int eSize = mType.mElement.mElements[component_number].getBytesSize(); int eSize = mType.mElement.mElements[component_number].getBytesSize();
eSize *= mType.mElement.mArraySizes[component_number]; eSize *= mType.mElement.mArraySizes[component_number];
if (data.length != eSize) { if (data_length != eSize) {
throw new RSIllegalArgumentException("Field packer sizelength " + data.length + throw new RSIllegalArgumentException("Field packer sizelength " + data_length +
" does not match component size " + eSize + "."); " does not match component size " + eSize + ".");
} }
mRS.nAllocationElementData1D(getIDSafe(), xoff, mSelectedLOD, 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) { private void data1DChecks(int off, int count, int len, int dataSize) {

View File

@@ -76,7 +76,7 @@ public class FieldPacker {
mPos = 0; mPos = 0;
} }
public void reset(int i) { public void reset(int i) {
if ((i < 0) || (i >= mLen)) { if ((i < 0) || (i > mLen)) {
throw new RSIllegalArgumentException("out of range argument: " + i); throw new RSIllegalArgumentException("out of range argument: " + i);
} }
mPos = i; mPos = i;
@@ -606,6 +606,15 @@ public class FieldPacker {
return mData; return mData;
} }
/**
* Get the actual length used for the FieldPacker.
*
* @hide
*/
public int getPos() {
return mPos;
}
private final byte mData[]; private final byte mData[];
private int mPos; private int mPos;
private int mLen; private int mLen;

View File

@@ -249,6 +249,9 @@ public class ProgramVertexFixedFunction extends ProgramVertex {
for(int i = 0; i < 16; i ++) { for(int i = 0; i < 16; i ++) {
mIOBuffer.addF32(m.mMat[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); mAlloc.setFromFieldPacker(0, mIOBuffer);
} }