164676f3c21a07d650069315572811570cbf8f728Jason Sams/* 264676f3c21a07d650069315572811570cbf8f728Jason Sams * Copyright (C) 2009 The Android Open Source Project 364676f3c21a07d650069315572811570cbf8f728Jason Sams * 464676f3c21a07d650069315572811570cbf8f728Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 564676f3c21a07d650069315572811570cbf8f728Jason Sams * you may not use this file except in compliance with the License. 664676f3c21a07d650069315572811570cbf8f728Jason Sams * You may obtain a copy of the License at 764676f3c21a07d650069315572811570cbf8f728Jason Sams * 864676f3c21a07d650069315572811570cbf8f728Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 964676f3c21a07d650069315572811570cbf8f728Jason Sams * 1064676f3c21a07d650069315572811570cbf8f728Jason Sams * Unless required by applicable law or agreed to in writing, software 1164676f3c21a07d650069315572811570cbf8f728Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1264676f3c21a07d650069315572811570cbf8f728Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1364676f3c21a07d650069315572811570cbf8f728Jason Sams * See the License for the specific language governing permissions and 1464676f3c21a07d650069315572811570cbf8f728Jason Sams * limitations under the License. 1564676f3c21a07d650069315572811570cbf8f728Jason Sams */ 1664676f3c21a07d650069315572811570cbf8f728Jason Sams 1764676f3c21a07d650069315572811570cbf8f728Jason Sams#ifndef ANDROID_RS_FILE_A3D_H 1864676f3c21a07d650069315572811570cbf8f728Jason Sams#define ANDROID_RS_FILE_A3D_H 1964676f3c21a07d650069315572811570cbf8f728Jason Sams 2064676f3c21a07d650069315572811570cbf8f728Jason Sams#include "RenderScript.h" 2164676f3c21a07d650069315572811570cbf8f728Jason Sams#include "rsFileA3DDecls.h" 2264676f3c21a07d650069315572811570cbf8f728Jason Sams#include "rsMesh.h" 2364676f3c21a07d650069315572811570cbf8f728Jason Sams 2464676f3c21a07d650069315572811570cbf8f728Jason Sams#include <utils/String8.h> 2564676f3c21a07d650069315572811570cbf8f728Jason Sams#include <stdio.h> 2664676f3c21a07d650069315572811570cbf8f728Jason Sams 2764676f3c21a07d650069315572811570cbf8f728Jason Sams// --------------------------------------------------------------------------- 2864676f3c21a07d650069315572811570cbf8f728Jason Samsnamespace android { 2964676f3c21a07d650069315572811570cbf8f728Jason Samsnamespace renderscript { 3064676f3c21a07d650069315572811570cbf8f728Jason Sams 3164676f3c21a07d650069315572811570cbf8f728Jason Samsclass FileA3D 3264676f3c21a07d650069315572811570cbf8f728Jason Sams{ 3364676f3c21a07d650069315572811570cbf8f728Jason Samspublic: 3464676f3c21a07d650069315572811570cbf8f728Jason Sams FileA3D(); 3564676f3c21a07d650069315572811570cbf8f728Jason Sams ~FileA3D(); 3664676f3c21a07d650069315572811570cbf8f728Jason Sams 3764676f3c21a07d650069315572811570cbf8f728Jason Sams uint32_t mMajorVersion; 3864676f3c21a07d650069315572811570cbf8f728Jason Sams uint32_t mMinorVersion; 3964676f3c21a07d650069315572811570cbf8f728Jason Sams uint64_t mIndexOffset; 4064676f3c21a07d650069315572811570cbf8f728Jason Sams uint64_t mStringTableOffset; 4164676f3c21a07d650069315572811570cbf8f728Jason Sams bool mUse64BitOffsets; 4264676f3c21a07d650069315572811570cbf8f728Jason Sams 4364676f3c21a07d650069315572811570cbf8f728Jason Sams struct A3DIndexEntry { 4464676f3c21a07d650069315572811570cbf8f728Jason Sams String8 mID; 4564676f3c21a07d650069315572811570cbf8f728Jason Sams A3DChunkType mType; 4664676f3c21a07d650069315572811570cbf8f728Jason Sams uint64_t mOffset; 4764676f3c21a07d650069315572811570cbf8f728Jason Sams void * mRsObj; 4864676f3c21a07d650069315572811570cbf8f728Jason Sams }; 4964676f3c21a07d650069315572811570cbf8f728Jason Sams 5064676f3c21a07d650069315572811570cbf8f728Jason Sams bool load(Context *rsc, FILE *f); 5164676f3c21a07d650069315572811570cbf8f728Jason Sams 5264676f3c21a07d650069315572811570cbf8f728Jason Samsprotected: 5364676f3c21a07d650069315572811570cbf8f728Jason Sams class IO 5464676f3c21a07d650069315572811570cbf8f728Jason Sams { 5564676f3c21a07d650069315572811570cbf8f728Jason Sams public: 5664676f3c21a07d650069315572811570cbf8f728Jason Sams IO(const uint8_t *, bool use64); 5764676f3c21a07d650069315572811570cbf8f728Jason Sams 5864676f3c21a07d650069315572811570cbf8f728Jason Sams float loadF() { 5964676f3c21a07d650069315572811570cbf8f728Jason Sams mPos = (mPos + 3) & (~3); 6064676f3c21a07d650069315572811570cbf8f728Jason Sams float tmp = reinterpret_cast<const float *>(&mData[mPos])[0]; 6164676f3c21a07d650069315572811570cbf8f728Jason Sams mPos += sizeof(float); 6264676f3c21a07d650069315572811570cbf8f728Jason Sams return tmp; 6364676f3c21a07d650069315572811570cbf8f728Jason Sams } 6464676f3c21a07d650069315572811570cbf8f728Jason Sams int32_t loadI32() { 6564676f3c21a07d650069315572811570cbf8f728Jason Sams mPos = (mPos + 3) & (~3); 6664676f3c21a07d650069315572811570cbf8f728Jason Sams int32_t tmp = reinterpret_cast<const int32_t *>(&mData[mPos])[0]; 6764676f3c21a07d650069315572811570cbf8f728Jason Sams mPos += sizeof(int32_t); 6864676f3c21a07d650069315572811570cbf8f728Jason Sams return tmp; 6964676f3c21a07d650069315572811570cbf8f728Jason Sams } 7064676f3c21a07d650069315572811570cbf8f728Jason Sams uint32_t loadU32() { 7164676f3c21a07d650069315572811570cbf8f728Jason Sams mPos = (mPos + 3) & (~3); 7264676f3c21a07d650069315572811570cbf8f728Jason Sams uint32_t tmp = reinterpret_cast<const uint32_t *>(&mData[mPos])[0]; 7364676f3c21a07d650069315572811570cbf8f728Jason Sams mPos += sizeof(uint32_t); 7464676f3c21a07d650069315572811570cbf8f728Jason Sams return tmp; 7564676f3c21a07d650069315572811570cbf8f728Jason Sams } 7664676f3c21a07d650069315572811570cbf8f728Jason Sams uint16_t loadU16() { 7764676f3c21a07d650069315572811570cbf8f728Jason Sams mPos = (mPos + 1) & (~1); 7864676f3c21a07d650069315572811570cbf8f728Jason Sams uint16_t tmp = reinterpret_cast<const uint16_t *>(&mData[mPos])[0]; 7964676f3c21a07d650069315572811570cbf8f728Jason Sams mPos += sizeof(uint16_t); 8064676f3c21a07d650069315572811570cbf8f728Jason Sams return tmp; 8164676f3c21a07d650069315572811570cbf8f728Jason Sams } 8264676f3c21a07d650069315572811570cbf8f728Jason Sams uint8_t loadU8() { 8364676f3c21a07d650069315572811570cbf8f728Jason Sams uint8_t tmp = reinterpret_cast<const uint8_t *>(&mData[mPos])[0]; 8464676f3c21a07d650069315572811570cbf8f728Jason Sams mPos += sizeof(uint8_t); 8564676f3c21a07d650069315572811570cbf8f728Jason Sams return tmp; 8664676f3c21a07d650069315572811570cbf8f728Jason Sams } 8764676f3c21a07d650069315572811570cbf8f728Jason Sams uint64_t loadOffset(); 8864676f3c21a07d650069315572811570cbf8f728Jason Sams void loadString(String8 *s); 8964676f3c21a07d650069315572811570cbf8f728Jason Sams uint64_t getPos() const {return mPos;} 9064676f3c21a07d650069315572811570cbf8f728Jason Sams const uint8_t * getPtr() const; 9164676f3c21a07d650069315572811570cbf8f728Jason Sams protected: 9264676f3c21a07d650069315572811570cbf8f728Jason Sams const uint8_t * mData; 9364676f3c21a07d650069315572811570cbf8f728Jason Sams uint64_t mPos; 9464676f3c21a07d650069315572811570cbf8f728Jason Sams bool mUse64; 9564676f3c21a07d650069315572811570cbf8f728Jason Sams }; 9664676f3c21a07d650069315572811570cbf8f728Jason Sams 9764676f3c21a07d650069315572811570cbf8f728Jason Sams 9864676f3c21a07d650069315572811570cbf8f728Jason Sams bool process(Context *rsc); 9964676f3c21a07d650069315572811570cbf8f728Jason Sams bool processIndex(Context *rsc, A3DIndexEntry *); 10064676f3c21a07d650069315572811570cbf8f728Jason Sams void processChunk_Mesh(Context *rsc, IO *io, A3DIndexEntry *ie); 10164676f3c21a07d650069315572811570cbf8f728Jason Sams void processChunk_Primitive(Context *rsc, IO *io, A3DIndexEntry *ie); 10264676f3c21a07d650069315572811570cbf8f728Jason Sams void processChunk_Verticies(Context *rsc, IO *io, A3DIndexEntry *ie); 10364676f3c21a07d650069315572811570cbf8f728Jason Sams void processChunk_Element(Context *rsc, IO *io, A3DIndexEntry *ie); 10464676f3c21a07d650069315572811570cbf8f728Jason Sams void processChunk_ElementSource(Context *rsc, IO *io, A3DIndexEntry *ie); 10564676f3c21a07d650069315572811570cbf8f728Jason Sams 10664676f3c21a07d650069315572811570cbf8f728Jason Sams const uint8_t * mData; 10764676f3c21a07d650069315572811570cbf8f728Jason Sams void * mAlloc; 10864676f3c21a07d650069315572811570cbf8f728Jason Sams uint64_t mDataSize; 10964676f3c21a07d650069315572811570cbf8f728Jason Sams Context * mRsc; 11064676f3c21a07d650069315572811570cbf8f728Jason Sams 11164676f3c21a07d650069315572811570cbf8f728Jason Sams Vector<A3DIndexEntry> mIndex; 11264676f3c21a07d650069315572811570cbf8f728Jason Sams Vector<String8> mStrings; 11364676f3c21a07d650069315572811570cbf8f728Jason Sams Vector<uint32_t> mStringIndexValues; 11464676f3c21a07d650069315572811570cbf8f728Jason Sams 11564676f3c21a07d650069315572811570cbf8f728Jason Sams}; 11664676f3c21a07d650069315572811570cbf8f728Jason Sams 11764676f3c21a07d650069315572811570cbf8f728Jason Sams 11864676f3c21a07d650069315572811570cbf8f728Jason Sams} 11964676f3c21a07d650069315572811570cbf8f728Jason Sams} 12064676f3c21a07d650069315572811570cbf8f728Jason Sams#endif //ANDROID_RS_FILE_A3D_H 12164676f3c21a07d650069315572811570cbf8f728Jason Sams 12264676f3c21a07d650069315572811570cbf8f728Jason Sams 123