rsFileA3D.h revision 5224a27798f89093b13722b41143551a057ce550
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 "RenderScript.h" 21a5597fcd411badad50c1345b3eca26453da45bbbJason Sams#include "rsMesh.h" 22a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 23a5597fcd411badad50c1345b3eca26453da45bbbJason Sams#include <utils/String8.h> 245224a27798f89093b13722b41143551a057ce550Alex Sakhartchouk#include <utils/Asset.h> 25fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include "rsStream.h" 26a5597fcd411badad50c1345b3eca26453da45bbbJason Sams#include <stdio.h> 27a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 28b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk#define A3D_MAGIC_KEY "Android3D_ff" 29b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk 30a5597fcd411badad50c1345b3eca26453da45bbbJason Sams// --------------------------------------------------------------------------- 31a5597fcd411badad50c1345b3eca26453da45bbbJason Samsnamespace android { 32b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk 33a5597fcd411badad50c1345b3eca26453da45bbbJason Samsnamespace renderscript { 34a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 35afb743aca56c18beb7ab924e75cb6e070ef3e55aAlex Sakhartchoukclass FileA3D : public ObjectBase { 36a5597fcd411badad50c1345b3eca26453da45bbbJason Samspublic: 37b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk FileA3D(Context *rsc); 38a5597fcd411badad50c1345b3eca26453da45bbbJason Sams ~FileA3D(); 39a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 40a5597fcd411badad50c1345b3eca26453da45bbbJason Sams uint32_t mMajorVersion; 41a5597fcd411badad50c1345b3eca26453da45bbbJason Sams uint32_t mMinorVersion; 42a5597fcd411badad50c1345b3eca26453da45bbbJason Sams uint64_t mIndexOffset; 43a5597fcd411badad50c1345b3eca26453da45bbbJason Sams uint64_t mStringTableOffset; 44a5597fcd411badad50c1345b3eca26453da45bbbJason Sams bool mUse64BitOffsets; 45a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 46b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk class A3DIndexEntry { 47b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk String8 mObjectName; 48b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk RsA3DClassID mType; 49a5597fcd411badad50c1345b3eca26453da45bbbJason Sams uint64_t mOffset; 50b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk uint64_t mLength; 51b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk ObjectBase *mRsObj; 52b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk public: 53b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk friend class FileA3D; 54b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk const String8 &getObjectName() const { 55b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk return mObjectName; 56b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk } 57b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk RsA3DClassID getType() const { 58b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk return mType; 59b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk } 60a5597fcd411badad50c1345b3eca26453da45bbbJason Sams }; 61a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 62b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk bool load(FILE *f); 635224a27798f89093b13722b41143551a057ce550Alex Sakhartchouk bool load(Asset *asset); 64b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk bool load(const void *data, size_t length); 65b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk 66b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk size_t getNumIndexEntries() const; 67b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk const A3DIndexEntry* getIndexEntry(size_t index) const; 68b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk ObjectBase *initializeFromEntry(size_t index); 69a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 70fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk void appendToFile(ObjectBase *obj); 71fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk bool writeFile(const char *filename); 72a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 73b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk // Currently files do not get serialized, 74b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk // but we need to inherit from ObjectBase for ref tracking 75b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk virtual void serialize(OStream *stream) const { 76b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk } 77b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk virtual RsA3DClassID getClassId() const { 78b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk return RS_A3D_CLASS_ID_UNKNOWN; 79b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk } 80b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk 81fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchoukprotected: 82a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 83b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk void parseHeader(IStream *headerStream); 84b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk 85a5597fcd411badad50c1345b3eca26453da45bbbJason Sams const uint8_t * mData; 86a5597fcd411badad50c1345b3eca26453da45bbbJason Sams void * mAlloc; 87a5597fcd411badad50c1345b3eca26453da45bbbJason Sams uint64_t mDataSize; 885224a27798f89093b13722b41143551a057ce550Alex Sakhartchouk Asset *mAsset; 89a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 90fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk OStream *mWriteStream; 91fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk Vector<A3DIndexEntry*> mWriteIndex; 92a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 93fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk IStream *mReadStream; 94fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk Vector<A3DIndexEntry*> mIndex; 95a5597fcd411badad50c1345b3eca26453da45bbbJason Sams}; 96a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 97a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 98a5597fcd411badad50c1345b3eca26453da45bbbJason Sams} 99a5597fcd411badad50c1345b3eca26453da45bbbJason Sams} 100a5597fcd411badad50c1345b3eca26453da45bbbJason Sams#endif //ANDROID_RS_FILE_A3D_H 101a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 102a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 103