diff options
author | 2011-12-15 09:56:10 -0800 | |
---|---|---|
committer | 2011-12-15 09:56:28 -0800 | |
commit | d24b1bb040da73f98556c9d4ec3a5c07b91cc412 (patch) | |
tree | 4bcbd8617a08ad10b68d642a6ae09620ad7ef091 /libs/rs/rsElement.cpp | |
parent | b98f6d3466f15a250e4f2851bbae16c66b014cf1 (diff) |
Element HAL sturct, script side getters
Change-Id: If98dd4c22bce58dca2c9739c8aee935a2dd0b493
Diffstat (limited to 'libs/rs/rsElement.cpp')
-rw-r--r-- | libs/rs/rsElement.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/libs/rs/rsElement.cpp b/libs/rs/rsElement.cpp index 56c31b66405d..8b60701769ce 100644 --- a/libs/rs/rsElement.cpp +++ b/libs/rs/rsElement.cpp @@ -47,6 +47,12 @@ void Element::clear() { mFields = NULL; mFieldCount = 0; mHasReference = false; + + delete [] mHal.state.fields; + delete [] mHal.state.fieldArraySizes; + delete [] mHal.state.fieldNames; + delete [] mHal.state.fieldNameLengths; + delete [] mHal.state.fieldOffsetBytes; } size_t Element::getSizeBits() const { @@ -157,13 +163,26 @@ Element *Element::createFromStream(Context *rsc, IStream *stream) { } void Element::compute() { + mHal.state.dataType = mComponent.getType(); + mHal.state.dataKind = mComponent.getKind(); + mHal.state.vectorSize = mComponent.getVectorSize(); + if (mFieldCount == 0) { mBits = mComponent.getBits(); mBitsUnpadded = mComponent.getBitsUnpadded(); mHasReference = mComponent.isReference(); + + mHal.state.elementSizeBytes = getSizeBytes(); return; } + mHal.state.fields = new const Element*[mFieldCount]; + mHal.state.fieldArraySizes = new uint32_t[mFieldCount]; + mHal.state.fieldNames = new const char*[mFieldCount]; + mHal.state.fieldNameLengths = new uint32_t[mFieldCount]; + mHal.state.fieldOffsetBytes = new uint32_t[mFieldCount]; + mHal.state.fieldsCount = mFieldCount; + size_t bits = 0; size_t bitsUnpadded = 0; for (size_t ct=0; ct < mFieldCount; ct++) { @@ -175,8 +194,15 @@ void Element::compute() { if (mFields[ct].e->mHasReference) { mHasReference = true; } + + mHal.state.fields[ct] = mFields[ct].e.get(); + mHal.state.fieldArraySizes[ct] = mFields[ct].arraySize; + mHal.state.fieldNames[ct] = mFields[ct].name.string(); + mHal.state.fieldNameLengths[ct] = mFields[ct].name.length(); + mHal.state.fieldOffsetBytes[ct] = mFields[ct].offsetBits >> 3; } + mHal.state.elementSizeBytes = getSizeBytes(); } ObjectBaseRef<const Element> Element::createRef(Context *rsc, RsDataType dt, RsDataKind dk, |