| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 1 | /* | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 2 | * Copyright (C) 2008-2012 The Android Open Source Project | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 3 | * | 
|  | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | 5 | * you may not use this file except in compliance with the License. | 
|  | 6 | * You may obtain a copy of the License at | 
|  | 7 | * | 
|  | 8 | *      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 9 | * | 
|  | 10 | * Unless required by applicable law or agreed to in writing, software | 
|  | 11 | * distributed under the License is distributed on an "AS IS" BASIS, | 
|  | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | 13 | * See the License for the specific language governing permissions and | 
|  | 14 | * limitations under the License. | 
|  | 15 | */ | 
|  | 16 |  | 
|  | 17 | package android.renderscript; | 
|  | 18 |  | 
| Artur Satayev | 2ebb31c | 2020-01-08 12:24:36 +0000 | [diff] [blame] | 19 | import android.compat.annotation.UnsupportedAppUsage; | 
| Austin Wang | a63a2c0 | 2019-12-19 06:38:19 +0000 | [diff] [blame] | 20 | import android.content.res.AssetManager; | 
|  | 21 | import android.content.res.Resources; | 
|  | 22 |  | 
| Artur Satayev | 2ebb31c | 2020-01-08 12:24:36 +0000 | [diff] [blame] | 23 | import java.io.File; | 
|  | 24 | import java.io.InputStream; | 
|  | 25 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 26 | /** | 
| Tim Murray | a908422 | 2013-04-05 22:06:43 +0000 | [diff] [blame] | 27 | * @hide | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 28 | * @deprecated in API 16 | 
| Tim Murray | c11e25c | 2013-04-09 11:01:01 -0700 | [diff] [blame] | 29 | * FileA3D allows users to load RenderScript objects from files | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 30 | * or resources stored on disk. It could be used to load items | 
| Tim Murray | c11e25c | 2013-04-09 11:01:01 -0700 | [diff] [blame] | 31 | * such as 3D geometry data converted to a RenderScript format from | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 32 | * content creation tools. Currently only meshes are supported | 
|  | 33 | * in FileA3D. | 
|  | 34 | * | 
|  | 35 | * When successfully loaded, FileA3D will contain a list of | 
|  | 36 | * index entries for all the objects stored inside it. | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 37 | * | 
|  | 38 | **/ | 
| Xusong Wang | 8b4548c | 2021-01-05 10:09:52 -0800 | [diff] [blame] | 39 | @Deprecated | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 40 | public class FileA3D extends BaseObj { | 
|  | 41 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 42 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 43 | * @deprecated in API 16 | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 44 | * Specifies what renderscript object type is contained within | 
|  | 45 | * the FileA3D IndexEntry | 
|  | 46 | **/ | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 47 | public enum EntryType { | 
|  | 48 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 49 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 50 | * @deprecated in API 16 | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 51 | * Unknown or or invalid object, nothing will be loaded | 
|  | 52 | **/ | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 53 | UNKNOWN (0), | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 54 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 55 | * @deprecated in API 16 | 
| Tim Murray | c11e25c | 2013-04-09 11:01:01 -0700 | [diff] [blame] | 56 | * RenderScript Mesh object | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 57 | **/ | 
| Mathew Inwood | 1532447 | 2018-08-06 11:18:49 +0100 | [diff] [blame] | 58 | @UnsupportedAppUsage | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 59 | MESH (1); | 
|  | 60 |  | 
|  | 61 | int mID; | 
|  | 62 | EntryType(int id) { | 
|  | 63 | mID = id; | 
|  | 64 | } | 
|  | 65 |  | 
|  | 66 | static EntryType toEntryType(int intID) { | 
|  | 67 | return EntryType.values()[intID]; | 
|  | 68 | } | 
|  | 69 | } | 
|  | 70 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 71 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 72 | * @deprecated in API 16 | 
| Tim Murray | c11e25c | 2013-04-09 11:01:01 -0700 | [diff] [blame] | 73 | * IndexEntry contains information about one of the RenderScript | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 74 | * objects inside the file's index. It could be used to query the | 
| Robert Ly | 11518ac | 2011-02-09 13:57:06 -0800 | [diff] [blame] | 75 | * object's type and also name and load the object itself if | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 76 | * necessary. | 
|  | 77 | */ | 
| Alex Sakhartchouk | dfac814 | 2010-07-15 11:33:03 -0700 | [diff] [blame] | 78 | public static class IndexEntry { | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 79 | RenderScript mRS; | 
|  | 80 | int mIndex; | 
| Tim Murray | 460a049 | 2013-11-19 12:45:54 -0800 | [diff] [blame] | 81 | long mID; | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 82 | String mName; | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 83 | EntryType mEntryType; | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 84 | BaseObj mLoadedObj; | 
|  | 85 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 86 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 87 | * @deprecated in API 16 | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 88 | * Returns the name of a renderscript object the index entry | 
|  | 89 | * describes | 
|  | 90 | * | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 91 | * @return name of a renderscript object the index entry | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 92 | * describes | 
|  | 93 | * | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 94 | */ | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 95 | public String getName() { | 
|  | 96 | return mName; | 
|  | 97 | } | 
|  | 98 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 99 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 100 | * @deprecated in API 16 | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 101 | * Returns the type of a renderscript object the index entry | 
|  | 102 | * describes | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 103 | * @return type of a renderscript object the index entry | 
|  | 104 | *         describes | 
|  | 105 | */ | 
| Mathew Inwood | 1532447 | 2018-08-06 11:18:49 +0100 | [diff] [blame] | 106 | @UnsupportedAppUsage | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 107 | public EntryType getEntryType() { | 
|  | 108 | return mEntryType; | 
|  | 109 | } | 
|  | 110 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 111 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 112 | * @deprecated in API 16 | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 113 | * Used to load the object described by the index entry | 
|  | 114 | * @return base renderscript object described by the entry | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 115 | */ | 
| Mathew Inwood | 1532447 | 2018-08-06 11:18:49 +0100 | [diff] [blame] | 116 | @UnsupportedAppUsage | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 117 | public BaseObj getObject() { | 
| Alex Sakhartchouk | dfac814 | 2010-07-15 11:33:03 -0700 | [diff] [blame] | 118 | mRS.validate(); | 
|  | 119 | BaseObj obj = internalCreate(mRS, this); | 
|  | 120 | return obj; | 
|  | 121 | } | 
|  | 122 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 123 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 124 | * @deprecated in API 16 | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 125 | * Used to load the mesh described by the index entry, object | 
|  | 126 | * described by the index entry must be a renderscript mesh | 
|  | 127 | * | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 128 | * @return renderscript mesh object described by the entry | 
|  | 129 | */ | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 130 | public Mesh getMesh() { | 
|  | 131 | return (Mesh)getObject(); | 
|  | 132 | } | 
|  | 133 |  | 
| Alex Sakhartchouk | dfac814 | 2010-07-15 11:33:03 -0700 | [diff] [blame] | 134 | static synchronized BaseObj internalCreate(RenderScript rs, IndexEntry entry) { | 
|  | 135 | if(entry.mLoadedObj != null) { | 
|  | 136 | return entry.mLoadedObj; | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 137 | } | 
|  | 138 |  | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 139 | // to be purged on cleanup | 
|  | 140 | if(entry.mEntryType == EntryType.UNKNOWN) { | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 141 | return null; | 
|  | 142 | } | 
|  | 143 |  | 
| Ashok Bhat | 0e0c088 | 2014-02-04 14:57:58 +0000 | [diff] [blame] | 144 | long objectID = rs.nFileA3DGetEntryByIndex(entry.mID, entry.mIndex); | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 145 | if(objectID == 0) { | 
|  | 146 | return null; | 
|  | 147 | } | 
|  | 148 |  | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 149 | switch (entry.mEntryType) { | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 150 | case MESH: | 
| Alex Sakhartchouk | dfac814 | 2010-07-15 11:33:03 -0700 | [diff] [blame] | 151 | entry.mLoadedObj = new Mesh(objectID, rs); | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 152 | break; | 
| Jason Sams | bca8e6d | 2015-03-26 15:29:56 -0700 | [diff] [blame] | 153 |  | 
|  | 154 | default: | 
|  | 155 | throw new RSRuntimeException("Unrecognized object type in file."); | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 156 | } | 
|  | 157 |  | 
| Alex Sakhartchouk | dfac814 | 2010-07-15 11:33:03 -0700 | [diff] [blame] | 158 | entry.mLoadedObj.updateFromNative(); | 
| Alex Sakhartchouk | dfac814 | 2010-07-15 11:33:03 -0700 | [diff] [blame] | 159 | return entry.mLoadedObj; | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 160 | } | 
|  | 161 |  | 
| Tim Murray | 460a049 | 2013-11-19 12:45:54 -0800 | [diff] [blame] | 162 | IndexEntry(RenderScript rs, int index, long id, String name, EntryType type) { | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 163 | mRS = rs; | 
|  | 164 | mIndex = index; | 
|  | 165 | mID = id; | 
|  | 166 | mName = name; | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 167 | mEntryType = type; | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 168 | mLoadedObj = null; | 
|  | 169 | } | 
|  | 170 | } | 
|  | 171 |  | 
|  | 172 | IndexEntry[] mFileEntries; | 
| Alex Sakhartchouk | 581cc64 | 2010-10-27 14:10:07 -0700 | [diff] [blame] | 173 | InputStream mInputStream; | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 174 |  | 
| Tim Murray | 460a049 | 2013-11-19 12:45:54 -0800 | [diff] [blame] | 175 | FileA3D(long id, RenderScript rs, InputStream stream) { | 
| Alex Sakhartchouk | 0de9444 | 2010-08-11 14:41:28 -0700 | [diff] [blame] | 176 | super(id, rs); | 
| Alex Sakhartchouk | 581cc64 | 2010-10-27 14:10:07 -0700 | [diff] [blame] | 177 | mInputStream = stream; | 
| Yang Ni | eb4dd08 | 2016-03-24 09:40:32 -0700 | [diff] [blame] | 178 | guard.open("destroy"); | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 179 | } | 
|  | 180 |  | 
|  | 181 | private void initEntries() { | 
| Jason Sams | e07694b | 2012-04-03 15:36:36 -0700 | [diff] [blame] | 182 | int numFileEntries = mRS.nFileA3DGetNumIndexEntries(getID(mRS)); | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 183 | if(numFileEntries <= 0) { | 
|  | 184 | return; | 
|  | 185 | } | 
|  | 186 |  | 
|  | 187 | mFileEntries = new IndexEntry[numFileEntries]; | 
|  | 188 | int[] ids = new int[numFileEntries]; | 
|  | 189 | String[] names = new String[numFileEntries]; | 
|  | 190 |  | 
| Jason Sams | e07694b | 2012-04-03 15:36:36 -0700 | [diff] [blame] | 191 | mRS.nFileA3DGetIndexEntries(getID(mRS), numFileEntries, ids, names); | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 192 |  | 
|  | 193 | for(int i = 0; i < numFileEntries; i ++) { | 
| Jason Sams | e07694b | 2012-04-03 15:36:36 -0700 | [diff] [blame] | 194 | mFileEntries[i] = new IndexEntry(mRS, i, getID(mRS), names[i], EntryType.toEntryType(ids[i])); | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 195 | } | 
|  | 196 | } | 
|  | 197 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 198 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 199 | * @deprecated in API 16 | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 200 | * Returns the number of objects stored inside the a3d file | 
|  | 201 | * | 
|  | 202 | * @return the number of objects stored inside the a3d file | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 203 | */ | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 204 | public int getIndexEntryCount() { | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 205 | if(mFileEntries == null) { | 
|  | 206 | return 0; | 
|  | 207 | } | 
|  | 208 | return mFileEntries.length; | 
|  | 209 | } | 
|  | 210 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 211 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 212 | * @deprecated in API 16 | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 213 | * Returns an index entry from the list of all objects inside | 
|  | 214 | * FileA3D | 
|  | 215 | * | 
|  | 216 | * @param index number of the entry from the list to return | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 217 | * | 
|  | 218 | * @return entry in the a3d file described by the index | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 219 | */ | 
| Mathew Inwood | 1532447 | 2018-08-06 11:18:49 +0100 | [diff] [blame] | 220 | @UnsupportedAppUsage | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 221 | public IndexEntry getIndexEntry(int index) { | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 222 | if(getIndexEntryCount() == 0 || index < 0 || index >= mFileEntries.length) { | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 223 | return null; | 
|  | 224 | } | 
|  | 225 | return mFileEntries[index]; | 
|  | 226 | } | 
|  | 227 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 228 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 229 | * @deprecated in API 16 | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 230 | * Creates a FileA3D object from an asset stored on disk | 
|  | 231 | * | 
|  | 232 | * @param rs Context to which the object will belong. | 
|  | 233 | * @param mgr asset manager used to load asset | 
|  | 234 | * @param path location of the file to load | 
|  | 235 | * | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 236 | * @return a3d file containing renderscript objects | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 237 | */ | 
| Alex Sakhartchouk | b0253ea | 2011-01-07 11:12:08 -0800 | [diff] [blame] | 238 | static public FileA3D createFromAsset(RenderScript rs, AssetManager mgr, String path) { | 
|  | 239 | rs.validate(); | 
| Tim Murray | 460a049 | 2013-11-19 12:45:54 -0800 | [diff] [blame] | 240 | long fileId = rs.nFileA3DCreateFromAsset(mgr, path); | 
| Alex Sakhartchouk | b0253ea | 2011-01-07 11:12:08 -0800 | [diff] [blame] | 241 |  | 
|  | 242 | if(fileId == 0) { | 
|  | 243 | throw new RSRuntimeException("Unable to create a3d file from asset " + path); | 
|  | 244 | } | 
|  | 245 | FileA3D fa3d = new FileA3D(fileId, rs, null); | 
|  | 246 | fa3d.initEntries(); | 
|  | 247 | return fa3d; | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 248 | } | 
|  | 249 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 250 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 251 | * @deprecated in API 16 | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 252 | * Creates a FileA3D object from a file stored on disk | 
|  | 253 | * | 
|  | 254 | * @param rs Context to which the object will belong. | 
|  | 255 | * @param path location of the file to load | 
|  | 256 | * | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 257 | * @return a3d file containing renderscript objects | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 258 | */ | 
| Alex Sakhartchouk | b0253ea | 2011-01-07 11:12:08 -0800 | [diff] [blame] | 259 | static public FileA3D createFromFile(RenderScript rs, String path) { | 
| Tim Murray | 460a049 | 2013-11-19 12:45:54 -0800 | [diff] [blame] | 260 | long fileId = rs.nFileA3DCreateFromFile(path); | 
| Alex Sakhartchouk | b0253ea | 2011-01-07 11:12:08 -0800 | [diff] [blame] | 261 |  | 
|  | 262 | if(fileId == 0) { | 
|  | 263 | throw new RSRuntimeException("Unable to create a3d file from " + path); | 
|  | 264 | } | 
|  | 265 | FileA3D fa3d = new FileA3D(fileId, rs, null); | 
|  | 266 | fa3d.initEntries(); | 
|  | 267 | return fa3d; | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 268 | } | 
|  | 269 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 270 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 271 | * @deprecated in API 16 | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 272 | * Creates a FileA3D object from a file stored on disk | 
|  | 273 | * | 
|  | 274 | * @param rs Context to which the object will belong. | 
|  | 275 | * @param path location of the file to load | 
|  | 276 | * | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 277 | * @return a3d file containing renderscript objects | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 278 | */ | 
| Alex Sakhartchouk | b0253ea | 2011-01-07 11:12:08 -0800 | [diff] [blame] | 279 | static public FileA3D createFromFile(RenderScript rs, File path) { | 
| Alex Sakhartchouk | e27cdee | 2010-12-17 11:41:08 -0800 | [diff] [blame] | 280 | return createFromFile(rs, path.getAbsolutePath()); | 
|  | 281 | } | 
|  | 282 |  | 
| Stephen Hines | 9c9ad3f8c2 | 2012-05-07 15:34:29 -0700 | [diff] [blame] | 283 | /** | 
| Jason Sams | 65c80f8 | 2012-05-08 17:30:26 -0700 | [diff] [blame] | 284 | * @deprecated in API 16 | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 285 | * Creates a FileA3D object from an application resource | 
|  | 286 | * | 
|  | 287 | * @param rs Context to which the object will belong. | 
|  | 288 | * @param res resource manager used for loading | 
|  | 289 | * @param id resource to create FileA3D from | 
|  | 290 | * | 
| Alex Sakhartchouk | ec0d335 | 2011-01-17 15:23:22 -0800 | [diff] [blame] | 291 | * @return a3d file containing renderscript objects | 
| Alex Sakhartchouk | f5c876e | 2011-01-13 14:53:43 -0800 | [diff] [blame] | 292 | */ | 
| Mathew Inwood | 1532447 | 2018-08-06 11:18:49 +0100 | [diff] [blame] | 293 | @UnsupportedAppUsage | 
| Alex Sakhartchouk | b0253ea | 2011-01-07 11:12:08 -0800 | [diff] [blame] | 294 | static public FileA3D createFromResource(RenderScript rs, Resources res, int id) { | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 295 |  | 
|  | 296 | rs.validate(); | 
|  | 297 | InputStream is = null; | 
|  | 298 | try { | 
| Alex Sakhartchouk | b0253ea | 2011-01-07 11:12:08 -0800 | [diff] [blame] | 299 | is = res.openRawResource(id); | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 300 | } catch (Exception e) { | 
| Alex Sakhartchouk | b0253ea | 2011-01-07 11:12:08 -0800 | [diff] [blame] | 301 | throw new RSRuntimeException("Unable to open resource " + id); | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 302 | } | 
|  | 303 |  | 
| Tim Murray | 460a049 | 2013-11-19 12:45:54 -0800 | [diff] [blame] | 304 | long fileId = 0; | 
| Alex Sakhartchouk | b0253ea | 2011-01-07 11:12:08 -0800 | [diff] [blame] | 305 | if (is instanceof AssetManager.AssetInputStream) { | 
| Ashok Bhat | 0e0c088 | 2014-02-04 14:57:58 +0000 | [diff] [blame] | 306 | long asset = ((AssetManager.AssetInputStream) is).getNativeAsset(); | 
| Alex Sakhartchouk | b0253ea | 2011-01-07 11:12:08 -0800 | [diff] [blame] | 307 | fileId = rs.nFileA3DCreateFromAssetStream(asset); | 
|  | 308 | } else { | 
|  | 309 | throw new RSRuntimeException("Unsupported asset stream"); | 
|  | 310 | } | 
|  | 311 |  | 
|  | 312 | if(fileId == 0) { | 
|  | 313 | throw new RSRuntimeException("Unable to create a3d file from resource " + id); | 
|  | 314 | } | 
|  | 315 | FileA3D fa3d = new FileA3D(fileId, rs, is); | 
|  | 316 | fa3d.initEntries(); | 
|  | 317 | return fa3d; | 
|  | 318 |  | 
| Alex Sakhartchouk | aae74ad | 2010-06-04 10:06:50 -0700 | [diff] [blame] | 319 | } | 
|  | 320 | } |