1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef ANDROID_RS_FILE_A3D_H 18 #define ANDROID_RS_FILE_A3D_H 19 20 #include "rsMesh.h" 21 22 #include "rsStream.h" 23 #include <stdio.h> 24 25 #define A3D_MAGIC_KEY "Android3D_ff" 26 27 // --------------------------------------------------------------------------- 28 namespace android { 29 class Asset; 30 31 namespace renderscript { 32 33 class FileA3D : public ObjectBase { 34 public: 35 FileA3D(Context *rsc); 36 ~FileA3D(); 37 38 uint32_t mMajorVersion; 39 uint32_t mMinorVersion; 40 uint64_t mIndexOffset; 41 uint64_t mStringTableOffset; 42 bool mUse64BitOffsets; 43 44 class A3DIndexEntry { 45 const char *mObjectName; 46 RsA3DClassID mType; 47 uint64_t mOffset; 48 uint64_t mLength; 49 ObjectBase *mRsObj; 50 public: 51 friend class FileA3D; getObjectName()52 const char *getObjectName() const { 53 return mObjectName; 54 } getType()55 RsA3DClassID getType() const { 56 return mType; 57 } 58 59 ~A3DIndexEntry(); 60 }; 61 62 bool load(FILE *f); 63 bool load(Asset *asset); 64 bool load(const void *data, size_t length); 65 66 size_t getNumIndexEntries() const; 67 const A3DIndexEntry* getIndexEntry(size_t index) const; 68 ObjectBase *initializeFromEntry(size_t index); 69 70 void appendToFile(Context *rsc, ObjectBase *obj); 71 bool writeFile(const char *filename); 72 73 // Currently files do not get serialized, 74 // but we need to inherit from ObjectBase for ref tracking serialize(Context * rsc,OStream * stream)75 virtual void serialize(Context *rsc, OStream *stream) const { 76 } getClassId()77 virtual RsA3DClassID getClassId() const { 78 return RS_A3D_CLASS_ID_UNKNOWN; 79 } 80 81 protected: 82 83 void parseHeader(IStream *headerStream); 84 85 const uint8_t * mData; 86 void * mAlloc; 87 uint64_t mDataSize; 88 Asset *mAsset; 89 90 OStream *mWriteStream; 91 Vector<A3DIndexEntry*> mWriteIndex; 92 93 IStream *mReadStream; 94 Vector<A3DIndexEntry*> mIndex; 95 }; 96 97 98 } 99 } 100 #endif //ANDROID_RS_FILE_A3D_H 101 102 103