|  | /* | 
|  | * Copyright (C) 2009 The Android Open Source Project | 
|  | * | 
|  | * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | * you may not use this file except in compliance with the License. | 
|  | * You may obtain a copy of the License at | 
|  | * | 
|  | *      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, software | 
|  | * distributed under the License is distributed on an "AS IS" BASIS, | 
|  | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | * See the License for the specific language governing permissions and | 
|  | * limitations under the License. | 
|  | */ | 
|  |  | 
|  | #ifndef ANDROID_RS_FILE_A3D_H | 
|  | #define ANDROID_RS_FILE_A3D_H | 
|  |  | 
|  | #include "rsMesh.h" | 
|  |  | 
|  | #include "rsStream.h" | 
|  | #include <stdio.h> | 
|  |  | 
|  | #define A3D_MAGIC_KEY "Android3D_ff" | 
|  |  | 
|  | // --------------------------------------------------------------------------- | 
|  | namespace android { | 
|  | class Asset; | 
|  |  | 
|  | namespace renderscript { | 
|  |  | 
|  | class FileA3D : public ObjectBase { | 
|  | public: | 
|  | FileA3D(Context *rsc); | 
|  | ~FileA3D(); | 
|  |  | 
|  | uint32_t mMajorVersion; | 
|  | uint32_t mMinorVersion; | 
|  | uint64_t mIndexOffset; | 
|  | uint64_t mStringTableOffset; | 
|  | bool mUse64BitOffsets; | 
|  |  | 
|  | class A3DIndexEntry { | 
|  | const char *mObjectName; | 
|  | RsA3DClassID mType; | 
|  | uint64_t mOffset; | 
|  | uint64_t mLength; | 
|  | ObjectBase *mRsObj; | 
|  | public: | 
|  | friend class FileA3D; | 
|  | const char *getObjectName() const { | 
|  | return mObjectName; | 
|  | } | 
|  | RsA3DClassID getType() const { | 
|  | return mType; | 
|  | } | 
|  |  | 
|  | ~A3DIndexEntry(); | 
|  | }; | 
|  |  | 
|  | bool load(FILE *f); | 
|  | bool load(Asset *asset); | 
|  | bool load(const void *data, size_t length); | 
|  |  | 
|  | size_t getNumIndexEntries() const; | 
|  | const A3DIndexEntry* getIndexEntry(size_t index) const; | 
|  | ObjectBase *initializeFromEntry(size_t index); | 
|  |  | 
|  | void appendToFile(Context *rsc, ObjectBase *obj); | 
|  | bool writeFile(const char *filename); | 
|  |  | 
|  | // Currently files do not get serialized, | 
|  | // but we need to inherit from ObjectBase for ref tracking | 
|  | virtual void serialize(Context *rsc, OStream *stream) const { | 
|  | } | 
|  | virtual RsA3DClassID getClassId() const { | 
|  | return RS_A3D_CLASS_ID_UNKNOWN; | 
|  | } | 
|  |  | 
|  | protected: | 
|  |  | 
|  | void parseHeader(IStream *headerStream); | 
|  |  | 
|  | const uint8_t * mData; | 
|  | void * mAlloc; | 
|  | uint64_t mDataSize; | 
|  | Asset *mAsset; | 
|  |  | 
|  | OStream *mWriteStream; | 
|  | Vector<A3DIndexEntry*> mWriteIndex; | 
|  |  | 
|  | IStream *mReadStream; | 
|  | Vector<A3DIndexEntry*> mIndex; | 
|  | }; | 
|  |  | 
|  |  | 
|  | } | 
|  | } | 
|  | #endif //ANDROID_RS_FILE_A3D_H | 
|  |  | 
|  |  |