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
22fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk#include "rsStream.h"
23a5597fcd411badad50c1345b3eca26453da45bbbJason Sams#include <stdio.h>
2482e135c4bbe18855d8ed02632bb074f8da0b96e0Miao Wang#include <vector>
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:
3610ab8bb0fa510bdb577adce5e67b6bf35882a9ddChih-Hung Hsieh    explicit 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 {
4648ecf6a5e85a9a832f41393ed2802385bb8b5db8Jason Sams        const char *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;
5348ecf6a5e85a9a832f41393ed2802385bb8b5db8Jason Sams        const char *getObjectName() const {
54b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk            return mObjectName;
55b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk        }
56b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk        RsA3DClassID getType() const {
57b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk            return mType;
58b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk        }
5948ecf6a5e85a9a832f41393ed2802385bb8b5db8Jason Sams
6048ecf6a5e85a9a832f41393ed2802385bb8b5db8Jason Sams        ~A3DIndexEntry();
61a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    };
62a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
63b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk    bool load(FILE *f);
645224a27798f89093b13722b41143551a057ce550Alex Sakhartchouk    bool load(Asset *asset);
65b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk    bool load(const void *data, size_t length);
66b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk
67b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk    size_t getNumIndexEntries() const;
68b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk    const A3DIndexEntry* getIndexEntry(size_t index) const;
69b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk    ObjectBase *initializeFromEntry(size_t index);
70a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
71e3150cfb3edb028407669e4a65e087eae77e718cJason Sams    void appendToFile(Context *rsc, ObjectBase *obj);
72fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    bool writeFile(const char *filename);
73a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
74b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk    // Currently files do not get serialized,
75b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk    // but we need to inherit from ObjectBase for ref tracking
76e3150cfb3edb028407669e4a65e087eae77e718cJason Sams    virtual void serialize(Context *rsc, OStream *stream) const {
77b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk    }
78b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk    virtual RsA3DClassID getClassId() const {
79b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk        return RS_A3D_CLASS_ID_UNKNOWN;
80b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk    }
81b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk
82fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchoukprotected:
83a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
84b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk    void parseHeader(IStream *headerStream);
85b825f67adb5d1e1751fe108e6dbf9c6f2555c283Alex Sakhartchouk
86a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    const uint8_t * mData;
87a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    void * mAlloc;
88a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    uint64_t mDataSize;
89a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
90fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    OStream *mWriteStream;
9182e135c4bbe18855d8ed02632bb074f8da0b96e0Miao Wang    std::vector<A3DIndexEntry*> mWriteIndex;
92a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
93fb6b614bcea88a587a7ea4530be45ff0ffa0210eAlex Sakhartchouk    IStream *mReadStream;
9482e135c4bbe18855d8ed02632bb074f8da0b96e0Miao Wang    std::vector<A3DIndexEntry*> mIndex;
95a5597fcd411badad50c1345b3eca26453da45bbbJason Sams};
96a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
97a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
987974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace renderscript
997974fc03e11f3a8dd40f794f3b33b4889483090cRahul Chaudhry} // namespace android
100a5597fcd411badad50c1345b3eca26453da45bbbJason Sams#endif //ANDROID_RS_FILE_A3D_H
101b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni
102b8353c5943f4038fd7f08db3d958390ce9418798Yang Ni
103