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