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