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 "RenderScript.h" 21 #include "rsMesh.h" 22 23 #include <utils/String8.h> 24 #include <utils/Asset.h> 25 #include "rsStream.h" 26 #include <stdio.h> 27 28 #define A3D_MAGIC_KEY "Android3D_ff" 29 30 // --------------------------------------------------------------------------- 31 namespace android { 32 33 namespace renderscript { 34 35 class FileA3D : public ObjectBase { 36 public: 37 FileA3D(Context *rsc); 38 ~FileA3D(); 39 40 uint32_t mMajorVersion; 41 uint32_t mMinorVersion; 42 uint64_t mIndexOffset; 43 uint64_t mStringTableOffset; 44 bool mUse64BitOffsets; 45 46 class A3DIndexEntry { 47 String8 mObjectName; 48 RsA3DClassID mType; 49 uint64_t mOffset; 50 uint64_t mLength; 51 ObjectBase *mRsObj; 52 public: 53 friend class FileA3D; getObjectName()54 const String8 &getObjectName() const { 55 return mObjectName; 56 } getType()57 RsA3DClassID getType() const { 58 return mType; 59 } 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(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(OStream * stream)75 virtual void serialize(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