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.InputStream; 21aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 22aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukimport android.content.res.AssetManager; 23e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchoukimport android.content.res.Resources; 24aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 259c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 26a90842283e322b1210e2bea5850b05177e3d87afTim Murray * @hide 2765c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 28c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * FileA3D allows users to load RenderScript objects from files 29f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * or resources stored on disk. It could be used to load items 30c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * such as 3D geometry data converted to a RenderScript format from 31f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * content creation tools. Currently only meshes are supported 32f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * in FileA3D. 33f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 34f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * When successfully loaded, FileA3D will contain a list of 35f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * index entries for all the objects stored inside it. 36aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk * 37aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk **/ 38aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchoukpublic class FileA3D extends BaseObj { 39aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 409c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 4165c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 42f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Specifies what renderscript object type is contained within 43f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * the FileA3D IndexEntry 44f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk **/ 45e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk public enum EntryType { 46e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 479c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 4865c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 49ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * Unknown or or invalid object, nothing will be loaded 50ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk **/ 51e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk UNKNOWN (0), 529c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 5365c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 54c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * RenderScript Mesh object 55ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk **/ 56e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk MESH (1); 57e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 58e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk int mID; 59e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk EntryType(int id) { 60e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk mID = id; 61e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 62e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 63e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk static EntryType toEntryType(int intID) { 64e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk return EntryType.values()[intID]; 65e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 66e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 67e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 689c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 6965c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 70c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * IndexEntry contains information about one of the RenderScript 71f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * objects inside the file's index. It could be used to query the 7211518acc8c416023d8c2192b441a1767205676d9Robert Ly * object's type and also name and load the object itself if 73f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * necessary. 74f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 75dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk public static class IndexEntry { 76aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk RenderScript mRS; 77aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk int mIndex; 78460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long mID; 79aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk String mName; 80e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk EntryType mEntryType; 81aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk BaseObj mLoadedObj; 82aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 839c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 8465c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 85ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * Returns the name of a renderscript object the index entry 86ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * describes 87ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * 88f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @return name of a renderscript object the index entry 89ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * describes 90ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * 91f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 92aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk public String getName() { 93aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return mName; 94aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 95aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 969c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 9765c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 98ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * Returns the type of a renderscript object the index entry 99ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * describes 100f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @return type of a renderscript object the index entry 101f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * describes 102f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 103e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk public EntryType getEntryType() { 104e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk return mEntryType; 105e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 106e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 1079c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 10865c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 109ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * Used to load the object described by the index entry 110ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return base renderscript object described by the entry 111f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 112aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk public BaseObj getObject() { 113dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mRS.validate(); 114dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk BaseObj obj = internalCreate(mRS, this); 115dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk return obj; 116dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 117dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1189c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 11965c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 120ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * Used to load the mesh described by the index entry, object 121ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * described by the index entry must be a renderscript mesh 122ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * 123f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @return renderscript mesh object described by the entry 124f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 125e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk public Mesh getMesh() { 126e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk return (Mesh)getObject(); 127e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 128e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 129dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk static synchronized BaseObj internalCreate(RenderScript rs, IndexEntry entry) { 130dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(entry.mLoadedObj != null) { 131dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk return entry.mLoadedObj; 132aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 133aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 134e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk // to be purged on cleanup 135e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk if(entry.mEntryType == EntryType.UNKNOWN) { 136aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return null; 137aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 138aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1390e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat long objectID = rs.nFileA3DGetEntryByIndex(entry.mID, entry.mIndex); 140aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk if(objectID == 0) { 141aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return null; 142aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 143aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 144e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk switch (entry.mEntryType) { 145aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk case MESH: 146dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk entry.mLoadedObj = new Mesh(objectID, rs); 147aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk break; 148bca8e6d35fc16506ce1070000ce3804bbeaee399Jason Sams 149bca8e6d35fc16506ce1070000ce3804bbeaee399Jason Sams default: 150bca8e6d35fc16506ce1070000ce3804bbeaee399Jason Sams throw new RSRuntimeException("Unrecognized object type in file."); 151aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 152aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 153dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk entry.mLoadedObj.updateFromNative(); 154dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk return entry.mLoadedObj; 155aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 156aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 157460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray IndexEntry(RenderScript rs, int index, long id, String name, EntryType type) { 158aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk mRS = rs; 159aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk mIndex = index; 160aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk mID = id; 161aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk mName = name; 162e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk mEntryType = type; 163aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk mLoadedObj = null; 164aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 165aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 166aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 167aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk IndexEntry[] mFileEntries; 168581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk InputStream mInputStream; 169aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 170460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray FileA3D(long id, RenderScript rs, InputStream stream) { 1710de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 172581cc64028e8b8f66cec8105bf530b16d5fb34ebAlex Sakhartchouk mInputStream = stream; 173eb4dd08ec132f83745b8b28fa7da58eb4478b5b9Yang Ni guard.open("destroy"); 174aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 175aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 176aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk private void initEntries() { 177e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams int numFileEntries = mRS.nFileA3DGetNumIndexEntries(getID(mRS)); 178aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk if(numFileEntries <= 0) { 179aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return; 180aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 181aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 182aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk mFileEntries = new IndexEntry[numFileEntries]; 183aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk int[] ids = new int[numFileEntries]; 184aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk String[] names = new String[numFileEntries]; 185aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 186e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nFileA3DGetIndexEntries(getID(mRS), numFileEntries, ids, names); 187aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 188aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk for(int i = 0; i < numFileEntries; i ++) { 189e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mFileEntries[i] = new IndexEntry(mRS, i, getID(mRS), names[i], EntryType.toEntryType(ids[i])); 190aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 191aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 192aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 1939c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 19465c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 195ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * Returns the number of objects stored inside the a3d file 196ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * 197ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return the number of objects stored inside the a3d file 198f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 199e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk public int getIndexEntryCount() { 200aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk if(mFileEntries == null) { 201aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return 0; 202aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 203aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return mFileEntries.length; 204aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 205aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 2069c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 20765c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 208f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Returns an index entry from the list of all objects inside 209f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * FileA3D 210f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 211f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param index number of the entry from the list to return 212ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * 213ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return entry in the a3d file described by the index 214f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 215aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk public IndexEntry getIndexEntry(int index) { 216e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk if(getIndexEntryCount() == 0 || index < 0 || index >= mFileEntries.length) { 217aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return null; 218aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 219aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk return mFileEntries[index]; 220aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 221aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 2229c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 22365c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 224f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Creates a FileA3D object from an asset stored on disk 225f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 226f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the object will belong. 227f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param mgr asset manager used to load asset 228f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param path location of the file to load 229f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 230ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return a3d file containing renderscript objects 231f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 232b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public FileA3D createFromAsset(RenderScript rs, AssetManager mgr, String path) { 233b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk rs.validate(); 234460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long fileId = rs.nFileA3DCreateFromAsset(mgr, path); 235b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 236b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk if(fileId == 0) { 237b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unable to create a3d file from asset " + path); 238b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 239b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk FileA3D fa3d = new FileA3D(fileId, rs, null); 240b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fa3d.initEntries(); 241b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return fa3d; 242e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 243e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 2449c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 24565c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 246f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Creates a FileA3D object from a file stored on disk 247f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 248f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the object will belong. 249f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param path location of the file to load 250f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 251ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return a3d file containing renderscript objects 252f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 253b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public FileA3D createFromFile(RenderScript rs, String path) { 254460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long fileId = rs.nFileA3DCreateFromFile(path); 255b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk 256b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk if(fileId == 0) { 257b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unable to create a3d file from " + path); 258b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 259b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk FileA3D fa3d = new FileA3D(fileId, rs, null); 260b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fa3d.initEntries(); 261b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return fa3d; 262e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 263e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 2649c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 26565c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 266f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Creates a FileA3D object from a file stored on disk 267f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 268f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the object will belong. 269f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param path location of the file to load 270f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 271ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return a3d file containing renderscript objects 272f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 273b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public FileA3D createFromFile(RenderScript rs, File path) { 274e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk return createFromFile(rs, path.getAbsolutePath()); 275e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk } 276e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk 2779c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 27865c80f824711f084c4ece9204f543a7809534294Jason Sams * @deprecated in API 16 279f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * Creates a FileA3D object from an application resource 280f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 281f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the object will belong. 282f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param res resource manager used for loading 283f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param id resource to create FileA3D from 284f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * 285ec0d3353b16741c69681577eb43ccfea435eb4baAlex Sakhartchouk * @return a3d file containing renderscript objects 286f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk */ 287b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk static public FileA3D createFromResource(RenderScript rs, Resources res, int id) { 288aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 289aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk rs.validate(); 290aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk InputStream is = null; 291aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk try { 292b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk is = res.openRawResource(id); 293b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } catch (Exception e) { 294b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unable to open resource " + id); 295b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 296aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 297460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long fileId = 0; 298b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk if (is instanceof AssetManager.AssetInputStream) { 2990e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat long asset = ((AssetManager.AssetInputStream) is).getNativeAsset(); 300b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fileId = rs.nFileA3DCreateFromAssetStream(asset); 301b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } else { 302b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unsupported asset stream"); 303b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk } 304aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 305b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk if(fileId == 0) { 306b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk throw new RSRuntimeException("Unable to create a3d file from resource " + id); 307aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 308b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk FileA3D fa3d = new FileA3D(fileId, rs, is); 309b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk fa3d.initEntries(); 310b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk return fa3d; 311aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk 312aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk } 313aae74ad6144470c66e72b075ac3afeddb186fa98Alex Sakhartchouk} 314