FileA3D.java revision 460a04971c494fec39ffcb38e873bb8fdd82d113
1aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk/* 265c80f824711f084c4ece9204f543a7809534294Jason Sams * Copyright (C) 2008-2012 The Android Open Source Project 3aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * 4aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * Licensed under the Apache License, Version 2.0 (the "License"); 5aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * you may not use this file except in compliance with the License. 6aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * You may obtain a copy of the License at 7aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * 8aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * http://www.apache.org/licenses/LICENSE-2.0 9aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * 10aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * Unless required by applicable law or agreed to in writing, software 11aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * distributed under the License is distributed on an "AS IS" BASIS, 12aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * See the License for the specific language governing permissions and 14aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * limitations under the License. 15aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk */ 16aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 17aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukpackage android.renderscript; 18aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 19e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchoukimport java.io.File; 20aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukimport java.io.IOException; 21aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukimport java.io.InputStream; 22aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 23aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukimport android.content.res.AssetManager; 24e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchoukimport android.content.res.Resources; 25aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukimport android.graphics.Bitmap; 26aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukimport android.graphics.BitmapFactory; 27aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukimport android.util.Log; 28aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukimport android.util.TypedValue; 29aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 309c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 31a90842283e322b1210e2bea5850b05177e3d87afTim Murray * @hide 3265c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 33c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * FileA3D allows users to load RenderScript objects from files 34f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * or resources stored on disk. It could be used to load items 35c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * such as 3D geometry data converted to a RenderScript format from 36f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * content creation tools. Currently only meshes are supported 37f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * in FileA3D. 38f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 39f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * When successfully loaded, FileA3D will contain a list of 40f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * index entries for all the objects stored inside it. 41aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * 42aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk **/ 43aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukpublic class FileA3D extends BaseObj { 44aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 459c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 4665c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 47f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Specifies what renderscript object type is contained within 48f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * the FileA3D IndexEntry 49f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk **/ 50e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk public enum EntryType { 51e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 529c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 5365c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 54ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * Unknown or or invalid object, nothing will be loaded 55ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk **/ 56e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk UNKNOWN (0), 579c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 5865c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 59c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * RenderScript Mesh object 60ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk **/ 61e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk MESH (1); 62e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 63e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk int mID; 64e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk EntryType(int id) { 65e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk mID = id; 66e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 67e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 68e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk static EntryType toEntryType(int intID) { 69e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk return EntryType.values()[intID]; 70e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 71e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 72e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 739c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 7465c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 75c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * IndexEntry contains information about one of the RenderScript 76f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * objects inside the file's index. It could be used to query the 7711518acc8c416023d8c2192b441a1767205676d9Robert Ly * object's type and also name and load the object itself if 78f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * necessary. 79f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 80dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk public static class IndexEntry { 81aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk RenderScript mRS; 82aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk int mIndex; 83460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long mID; 84aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk String mName; 85e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk EntryType mEntryType; 86aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk BaseObj mLoadedObj; 87aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 889c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 8965c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 90ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * Returns the name of a renderscript object the index entry 91ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * describes 92ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * 93f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @return name of a renderscript object the index entry 94ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * describes 95ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * 96f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 97aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk public String getName() { 98aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return mName; 99aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 100aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1019c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 10265c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 103ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * Returns the type of a renderscript object the index entry 104ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * describes 105f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @return type of a renderscript object the index entry 106f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * describes 107f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 108e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk public EntryType getEntryType() { 109e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk return mEntryType; 110e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 111e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 1129c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 11365c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 114ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * Used to load the object described by the index entry 115ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return base renderscript object described by the entry 116f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 117aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk public BaseObj getObject() { 118dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mRS.validate(); 119dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk BaseObj obj = internalCreate(mRS, this); 120dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk return obj; 121dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 122dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1239c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 12465c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 125ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * Used to load the mesh described by the index entry, object 126ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * described by the index entry must be a renderscript mesh 127ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * 128f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @return renderscript mesh object described by the entry 129f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 130e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk public Mesh getMesh() { 131e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk return (Mesh)getObject(); 132e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 133e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 134dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk static synchronized BaseObj internalCreate(RenderScript rs, IndexEntry entry) { 135dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(entry.mLoadedObj != null) { 136dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk return entry.mLoadedObj; 137aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 138aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 139e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk // to be purged on cleanup 140e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk if(entry.mEntryType == EntryType.UNKNOWN) { 141aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return null; 142aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 143aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 144dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int objectID = rs.nFileA3DGetEntryByIndex(entry.mID, entry.mIndex); 145aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk if(objectID == 0) { 146aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return null; 147aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 148aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 149e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk switch (entry.mEntryType) { 150aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk case MESH: 151dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk entry.mLoadedObj = new Mesh(objectID, rs); 152aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk break; 153aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 154aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 155dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk entry.mLoadedObj.updateFromNative(); 156dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk return entry.mLoadedObj; 157aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 158aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 159460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray IndexEntry(RenderScript rs, int index, long id, String name, EntryType type) { 160aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk mRS = rs; 161aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk mIndex = index; 162aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk mID = id; 163aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk mName = name; 164e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk mEntryType = type; 165aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk mLoadedObj = null; 166aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 167aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 168aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 169aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk IndexEntry[] mFileEntries; 170581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk InputStream mInputStream; 171aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 172460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray FileA3D(long id, RenderScript rs, InputStream stream) { 1730de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 174581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk mInputStream = stream; 175aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 176aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 177aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk private void initEntries() { 178e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams int numFileEntries = mRS.nFileA3DGetNumIndexEntries(getID(mRS)); 179aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk if(numFileEntries <= 0) { 180aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return; 181aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 182aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 183aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk mFileEntries = new IndexEntry[numFileEntries]; 184aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk int[] ids = new int[numFileEntries]; 185aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk String[] names = new String[numFileEntries]; 186aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 187e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nFileA3DGetIndexEntries(getID(mRS), numFileEntries, ids, names); 188aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 189aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk for(int i = 0; i < numFileEntries; i ++) { 190e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mFileEntries[i] = new IndexEntry(mRS, i, getID(mRS), names[i], EntryType.toEntryType(ids[i])); 191aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 192aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 193aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1949c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 19565c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 196ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * Returns the number of objects stored inside the a3d file 197ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * 198ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return the number of objects stored inside the a3d file 199f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 200e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk public int getIndexEntryCount() { 201aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk if(mFileEntries == null) { 202aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return 0; 203aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 204aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return mFileEntries.length; 205aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 206aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 2079c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 20865c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 209f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Returns an index entry from the list of all objects inside 210f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * FileA3D 211f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 212f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param index number of the entry from the list to return 213ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * 214ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return entry in the a3d file described by the index 215f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 216aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk public IndexEntry getIndexEntry(int index) { 217e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk if(getIndexEntryCount() == 0 || index < 0 || index >= mFileEntries.length) { 218aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return null; 219aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 220aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return mFileEntries[index]; 221aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 222aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 2239c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 22465c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 225f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Creates a FileA3D object from an asset stored on disk 226f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 227f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the object will belong. 228f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param mgr asset manager used to load asset 229f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param path location of the file to load 230f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 231ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return a3d file containing renderscript objects 232f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 233b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public FileA3D createFromAsset(RenderScript rs, AssetManager mgr, String path) { 234b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk rs.validate(); 235460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long fileId = rs.nFileA3DCreateFromAsset(mgr, path); 236b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 237b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk if(fileId == 0) { 238b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unable to create a3d file from asset " + path); 239b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 240b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk FileA3D fa3d = new FileA3D(fileId, rs, null); 241b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fa3d.initEntries(); 242b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return fa3d; 243e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 244e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 2459c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 24665c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 247f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Creates a FileA3D object from a file stored on disk 248f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 249f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the object will belong. 250f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param path location of the file to load 251f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 252ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return a3d file containing renderscript objects 253f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 254b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public FileA3D createFromFile(RenderScript rs, String path) { 255460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long fileId = rs.nFileA3DCreateFromFile(path); 256b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 257b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk if(fileId == 0) { 258b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unable to create a3d file from " + path); 259b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 260b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk FileA3D fa3d = new FileA3D(fileId, rs, null); 261b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fa3d.initEntries(); 262b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return fa3d; 263e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 264e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 2659c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 26665c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 267f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Creates a FileA3D object from a file stored on disk 268f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 269f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the object will belong. 270f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param path location of the file to load 271f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 272ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return a3d file containing renderscript objects 273f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 274b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public FileA3D createFromFile(RenderScript rs, File path) { 275e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk return createFromFile(rs, path.getAbsolutePath()); 276e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 277e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 2789c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 27965c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 280f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Creates a FileA3D object from an application resource 281f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 282f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the object will belong. 283f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param res resource manager used for loading 284f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param id resource to create FileA3D from 285f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 286ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return a3d file containing renderscript objects 287f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 288b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public FileA3D createFromResource(RenderScript rs, Resources res, int id) { 289aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 290aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk rs.validate(); 291aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk InputStream is = null; 292aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk try { 293b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk is = res.openRawResource(id); 294b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } catch (Exception e) { 295b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unable to open resource " + id); 296b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 297aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 298460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long fileId = 0; 299b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk if (is instanceof AssetManager.AssetInputStream) { 300aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk int asset = ((AssetManager.AssetInputStream) is).getAssetInt(); 301b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fileId = rs.nFileA3DCreateFromAssetStream(asset); 302b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } else { 303b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unsupported asset stream"); 304b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 305aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 306b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk if(fileId == 0) { 307b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unable to create a3d file from resource " + id); 308aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 309b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk FileA3D fa3d = new FileA3D(fileId, rs, is); 310b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fa3d.initEntries(); 311b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return fa3d; 312aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 313aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 314aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 315