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