| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 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 |  | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 20 | #include "rsMesh.h" | 
 | 21 |  | 
| Alex Sakhartchouk | fb6b614 | 2010-05-21 12:53:13 -0700 | [diff] [blame] | 22 | #include "rsStream.h" | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 23 | #include <stdio.h> | 
| Miao Wang | 82e135c | 2017-02-27 23:35:35 -0800 | [diff] [blame] | 24 | #include <vector> | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 25 |  | 
| Alex Sakhartchouk | b825f67 | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 26 | #define A3D_MAGIC_KEY "Android3D_ff" | 
 | 27 |  | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 28 | // --------------------------------------------------------------------------- | 
 | 29 | namespace android { | 
| Jason Sams | a6ab26a | 2012-03-28 17:44:21 -0700 | [diff] [blame] | 30 |     class Asset; | 
| Alex Sakhartchouk | b825f67 | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 31 |  | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 32 | namespace renderscript { | 
 | 33 |  | 
| Alex Sakhartchouk | afb743a | 2010-11-09 17:00:54 -0800 | [diff] [blame] | 34 | class FileA3D : public ObjectBase { | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 35 | public: | 
| Chih-Hung Hsieh | 10ab8bb | 2016-07-01 12:20:20 -0700 | [diff] [blame] | 36 |     explicit FileA3D(Context *rsc); | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 37 |     ~FileA3D(); | 
 | 38 |  | 
 | 39 |     uint32_t mMajorVersion; | 
 | 40 |     uint32_t mMinorVersion; | 
 | 41 |     uint64_t mIndexOffset; | 
 | 42 |     uint64_t mStringTableOffset; | 
 | 43 |     bool mUse64BitOffsets; | 
 | 44 |  | 
| Alex Sakhartchouk | b825f67 | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 45 |     class A3DIndexEntry { | 
| Jason Sams | 48ecf6a | 2013-07-09 15:35:29 -0700 | [diff] [blame] | 46 |         const char *mObjectName; | 
| Alex Sakhartchouk | b825f67 | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 47 |         RsA3DClassID mType; | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 48 |         uint64_t mOffset; | 
| Alex Sakhartchouk | b825f67 | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 49 |         uint64_t mLength; | 
 | 50 |         ObjectBase *mRsObj; | 
 | 51 |     public: | 
 | 52 |         friend class FileA3D; | 
| Jason Sams | 48ecf6a | 2013-07-09 15:35:29 -0700 | [diff] [blame] | 53 |         const char *getObjectName() const { | 
| Alex Sakhartchouk | b825f67 | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 54 |             return mObjectName; | 
 | 55 |         } | 
 | 56 |         RsA3DClassID getType() const { | 
 | 57 |             return mType; | 
 | 58 |         } | 
| Jason Sams | 48ecf6a | 2013-07-09 15:35:29 -0700 | [diff] [blame] | 59 |  | 
 | 60 |         ~A3DIndexEntry(); | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 61 |     }; | 
 | 62 |  | 
| Alex Sakhartchouk | b825f67 | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 63 |     bool load(FILE *f); | 
| Alex Sakhartchouk | 5224a27 | 2011-01-07 11:12:08 -0800 | [diff] [blame] | 64 |     bool load(Asset *asset); | 
| Alex Sakhartchouk | b825f67 | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 65 |     bool load(const void *data, size_t length); | 
 | 66 |  | 
 | 67 |     size_t getNumIndexEntries() const; | 
 | 68 |     const A3DIndexEntry* getIndexEntry(size_t index) const; | 
 | 69 |     ObjectBase *initializeFromEntry(size_t index); | 
| Alex Sakhartchouk | fb6b614 | 2010-05-21 12:53:13 -0700 | [diff] [blame] | 70 |  | 
| Jason Sams | e3150cf | 2012-07-24 18:10:20 -0700 | [diff] [blame] | 71 |     void appendToFile(Context *rsc, ObjectBase *obj); | 
| Alex Sakhartchouk | fb6b614 | 2010-05-21 12:53:13 -0700 | [diff] [blame] | 72 |     bool writeFile(const char *filename); | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 73 |  | 
| Alex Sakhartchouk | b825f67 | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 74 |     // Currently files do not get serialized, | 
 | 75 |     // but we need to inherit from ObjectBase for ref tracking | 
| Jason Sams | e3150cf | 2012-07-24 18:10:20 -0700 | [diff] [blame] | 76 |     virtual void serialize(Context *rsc, OStream *stream) const { | 
| Alex Sakhartchouk | b825f67 | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 77 |     } | 
 | 78 |     virtual RsA3DClassID getClassId() const { | 
 | 79 |         return RS_A3D_CLASS_ID_UNKNOWN; | 
 | 80 |     } | 
 | 81 |  | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 82 | protected: | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 83 |  | 
| Alex Sakhartchouk | b825f67 | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 84 |     void parseHeader(IStream *headerStream); | 
 | 85 |  | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 86 |     const uint8_t * mData; | 
 | 87 |     void * mAlloc; | 
 | 88 |     uint64_t mDataSize; | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 89 |  | 
| Alex Sakhartchouk | fb6b614 | 2010-05-21 12:53:13 -0700 | [diff] [blame] | 90 |     OStream *mWriteStream; | 
| Miao Wang | 82e135c | 2017-02-27 23:35:35 -0800 | [diff] [blame] | 91 |     std::vector<A3DIndexEntry*> mWriteIndex; | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 92 |  | 
| Alex Sakhartchouk | fb6b614 | 2010-05-21 12:53:13 -0700 | [diff] [blame] | 93 |     IStream *mReadStream; | 
| Miao Wang | 82e135c | 2017-02-27 23:35:35 -0800 | [diff] [blame] | 94 |     std::vector<A3DIndexEntry*> mIndex; | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 95 | }; | 
 | 96 |  | 
 | 97 |  | 
| Rahul Chaudhry | 7974fc0 | 2017-02-09 12:33:28 -0800 | [diff] [blame] | 98 | } // namespace renderscript | 
 | 99 | } // namespace android | 
| Jason Sams | a5597fc | 2009-07-08 18:01:53 -0700 | [diff] [blame] | 100 | #endif //ANDROID_RS_FILE_A3D_H | 
| Yang Ni | b8353c5 | 2015-02-14 18:00:59 -0800 | [diff] [blame] | 101 |  | 
 | 102 |  |