rsFileA3D.h revision afb743aca56c18beb7ab924e75cb6e070ef3e55a
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> 24fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include "rsStream.h" 25a5597fcd411badad50c1345b3eca26453da45bbbJason Sams#include <stdio.h> 26a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 27b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk#define A3D_MAGIC_KEY "Android3D_ff" 28b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk 29a5597fcd411badad50c1345b3eca26453da45bbbJason Sams// --------------------------------------------------------------------------- 30a5597fcd411badad50c1345b3eca26453da45bbbJason Samsnamespace android { 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); 62b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk bool load(const void *data, size_t length); 63b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk 64b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk size_t getNumIndexEntries() const; 65b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk const A3DIndexEntry* getIndexEntry(size_t index) const; 66b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk ObjectBase *initializeFromEntry(size_t index); 67a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 68fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk void appendToFile(ObjectBase *obj); 69fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk bool writeFile(const char *filename); 70a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 71b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk // Currently files do not get serialized, 72b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk // but we need to inherit from ObjectBase for ref tracking 73b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk virtual void serialize(OStream *stream) const { 74b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk } 75b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk virtual RsA3DClassID getClassId() const { 76b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk return RS_A3D_CLASS_ID_UNKNOWN; 77b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk } 78b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk 79fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchoukprotected: 80a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 81b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk void parseHeader(IStream *headerStream); 82b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk 83a5597fcd411badad50c1345b3eca26453da45bbbJason Sams const uint8_t * mData; 84a5597fcd411badad50c1345b3eca26453da45bbbJason Sams void * mAlloc; 85a5597fcd411badad50c1345b3eca26453da45bbbJason Sams uint64_t mDataSize; 86a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 87fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk OStream *mWriteStream; 88fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk Vector<A3DIndexEntry*> mWriteIndex; 89a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 90fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk IStream *mReadStream; 91fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk Vector<A3DIndexEntry*> mIndex; 92a5597fcd411badad50c1345b3eca26453da45bbbJason Sams}; 93a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 94a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 95a5597fcd411badad50c1345b3eca26453da45bbbJason Sams} 96a5597fcd411badad50c1345b3eca26453da45bbbJason Sams} 97a5597fcd411badad50c1345b3eca26453da45bbbJason Sams#endif //ANDROID_RS_FILE_A3D_H 98a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 99a5597fcd411badad50c1345b3eca26453da45bbbJason Sams 100