diff options
author | Alex Sakhartchouk <alexst@google.com> | 2010-05-21 12:53:13 -0700 |
---|---|---|
committer | Alex Sakhartchouk <alexst@google.com> | 2010-05-21 14:00:10 -0700 |
commit | aa7d2884cb563f87294003981e03e37a1abeb961 (patch) | |
tree | 85e27332bc586e3eae0ea334e624920de27687cd /libs/rs/rsElement.cpp | |
parent | dd56b39ec000b3ddd206d242b0fe24b4b955c8ee (diff) | |
download | frameworks_base-aa7d2884cb563f87294003981e03e37a1abeb961.zip frameworks_base-aa7d2884cb563f87294003981e03e37a1abeb961.tar.gz frameworks_base-aa7d2884cb563f87294003981e03e37a1abeb961.tar.bz2 |
Removed unnecessary change based on comments.
Now using android utils lib.
collada_to_a3d seems to work with android util libs.
Integrating old changelist
Changing assert to rsAssrt in VertexArray
making context compile.
Change-Id: I33890defa777f09253bfab630d97782359ec49d7
Added serialization code to rsLib
Integrated old changelist
Change-Id: Ie4746113f6d1817fbb3264f97fdddde25b779311
Added serialization code to rsLib
Change-Id: Ie4746113f6d1817fbb3264f97fdddde25b779311
Diffstat (limited to 'libs/rs/rsElement.cpp')
-rw-r--r-- | libs/rs/rsElement.cpp | 91 |
1 files changed, 90 insertions, 1 deletions
diff --git a/libs/rs/rsElement.cpp b/libs/rs/rsElement.cpp index 6288bc4..3b18c98 100644 --- a/libs/rs/rsElement.cpp +++ b/libs/rs/rsElement.cpp @@ -14,9 +14,14 @@ * limitations under the License. */ -#include "rsContext.h" +#ifndef ANDROID_RS_BUILD_FOR_HOST +#include "rsContext.h" #include <GLES/gl.h> +#else +#include "rsContextHostStub.h" +#include <OpenGL/gl.h> +#endif using namespace android; using namespace android::renderscript; @@ -83,6 +88,90 @@ void Element::dumpLOGV(const char *prefix) const } } +void Element::serialize(OStream *stream) const +{ + // Need to identify ourselves + stream->addU32((uint32_t)getClassId()); + + String8 name(getName()); + stream->addString(&name); + + mComponent.serialize(stream); + + // Now serialize all the fields + stream->addU32(mFieldCount); + for(uint32_t ct = 0; ct < mFieldCount; ct++) { + stream->addString(&mFields[ct].name); + mFields[ct].e->serialize(stream); + } +} + +Element *Element::createFromStream(Context *rsc, IStream *stream) +{ + // First make sure we are reading the correct object + A3DClassID classID = (A3DClassID)stream->loadU32(); + if(classID != A3D_CLASS_ID_ELEMENT) { + LOGE("element loading skipped due to invalid class id\n"); + return NULL; + } + + String8 name; + stream->loadString(&name); + + Element *elem = new Element(rsc); + elem->mComponent.loadFromStream(stream); + elem->mBits = elem->mComponent.getBits(); + + elem->mFieldCount = stream->loadU32(); + if(elem->mFieldCount) { + elem->mFields = new ElementField_t [elem->mFieldCount]; + for(uint32_t ct = 0; ct < elem->mFieldCount; ct ++) { + stream->loadString(&elem->mFields[ct].name); + Element *fieldElem = Element::createFromStream(rsc, stream); + elem->mFields[ct].e.set(fieldElem); + } + } + + // We need to check if this already exists + for (uint32_t ct=0; ct < rsc->mStateElement.mElements.size(); ct++) { + Element *ee = rsc->mStateElement.mElements[ct]; + + if (!ee->getFieldCount() ) { + + if((ee->getComponent().getType() == elem->getComponent().getType()) && + (ee->getComponent().getKind() == elem->getComponent().getKind()) && + (ee->getComponent().getIsNormalized() == elem->getComponent().getIsNormalized()) && + (ee->getComponent().getVectorSize() == elem->getComponent().getVectorSize())) { + // Match + delete elem; + ee->incUserRef(); + return ee; + } + + } else if (ee->getFieldCount() == elem->mFieldCount) { + + bool match = true; + for (uint32_t i=0; i < elem->mFieldCount; i++) { + if ((ee->mFields[i].e.get() != elem->mFields[i].e.get()) || + (ee->mFields[i].name.length() != elem->mFields[i].name.length()) || + (ee->mFields[i].name != elem->mFields[i].name)) { + match = false; + break; + } + } + if (match) { + delete elem; + ee->incUserRef(); + return ee; + } + + } + } + + rsc->mStateElement.mElements.push(elem); + return elem; +} + const Element * Element::create(Context *rsc, RsDataType dt, RsDataKind dk, bool isNorm, uint32_t vecSize) |