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