diff options
author | 2011-12-15 09:56:10 -0800 | |
---|---|---|
committer | 2011-12-15 09:56:28 -0800 | |
commit | d24b1bb040da73f98556c9d4ec3a5c07b91cc412 (patch) | |
tree | 4bcbd8617a08ad10b68d642a6ae09620ad7ef091 | |
parent | b98f6d3466f15a250e4f2851bbae16c66b014cf1 (diff) |
Element HAL sturct, script side getters
Change-Id: If98dd4c22bce58dca2c9739c8aee935a2dd0b493
-rw-r--r-- | libs/rs/rsElement.cpp | 26 | ||||
-rw-r--r-- | libs/rs/rsElement.h | 21 | ||||
-rw-r--r-- | libs/rs/rsMesh.h | 18 | ||||
-rw-r--r-- | libs/rs/scriptc/rs_allocation.rsh | 24 | ||||
-rw-r--r-- | libs/rs/scriptc/rs_types.rsh | 9 |
5 files changed, 89 insertions, 9 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, diff --git a/libs/rs/rsElement.h b/libs/rs/rsElement.h index 04010faafac8..010c6122ad71 100644 --- a/libs/rs/rsElement.h +++ b/libs/rs/rsElement.h @@ -28,6 +28,27 @@ namespace renderscript { // An element is a group of Components that occupies one cell in a structure. class Element : public ObjectBase { public: + struct Hal { + mutable void *drv; + + struct State { + RsDataType dataType; + RsDataKind dataKind; + uint32_t vectorSize; + uint32_t elementSizeBytes; + + // Subelements + const Element **fields; + uint32_t *fieldArraySizes; + const char **fieldNames; + uint32_t *fieldNameLengths; + uint32_t *fieldOffsetBytes; + uint32_t fieldsCount; + }; + State state; + }; + Hal mHal; + class Builder { public: Builder(); diff --git a/libs/rs/rsMesh.h b/libs/rs/rsMesh.h index 0fc73fba5c95..84a57ca50f7a 100644 --- a/libs/rs/rsMesh.h +++ b/libs/rs/rsMesh.h @@ -28,15 +28,6 @@ namespace renderscript { // An element is a group of Components that occupies one cell in a structure. class Mesh : public ObjectBase { public: - Mesh(Context *); - Mesh(Context *, uint32_t vertexBuffersCount, uint32_t primitivesCount); - ~Mesh(); - - virtual void serialize(OStream *stream) const; - virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_MESH; } - static Mesh *createFromStream(Context *rsc, IStream *stream); - void init(); - struct Hal { mutable void *drv; @@ -57,6 +48,15 @@ public: }; Hal mHal; + Mesh(Context *); + Mesh(Context *, uint32_t vertexBuffersCount, uint32_t primitivesCount); + ~Mesh(); + + virtual void serialize(OStream *stream) const; + virtual RsA3DClassID getClassId() const { return RS_A3D_CLASS_ID_MESH; } + static Mesh *createFromStream(Context *rsc, IStream *stream); + void init(); + void setVertexBuffer(Allocation *vb, uint32_t index) { mVertexBuffers[index].set(vb); mHal.state.vertexBuffers[index] = vb; diff --git a/libs/rs/scriptc/rs_allocation.rsh b/libs/rs/scriptc/rs_allocation.rsh index 1cb3a99a7f89..4d62bfb4dfba 100644 --- a/libs/rs/scriptc/rs_allocation.rsh +++ b/libs/rs/scriptc/rs_allocation.rsh @@ -168,5 +168,29 @@ extern const void * __attribute__((overloadable)) extern const void * __attribute__((overloadable)) rsGetElementAt(rs_allocation, uint32_t x, uint32_t y, uint32_t z); +extern const rs_element __attribute__((overloadable)) + rsAllocationGetElement(rs_allocation); + +extern const uint32_t __attribute__((overloadable)) + rsMeshGetVertexAllocationCount(rs_mesh); + +extern const uint32_t __attribute__((overloadable)) + rsMeshGetPrimitiveCount(rs_mesh); + +extern const uint32_t __attribute__((overloadable)) + rsMeshGetVertexAllocationCount(rs_mesh); + +extern const rs_allocation __attribute__((overloadable)) + rsMeshGetVertexAllocation(rs_mesh, uint32_t index); + +extern const uint32_t __attribute__((overloadable)) + rsMeshGetPrimitiveCount(rs_mesh); + +extern const rs_allocation __attribute__((overloadable)) + rsMeshGetIndexAllocation(rs_mesh, uint32_t index); + +extern const rs_primitive __attribute__((overloadable)) + rsMeshGetPrimitive(rs_mesh, uint32_t index); + #endif diff --git a/libs/rs/scriptc/rs_types.rsh b/libs/rs/scriptc/rs_types.rsh index a01807e2a15b..5c468bfa31df 100644 --- a/libs/rs/scriptc/rs_types.rsh +++ b/libs/rs/scriptc/rs_types.rsh @@ -400,6 +400,15 @@ typedef enum { RS_ALLOCATION_USAGE_GRAPHICS_RENDER_TARGET = 0x0010 } rs_allocation_usage_type; +typedef enum { + RS_PRIMITIVE_POINT, + RS_PRIMITIVE_LINE, + RS_PRIMITIVE_LINE_STRIP, + RS_PRIMITIVE_TRIANGLE, + RS_PRIMITIVE_TRIANGLE_STRIP, + RS_PRIMITIVE_TRIANGLE_FAN +} rs_primitive; + #endif //defined(RS_VERSION) && (RS_VERSION >= 14) #endif |