rsFileA3D.h revision a5597fcd411badad50c1345b3eca26453da45bbb
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 "rsFileA3DDecls.h"
22a5597fcd411badad50c1345b3eca26453da45bbbJason Sams#include "rsMesh.h"
23a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
24a5597fcd411badad50c1345b3eca26453da45bbbJason Sams#include <utils/String8.h>
25a5597fcd411badad50c1345b3eca26453da45bbbJason Sams#include <stdio.h>
26a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
27a5597fcd411badad50c1345b3eca26453da45bbbJason Sams// ---------------------------------------------------------------------------
28a5597fcd411badad50c1345b3eca26453da45bbbJason Samsnamespace android {
29a5597fcd411badad50c1345b3eca26453da45bbbJason Samsnamespace renderscript {
30a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
31a5597fcd411badad50c1345b3eca26453da45bbbJason Samsclass FileA3D
32a5597fcd411badad50c1345b3eca26453da45bbbJason Sams{
33a5597fcd411badad50c1345b3eca26453da45bbbJason Samspublic:
34a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    FileA3D();
35a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    ~FileA3D();
36a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
37a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    uint32_t mMajorVersion;
38a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    uint32_t mMinorVersion;
39a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    uint64_t mIndexOffset;
40a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    uint64_t mStringTableOffset;
41a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    bool mUse64BitOffsets;
42a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
43a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    struct A3DIndexEntry {
44a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        String8 mID;
45a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        A3DChunkType mType;
46a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        uint64_t mOffset;
47a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        void * mRsObj;
48a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    };
49a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
50a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    bool load(Context *rsc, FILE *f);
51a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
52a5597fcd411badad50c1345b3eca26453da45bbbJason Samsprotected:
53a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    class IO
54a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    {
55a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    public:
56a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        IO(const uint8_t *, bool use64);
57a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
58a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        float loadF() {
59a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            mPos = (mPos + 3) & (~3);
60a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            float tmp = reinterpret_cast<const float *>(&mData[mPos])[0];
61a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            mPos += sizeof(float);
62a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            return tmp;
63a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        }
64a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        int32_t loadI32() {
65a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            mPos = (mPos + 3) & (~3);
66a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            int32_t tmp = reinterpret_cast<const int32_t *>(&mData[mPos])[0];
67a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            mPos += sizeof(int32_t);
68a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            return tmp;
69a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        }
70a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        uint32_t loadU32() {
71a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            mPos = (mPos + 3) & (~3);
72a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            uint32_t tmp = reinterpret_cast<const uint32_t *>(&mData[mPos])[0];
73a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            mPos += sizeof(uint32_t);
74a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            return tmp;
75a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        }
76a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        uint16_t loadU16() {
77a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            mPos = (mPos + 1) & (~1);
78a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            uint16_t tmp = reinterpret_cast<const uint16_t *>(&mData[mPos])[0];
79a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            mPos += sizeof(uint16_t);
80a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            return tmp;
81a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        }
82a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        uint8_t loadU8() {
83a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            uint8_t tmp = reinterpret_cast<const uint8_t *>(&mData[mPos])[0];
84a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            mPos += sizeof(uint8_t);
85a5597fcd411badad50c1345b3eca26453da45bbbJason Sams            return tmp;
86a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        }
87a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        uint64_t loadOffset();
88a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        void loadString(String8 *s);
89a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        uint64_t getPos() const {return mPos;}
90a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        const uint8_t * getPtr() const;
91a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    protected:
92a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        const uint8_t * mData;
93a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        uint64_t mPos;
94a5597fcd411badad50c1345b3eca26453da45bbbJason Sams        bool mUse64;
95a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    };
96a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
97a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
98a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    bool process(Context *rsc);
99a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    bool processIndex(Context *rsc, A3DIndexEntry *);
100a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    void processChunk_Mesh(Context *rsc, IO *io, A3DIndexEntry *ie);
101a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    void processChunk_Primitive(Context *rsc, IO *io, A3DIndexEntry *ie);
102a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    void processChunk_Verticies(Context *rsc, IO *io, A3DIndexEntry *ie);
103a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    void processChunk_Element(Context *rsc, IO *io, A3DIndexEntry *ie);
104a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    void processChunk_ElementSource(Context *rsc, IO *io, A3DIndexEntry *ie);
105a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
106a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    const uint8_t * mData;
107a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    void * mAlloc;
108a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    uint64_t mDataSize;
109a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    Context * mRsc;
110a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
111a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    Vector<A3DIndexEntry> mIndex;
112a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    Vector<String8> mStrings;
113a5597fcd411badad50c1345b3eca26453da45bbbJason Sams    Vector<uint32_t> mStringIndexValues;
114a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
115a5597fcd411badad50c1345b3eca26453da45bbbJason Sams};
116a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
117a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
118a5597fcd411badad50c1345b3eca26453da45bbbJason Sams}
119a5597fcd411badad50c1345b3eca26453da45bbbJason Sams}
120a5597fcd411badad50c1345b3eca26453da45bbbJason Sams#endif //ANDROID_RS_FILE_A3D_H
121a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
122a5597fcd411badad50c1345b3eca26453da45bbbJason Sams
123