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