blob: 900720a6ec00dbbfaaf3b03562be8f9fe2046178 [file] [log] [blame]
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001/*
Stephen Hinesbe74bdd2012-02-03 15:29:36 -08002 * Copyright (C) 2008-2012 The Android Open Source Project
Jack Palevich60aa3ea2009-05-26 13:45:08 -07003 *
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
Jason Sams94d8e90a2009-06-10 16:09:05 -070017package android.renderscript;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070018
Jason Samsa6f338c2012-02-24 16:22:16 -080019import java.io.File;
Jason Samsfe1d5ff2012-03-23 11:47:26 -070020import java.lang.reflect.Field;
Jason Sams36e612a2009-07-31 16:26:13 -070021
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080022import android.content.Context;
Stephen Hines4382467a2011-08-01 15:02:34 -070023import android.content.pm.ApplicationInfo;
24import android.content.pm.PackageManager;
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080025import android.content.res.AssetManager;
Jason Samsb8c5a842009-07-31 20:40:47 -070026import android.graphics.Bitmap;
Romain Guy650a3eb2009-08-31 14:06:43 -070027import android.graphics.BitmapFactory;
Jason Samsfaa32b32011-06-20 16:58:04 -070028import android.graphics.SurfaceTexture;
Glenn Kasten260c77a2011-06-01 17:25:54 -070029import android.os.Process;
Jason Sams36e612a2009-07-31 16:26:13 -070030import android.util.Log;
31import android.view.Surface;
Jack Palevich43702d82009-05-28 13:38:16 -070032
Jack Palevich60aa3ea2009-05-26 13:45:08 -070033
Stephen Hines4382467a2011-08-01 15:02:34 -070034
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -070035/**
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080036 * Renderscript base master class. An instance of this class creates native
Jason Sams27676fe2010-11-10 17:00:59 -080037 * worker threads for processing commands from this object. This base class
38 * does not provide any extended capabilities beyond simple data processing.
39 * For extended capabilities use derived classes such as RenderScriptGL.
40 *
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080041 * <div class="special reference">
42 * <h3>Developer Guides</h3>
43 * <p>For more information about creating an application that uses Renderscript, read the
44 * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p>
45 * </div>
Jason Samse29d4712009-07-23 15:19:03 -070046 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070047public class RenderScript {
Jason Sams3bc47d42009-11-12 15:10:25 -080048 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d2010-12-06 15:59:59 -080049 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070050 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Joe Onorato43a17652011-04-06 19:22:23 -070051 static final boolean LOG_ENABLED = false;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070052
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080053 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070054
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080055 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070056 * We use a class initializer to allow the native code to cache some
57 * field offsets.
58 */
Romain Guy650a3eb2009-08-31 14:06:43 -070059 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -080060 static boolean sInitialized;
61 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070062
Jason Samsdba3ba52009-07-30 14:56:12 -070063
Jack Palevich60aa3ea2009-05-26 13:45:08 -070064 static {
65 sInitialized = false;
66 try {
Jason Samse29d4712009-07-23 15:19:03 -070067 System.loadLibrary("rs_jni");
Jack Palevich60aa3ea2009-05-26 13:45:08 -070068 _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070069 sInitialized = true;
70 } catch (UnsatisfiedLinkError e) {
Jason Samsfa445b92011-01-07 17:00:07 -080071 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
72 throw new RSRuntimeException("Error loading RS jni library: " + e);
Jack Palevich60aa3ea2009-05-26 13:45:08 -070073 }
74 }
75
Jason Sams2e1872f2010-08-17 16:25:41 -070076 // Non-threadsafe functions.
Jason Sams36e612a2009-07-31 16:26:13 -070077 native int nDeviceCreate();
78 native void nDeviceDestroy(int dev);
Jason Samsebfb4362009-09-23 13:57:02 -070079 native void nDeviceSetConfig(int dev, int param, int value);
Jason Samsedbfabd2011-05-17 15:01:29 -070080 native int nContextGetUserMessage(int con, int[] data);
Jason Sams1c415172010-11-08 17:06:46 -080081 native String nContextGetErrorMessage(int con);
Jason Samsedbfabd2011-05-17 15:01:29 -070082 native int nContextPeekMessage(int con, int[] subID);
Jason Sams2e1872f2010-08-17 16:25:41 -070083 native void nContextInitToClient(int con);
84 native void nContextDeinitToClient(int con);
Jason Sams3eaa3382009-06-10 15:04:38 -070085
Jason Samsa6f338c2012-02-24 16:22:16 -080086 /**
87 * Name of the file that holds the object cache.
88 */
89 private static final String CACHE_PATH = "com.android.renderscript.cache";
Jason Sams1a4e1f32012-02-24 17:51:24 -080090 static String mCachePath;
Jason Samsa6f338c2012-02-24 16:22:16 -080091
92 /**
93 * Sets the directory to use as a persistent storage for the
94 * renderscript object file cache.
95 *
96 * @hide
97 * @param cacheDir A directory the current process can write to
98 */
Jason Samsa6f338c2012-02-24 16:22:16 -080099 public static void setupDiskCache(File cacheDir) {
100 File f = new File(cacheDir, CACHE_PATH);
101 mCachePath = f.getAbsolutePath();
102 f.mkdirs();
103 }
104
Jason Sams718cd1f2009-12-23 14:35:29 -0800105
Jason Sams2e1872f2010-08-17 16:25:41 -0700106 // Methods below are wrapped to protect the non-threadsafe
107 // lockless fifo.
Stephen Hines4382467a2011-08-01 15:02:34 -0700108 native int rsnContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700109 int colorMin, int colorPref,
110 int alphaMin, int alphaPref,
111 int depthMin, int depthPref,
112 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700113 int samplesMin, int samplesPref, float samplesQ, int dpi);
Stephen Hines4382467a2011-08-01 15:02:34 -0700114 synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
Jason Sams11c8af92010-10-13 15:31:10 -0700115 int colorMin, int colorPref,
116 int alphaMin, int alphaPref,
117 int depthMin, int depthPref,
118 int stencilMin, int stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700119 int samplesMin, int samplesPref, float samplesQ, int dpi) {
Stephen Hines4382467a2011-08-01 15:02:34 -0700120 return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
Jason Sams11c8af92010-10-13 15:31:10 -0700121 alphaMin, alphaPref, depthMin, depthPref,
122 stencilMin, stencilPref,
Alex Sakhartchouk2c74ad92011-03-16 19:28:25 -0700123 samplesMin, samplesPref, samplesQ, dpi);
Jason Sams2e1872f2010-08-17 16:25:41 -0700124 }
Stephen Hines4382467a2011-08-01 15:02:34 -0700125 native int rsnContextCreate(int dev, int ver, int sdkVer);
126 synchronized int nContextCreate(int dev, int ver, int sdkVer) {
127 return rsnContextCreate(dev, ver, sdkVer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700128 }
129 native void rsnContextDestroy(int con);
130 synchronized void nContextDestroy() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800131 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700132 rsnContextDestroy(mContext);
133 }
134 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
135 synchronized void nContextSetSurface(int w, int h, Surface sur) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800136 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700137 rsnContextSetSurface(mContext, w, h, sur);
138 }
Jason Samsfaa32b32011-06-20 16:58:04 -0700139 native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
140 synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
141 validate();
142 rsnContextSetSurfaceTexture(mContext, w, h, sur);
143 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700144 native void rsnContextSetPriority(int con, int p);
145 synchronized void nContextSetPriority(int p) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800146 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700147 rsnContextSetPriority(mContext, p);
148 }
149 native void rsnContextDump(int con, int bits);
150 synchronized void nContextDump(int bits) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800151 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700152 rsnContextDump(mContext, bits);
153 }
154 native void rsnContextFinish(int con);
155 synchronized void nContextFinish() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800156 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700157 rsnContextFinish(mContext);
158 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700159
Jason Sams2e1872f2010-08-17 16:25:41 -0700160 native void rsnContextBindRootScript(int con, int script);
161 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800162 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700163 rsnContextBindRootScript(mContext, script);
164 }
165 native void rsnContextBindSampler(int con, int sampler, int slot);
166 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800167 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700168 rsnContextBindSampler(mContext, sampler, slot);
169 }
170 native void rsnContextBindProgramStore(int con, int pfs);
171 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800172 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700173 rsnContextBindProgramStore(mContext, pfs);
174 }
175 native void rsnContextBindProgramFragment(int con, int pf);
176 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800177 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700178 rsnContextBindProgramFragment(mContext, pf);
179 }
180 native void rsnContextBindProgramVertex(int con, int pv);
181 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800182 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700183 rsnContextBindProgramVertex(mContext, pv);
184 }
185 native void rsnContextBindProgramRaster(int con, int pr);
186 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800187 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700188 rsnContextBindProgramRaster(mContext, pr);
189 }
190 native void rsnContextPause(int con);
191 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800192 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700193 rsnContextPause(mContext);
194 }
195 native void rsnContextResume(int con);
196 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800197 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700198 rsnContextResume(mContext);
199 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700200
Jason Sams2e1872f2010-08-17 16:25:41 -0700201 native void rsnAssignName(int con, int obj, byte[] name);
202 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800203 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700204 rsnAssignName(mContext, obj, name);
205 }
206 native String rsnGetName(int con, int obj);
207 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800208 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700209 return rsnGetName(mContext, obj);
210 }
211 native void rsnObjDestroy(int con, int id);
212 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800213 // There is a race condition here. The calling code may be run
214 // by the gc while teardown is occuring. This protects againts
215 // deleting dead objects.
216 if (mContext != 0) {
217 rsnObjDestroy(mContext, id);
218 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700219 }
Jason Samsfe08d992009-05-27 14:45:32 -0700220
Jason Sams2e1872f2010-08-17 16:25:41 -0700221 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
222 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800223 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700224 return rsnElementCreate(mContext, type, kind, norm, vecSize);
225 }
Jason Sams70d4e502010-09-02 17:35:23 -0700226 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
227 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800228 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700229 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700230 }
231 native void rsnElementGetNativeData(int con, int id, int[] elementData);
232 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800233 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700234 rsnElementGetNativeData(mContext, id, elementData);
235 }
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700236 native void rsnElementGetSubElements(int con, int id,
237 int[] IDs, String[] names, int[] arraySizes);
238 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800239 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700240 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700241 }
Jason Sams768bc022009-09-21 19:41:04 -0700242
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800243 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
244 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800245 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800246 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
Jason Sams2e1872f2010-08-17 16:25:41 -0700247 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700248 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
249 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800250 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700251 rsnTypeGetNativeData(mContext, id, typeData);
252 }
Jason Sams768bc022009-09-21 19:41:04 -0700253
Jason Sams857d0c72011-11-23 15:02:15 -0800254 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
255 synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800256 validate();
Jason Sams857d0c72011-11-23 15:02:15 -0800257 return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700258 }
Jason Sams5476b452010-12-08 16:14:36 -0800259 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
260 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800261 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800262 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700263 }
Tim Murraya3145512012-12-04 17:59:29 -0800264
265 native int rsnAllocationCreateBitmapBackedAllocation(int con, int type, int mip, Bitmap bmp, int usage);
266 synchronized int nAllocationCreateBitmapBackedAllocation(int type, int mip, Bitmap bmp, int usage) {
267 validate();
268 return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
269 }
270
271
Jason Sams5476b452010-12-08 16:14:36 -0800272 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
273 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800274 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800275 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800276 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700277 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
278 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800279 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700280 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
281 }
Jason Sams5476b452010-12-08 16:14:36 -0800282 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
283 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800284 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800285 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
286 }
287
Jason Sams4ef66502010-12-10 16:03:15 -0800288 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
289 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800290 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800291 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
292 }
293
294
Jason Sams5476b452010-12-08 16:14:36 -0800295 native void rsnAllocationSyncAll(int con, int alloc, int src);
296 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800297 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800298 rsnAllocationSyncAll(mContext, alloc, src);
299 }
Jason Sams615e7ce2012-01-13 14:01:20 -0800300 native int rsnAllocationGetSurfaceTextureID(int con, int alloc);
301 synchronized int nAllocationGetSurfaceTextureID(int alloc) {
302 validate();
303 return rsnAllocationGetSurfaceTextureID(mContext, alloc);
304 }
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700305 native void rsnAllocationGetSurfaceTextureID2(int con, int alloc, SurfaceTexture st);
306 synchronized void nAllocationGetSurfaceTextureID2(int alloc, SurfaceTexture st) {
307 validate();
308 rsnAllocationGetSurfaceTextureID2(mContext, alloc, st);
309 }
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700310 native void rsnAllocationSetSurface(int con, int alloc, Surface sur);
311 synchronized void nAllocationSetSurface(int alloc, Surface sur) {
Jason Sams163766c2012-02-15 12:04:24 -0800312 validate();
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700313 rsnAllocationSetSurface(mContext, alloc, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800314 }
315 native void rsnAllocationIoSend(int con, int alloc);
316 synchronized void nAllocationIoSend(int alloc) {
317 validate();
318 rsnAllocationIoSend(mContext, alloc);
319 }
320 native void rsnAllocationIoReceive(int con, int alloc);
321 synchronized void nAllocationIoReceive(int alloc) {
322 validate();
323 rsnAllocationIoReceive(mContext, alloc);
324 }
325
Jason Sams615e7ce2012-01-13 14:01:20 -0800326
Jason Samsf7086092011-01-12 13:28:37 -0800327 native void rsnAllocationGenerateMipmaps(int con, int alloc);
328 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800329 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800330 rsnAllocationGenerateMipmaps(mContext, alloc);
331 }
Jason Sams4ef66502010-12-10 16:03:15 -0800332 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
333 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800334 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800335 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700336 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700337
Jason Sams49a05d72010-12-29 14:31:29 -0800338
339 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
340 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800341 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800342 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700343 }
Jason Sams49a05d72010-12-29 14:31:29 -0800344 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
345 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800346 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800347 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
348 }
349 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
350 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800351 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800352 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
353 }
354 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
355 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800356 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800357 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700358 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700359
Jason Sams49a05d72010-12-29 14:31:29 -0800360 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
361 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800362 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800363 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700364 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700365
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700366 native void rsnAllocationData2D(int con,
367 int dstAlloc, int dstXoff, int dstYoff,
368 int dstMip, int dstFace,
369 int width, int height,
370 int srcAlloc, int srcXoff, int srcYoff,
371 int srcMip, int srcFace);
372 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
373 int dstMip, int dstFace,
374 int width, int height,
375 int srcAlloc, int srcXoff, int srcYoff,
376 int srcMip, int srcFace) {
377 validate();
378 rsnAllocationData2D(mContext,
379 dstAlloc, dstXoff, dstYoff,
380 dstMip, dstFace,
381 width, height,
382 srcAlloc, srcXoff, srcYoff,
383 srcMip, srcFace);
384 }
385
Jason Samsfa445b92011-01-07 17:00:07 -0800386 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
387 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800388 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800389 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
390 }
391 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
392 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800393 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800394 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
395 }
Jason Sams49a05d72010-12-29 14:31:29 -0800396 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
397 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800398 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800399 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700400 }
Jason Sams49a05d72010-12-29 14:31:29 -0800401 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
402 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800403 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800404 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700405 }
Jason Samsfa445b92011-01-07 17:00:07 -0800406 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
407 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800408 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800409 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
410 }
Jason Sams49a05d72010-12-29 14:31:29 -0800411
Jason Samsfa445b92011-01-07 17:00:07 -0800412 native void rsnAllocationRead(int con, int id, byte[] d);
413 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800414 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800415 rsnAllocationRead(mContext, id, d);
416 }
417 native void rsnAllocationRead(int con, int id, short[] d);
418 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800419 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800420 rsnAllocationRead(mContext, id, d);
421 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700422 native void rsnAllocationRead(int con, int id, int[] d);
423 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800424 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700425 rsnAllocationRead(mContext, id, d);
426 }
427 native void rsnAllocationRead(int con, int id, float[] d);
428 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800429 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700430 rsnAllocationRead(mContext, id, d);
431 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700432 native int rsnAllocationGetType(int con, int id);
433 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800434 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700435 return rsnAllocationGetType(mContext, id);
436 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700437
Jason Sams5edc6082010-10-05 13:32:49 -0700438 native void rsnAllocationResize1D(int con, int id, int dimX);
439 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800440 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700441 rsnAllocationResize1D(mContext, id, dimX);
442 }
443 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
444 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800445 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700446 rsnAllocationResize2D(mContext, id, dimX, dimY);
447 }
448
Jason Sams2e1872f2010-08-17 16:25:41 -0700449 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
450 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800451 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700452 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
453 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800454 native int rsnFileA3DCreateFromFile(int con, String path);
455 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800456 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800457 return rsnFileA3DCreateFromFile(mContext, path);
458 }
459 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
460 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800461 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800462 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
463 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700464 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
465 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800466 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700467 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
468 }
469 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
470 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800471 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700472 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
473 }
474 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
475 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800476 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700477 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
478 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700479
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800480 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
481 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800482 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700483 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
484 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800485 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
486 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800487 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800488 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
489 }
490 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
491 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800492 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800493 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
494 }
Jason Sams22534172009-08-04 16:58:20 -0700495
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700496
Jason Sams2e1872f2010-08-17 16:25:41 -0700497 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
498 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800499 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700500 rsnScriptBindAllocation(mContext, script, alloc, slot);
501 }
502 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
503 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800504 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700505 rsnScriptSetTimeZone(mContext, script, timeZone);
506 }
507 native void rsnScriptInvoke(int con, int id, int slot);
508 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800509 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700510 rsnScriptInvoke(mContext, id, slot);
511 }
Jason Sams6e494d32011-04-27 16:33:11 -0700512 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
513 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
514 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
515 validate();
516 if (params == null) {
517 rsnScriptForEach(mContext, id, slot, ain, aout);
518 } else {
519 rsnScriptForEach(mContext, id, slot, ain, aout, params);
520 }
521 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700522 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
523 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800524 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700525 rsnScriptInvokeV(mContext, id, slot, params);
526 }
527 native void rsnScriptSetVarI(int con, int id, int slot, int val);
528 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800529 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700530 rsnScriptSetVarI(mContext, id, slot, val);
531 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700532 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
533 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800534 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700535 rsnScriptSetVarJ(mContext, id, slot, val);
536 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700537 native void rsnScriptSetVarF(int con, int id, int slot, float val);
538 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800539 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700540 rsnScriptSetVarF(mContext, id, slot, val);
541 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700542 native void rsnScriptSetVarD(int con, int id, int slot, double val);
543 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800544 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700545 rsnScriptSetVarD(mContext, id, slot, val);
546 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700547 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
548 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800549 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700550 rsnScriptSetVarV(mContext, id, slot, val);
551 }
Stephen Hinesadeb8092012-04-20 14:26:06 -0700552 native void rsnScriptSetVarVE(int con, int id, int slot, byte[] val,
553 int e, int[] dims);
554 synchronized void nScriptSetVarVE(int id, int slot, byte[] val,
555 int e, int[] dims) {
556 validate();
557 rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
558 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800559 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
560 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800561 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800562 rsnScriptSetVarObj(mContext, id, slot, val);
563 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700564
Jason Samse4a06c52011-03-16 16:29:28 -0700565 native int rsnScriptCCreate(int con, String resName, String cacheDir,
566 byte[] script, int length);
567 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800568 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700569 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700570 }
Jason Samsebfb4362009-09-23 13:57:02 -0700571
Jason Sams6ab97682012-08-10 12:09:43 -0700572 native int rsnScriptIntrinsicCreate(int con, int id, int eid);
573 synchronized int nScriptIntrinsicCreate(int id, int eid) {
574 validate();
575 return rsnScriptIntrinsicCreate(mContext, id, eid);
576 }
577
Jason Sams08a81582012-09-18 12:32:10 -0700578 native int rsnScriptKernelIDCreate(int con, int sid, int slot, int sig);
579 synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) {
580 validate();
581 return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
582 }
583
584 native int rsnScriptFieldIDCreate(int con, int sid, int slot);
585 synchronized int nScriptFieldIDCreate(int sid, int slot) {
586 validate();
587 return rsnScriptFieldIDCreate(mContext, sid, slot);
588 }
589
590 native int rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types);
591 synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) {
592 validate();
593 return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
594 }
595
596 native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc);
597 synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) {
598 validate();
599 rsnScriptGroupSetInput(mContext, group, kernel, alloc);
600 }
601
602 native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc);
603 synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) {
604 validate();
605 rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
606 }
607
608 native void rsnScriptGroupExecute(int con, int group);
609 synchronized void nScriptGroupExecute(int group) {
610 validate();
611 rsnScriptGroupExecute(mContext, group);
612 }
613
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700614 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
615 int wrapS, int wrapT, int wrapR, float aniso);
616 synchronized int nSamplerCreate(int magFilter, int minFilter,
617 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800618 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700619 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700620 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800621
Jason Sams331bf9b2011-04-06 11:23:54 -0700622 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
623 boolean depthMask, boolean dither,
624 int srcMode, int dstMode, int depthFunc);
625 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
626 boolean depthMask, boolean dither,
627 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800628 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700629 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
630 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700631 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700632
Jason Sams94aaed32011-09-23 14:18:53 -0700633 native int rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
634 synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800635 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700636 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700637 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700638
Jason Sams2e1872f2010-08-17 16:25:41 -0700639 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
640 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800641 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700642 rsnProgramBindConstants(mContext, pv, slot, mID);
643 }
644 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
645 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800646 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700647 rsnProgramBindTexture(mContext, vpf, slot, a);
648 }
649 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
650 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800651 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700652 rsnProgramBindSampler(mContext, vpf, slot, s);
653 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800654 native int rsnProgramFragmentCreate(int con, String shader, String[] texNames, int[] params);
655 synchronized int nProgramFragmentCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800656 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800657 return rsnProgramFragmentCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700658 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800659 native int rsnProgramVertexCreate(int con, String shader, String[] texNames, int[] params);
660 synchronized int nProgramVertexCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800661 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800662 return rsnProgramVertexCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700663 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700664
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700665 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
666 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800667 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700668 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800669 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700670 native int rsnMeshGetVertexBufferCount(int con, int id);
671 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800672 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700673 return rsnMeshGetVertexBufferCount(mContext, id);
674 }
675 native int rsnMeshGetIndexCount(int con, int id);
676 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800677 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700678 return rsnMeshGetIndexCount(mContext, id);
679 }
680 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
681 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800682 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700683 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
684 }
685 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
686 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800687 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700688 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
689 }
690
Jason Samsf15ed012011-10-31 13:23:43 -0700691 native int rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
692 synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
693 validate();
694 return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
695 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700696
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800697 int mDev;
698 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700699 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800700 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700701
Jason Sams8cb39de2010-06-01 15:47:01 -0700702 Element mElement_U8;
703 Element mElement_I8;
704 Element mElement_U16;
705 Element mElement_I16;
706 Element mElement_U32;
707 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700708 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700709 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700710 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700711 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700712 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700713
Jason Sams8cb39de2010-06-01 15:47:01 -0700714 Element mElement_ELEMENT;
715 Element mElement_TYPE;
716 Element mElement_ALLOCATION;
717 Element mElement_SAMPLER;
718 Element mElement_SCRIPT;
719 Element mElement_MESH;
720 Element mElement_PROGRAM_FRAGMENT;
721 Element mElement_PROGRAM_VERTEX;
722 Element mElement_PROGRAM_RASTER;
723 Element mElement_PROGRAM_STORE;
Stephen Hines3a291412012-04-11 17:27:29 -0700724 Element mElement_FONT;
Jason Samsa70f4162010-03-26 15:33:42 -0700725
Jason Sams3c0dfba2009-09-27 17:50:38 -0700726 Element mElement_A_8;
727 Element mElement_RGB_565;
728 Element mElement_RGB_888;
729 Element mElement_RGBA_5551;
730 Element mElement_RGBA_4444;
731 Element mElement_RGBA_8888;
732
Jason Sams8cb39de2010-06-01 15:47:01 -0700733 Element mElement_FLOAT_2;
734 Element mElement_FLOAT_3;
735 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700736
737 Element mElement_DOUBLE_2;
738 Element mElement_DOUBLE_3;
739 Element mElement_DOUBLE_4;
740
741 Element mElement_UCHAR_2;
742 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700743 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800744
Stephen Hines836c4a52011-06-01 14:38:10 -0700745 Element mElement_CHAR_2;
746 Element mElement_CHAR_3;
747 Element mElement_CHAR_4;
748
749 Element mElement_USHORT_2;
750 Element mElement_USHORT_3;
751 Element mElement_USHORT_4;
752
753 Element mElement_SHORT_2;
754 Element mElement_SHORT_3;
755 Element mElement_SHORT_4;
756
757 Element mElement_UINT_2;
758 Element mElement_UINT_3;
759 Element mElement_UINT_4;
760
761 Element mElement_INT_2;
762 Element mElement_INT_3;
763 Element mElement_INT_4;
764
765 Element mElement_ULONG_2;
766 Element mElement_ULONG_3;
767 Element mElement_ULONG_4;
768
769 Element mElement_LONG_2;
770 Element mElement_LONG_3;
771 Element mElement_LONG_4;
772
Jason Sams1d45c472010-08-25 14:31:48 -0700773 Element mElement_MATRIX_4X4;
774 Element mElement_MATRIX_3X3;
775 Element mElement_MATRIX_2X2;
776
Jason Sams4d339932010-05-11 14:03:58 -0700777 Sampler mSampler_CLAMP_NEAREST;
778 Sampler mSampler_CLAMP_LINEAR;
779 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
780 Sampler mSampler_WRAP_NEAREST;
781 Sampler mSampler_WRAP_LINEAR;
782 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
783
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700784 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
785 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700786 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
787 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700788
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700789 ProgramRaster mProgramRaster_CULL_BACK;
790 ProgramRaster mProgramRaster_CULL_FRONT;
791 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700792
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700793 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700794 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700795
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700796 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800797 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800798 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800799 * fields will be filled in and then the run method called by a message
800 * handling thread. This will occur some time after sendToClient completes
801 * in the script.
802 *
803 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800804 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700805 protected int[] mData;
806 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800807 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700808 public void run() {
809 }
810 }
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700811 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800812 * If an application is expecting messages it should set this field to an
813 * instance of RSMessage. This instance will receive all the user messages
814 * sent from sendToClient by scripts from this context.
815 *
816 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800817 RSMessageHandler mMessageCallback = null;
818
819 public void setMessageHandler(RSMessageHandler msg) {
820 mMessageCallback = msg;
821 }
822 public RSMessageHandler getMessageHandler() {
823 return mMessageCallback;
824 }
Jason Sams516c3192009-10-06 13:58:47 -0700825
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700826 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800827 * Runtime error base class. An application should derive from this class
828 * if it wishes to install an error handler. When errors occur at runtime
829 * the fields in this class will be filled and the run method called.
830 *
831 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800832 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800833 protected String mErrorMessage;
834 protected int mErrorNum;
835 public void run() {
836 }
837 }
Jason Sams27676fe2010-11-10 17:00:59 -0800838
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700839 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800840 * Application Error handler. All runtime errors will be dispatched to the
841 * instance of RSAsyncError set here. If this field is null a
842 * RSRuntimeException will instead be thrown with details about the error.
843 * This will cause program termaination.
844 *
845 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800846 RSErrorHandler mErrorCallback = null;
847
848 public void setErrorHandler(RSErrorHandler msg) {
849 mErrorCallback = msg;
850 }
851 public RSErrorHandler getErrorHandler() {
852 return mErrorCallback;
853 }
Jason Sams1c415172010-11-08 17:06:46 -0800854
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700855 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800856 * RenderScript worker threads priority enumeration. The default value is
857 * NORMAL. Applications wishing to do background processing such as
858 * wallpapers should set their priority to LOW to avoid starving forground
859 * processes.
860 */
Jason Sams7d787b42009-11-15 12:14:26 -0800861 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700862 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
863 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800864
865 int mID;
866 Priority(int id) {
867 mID = id;
868 }
869 }
870
Jason Sams771bebb2009-12-07 12:40:12 -0800871 void validate() {
872 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700873 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800874 }
875 }
876
Jason Sams27676fe2010-11-10 17:00:59 -0800877
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700878 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800879 * Change the priority of the worker threads for this context.
880 *
881 * @param p New priority to be set.
882 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800883 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800884 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800885 nContextSetPriority(p.mID);
886 }
887
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800888 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700889 RenderScript mRS;
890 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800891 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800892
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800893 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
894 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
895 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
896 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
897 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700898
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800899 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800900
Jason Sams516c3192009-10-06 13:58:47 -0700901 MessageThread(RenderScript rs) {
902 super("RSMessageThread");
903 mRS = rs;
904
905 }
906
907 public void run() {
908 // This function is a temporary solution. The final solution will
909 // used typed allocations where the message id is the type indicator.
910 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700911 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700912 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700913 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -0700914 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800915 int size = mAuxData[1];
916 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800917
918 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
919 if ((size>>2) >= rbuf.length) {
920 rbuf = new int[(size + 3) >> 2];
921 }
Jason Samsedbfabd2011-05-17 15:01:29 -0700922 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
923 RS_MESSAGE_TO_CLIENT_USER) {
924 throw new RSDriverException("Error processing message from Renderscript.");
925 }
Jason Sams1c415172010-11-08 17:06:46 -0800926
927 if(mRS.mMessageCallback != null) {
928 mRS.mMessageCallback.mData = rbuf;
929 mRS.mMessageCallback.mID = subID;
930 mRS.mMessageCallback.mLength = size;
931 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700932 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800933 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700934 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700935 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700936 }
Jason Sams1c415172010-11-08 17:06:46 -0800937
938 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
939 String e = mRS.nContextGetErrorMessage(mRS.mContext);
940
Jason Samsadd9d962010-11-22 16:20:16 -0800941 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
942 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
943 }
944
Jason Sams1c415172010-11-08 17:06:46 -0800945 if(mRS.mErrorCallback != null) {
946 mRS.mErrorCallback.mErrorMessage = e;
947 mRS.mErrorCallback.mErrorNum = subID;
948 mRS.mErrorCallback.run();
949 } else {
Stephen Hinesbe74bdd2012-02-03 15:29:36 -0800950 // Do not throw here. In these cases, we do not have
951 // a fatal error.
Jason Sams1c415172010-11-08 17:06:46 -0800952 }
953 continue;
954 }
955
956 // 2: teardown.
957 // But we want to avoid starving other threads during
958 // teardown by yielding until the next line in the destructor
959 // can execute to set mRun = false
960 try {
961 sleep(1, 0);
962 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700963 }
Jason Sams516c3192009-10-06 13:58:47 -0700964 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800965 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700966 }
967 }
968
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800969 RenderScript(Context ctx) {
Jason Sams1a4e1f32012-02-24 17:51:24 -0800970 if (ctx != null) {
971 mApplicationContext = ctx.getApplicationContext();
972 }
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800973 }
974
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700975 /**
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800976 * Gets the application context associated with the RenderScript context.
977 *
978 * @return The application context.
979 */
980 public final Context getApplicationContext() {
981 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700982 }
983
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700984 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800985 * Create a basic RenderScript context.
986 *
Jason Sams1a4e1f32012-02-24 17:51:24 -0800987 * @hide
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800988 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -0800989 * @return RenderScript
990 */
Jason Sams1a4e1f32012-02-24 17:51:24 -0800991 public static RenderScript create(Context ctx, int sdkVersion) {
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800992 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -0800993
994 rs.mDev = rs.nDeviceCreate();
Stephen Hines4382467a2011-08-01 15:02:34 -0700995 rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion);
Jason Sams26985362011-05-03 15:01:58 -0700996 if (rs.mContext == 0) {
997 throw new RSDriverException("Failed to create RS context.");
998 }
Jason Sams704ff642010-02-09 16:05:07 -0800999 rs.mMessageThread = new MessageThread(rs);
1000 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -08001001 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -08001002 }
1003
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001004 /**
Jason Sams1a4e1f32012-02-24 17:51:24 -08001005 * Create a basic RenderScript context.
1006 *
1007 * @param ctx The context.
1008 * @return RenderScript
1009 */
1010 public static RenderScript create(Context ctx) {
1011 int v = ctx.getApplicationInfo().targetSdkVersion;
1012 return create(ctx, v);
1013 }
1014
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001015 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001016 * Print the currently available debugging information about the state of
1017 * the RS context to the log.
1018 *
Jason Sams27676fe2010-11-10 17:00:59 -08001019 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001020 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001021 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001022 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -08001023 }
1024
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001025 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001026 * Wait for any commands in the fifo between the java bindings and native to
1027 * be processed.
1028 *
1029 */
Jason Sams96ed4cf2010-06-15 12:15:57 -07001030 public void finish() {
1031 nContextFinish();
1032 }
1033
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001034 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001035 * Destroy this renderscript context. Once this function is called its no
1036 * longer legal to use this or any objects created by this context.
1037 *
1038 */
Jason Samsf5b45962009-08-25 14:49:07 -07001039 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001040 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -07001041 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001042 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -07001043 try {
1044 mMessageThread.join();
1045 } catch(InterruptedException e) {
1046 }
Jason Sams516c3192009-10-06 13:58:47 -07001047
Jason Sams2e1872f2010-08-17 16:25:41 -07001048 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -07001049 mContext = 0;
1050
1051 nDeviceDestroy(mDev);
1052 mDev = 0;
1053 }
Jason Sams02fb2cb2009-05-28 15:37:57 -07001054
Jason Samsa9e7a052009-09-25 14:51:22 -07001055 boolean isAlive() {
1056 return mContext != 0;
1057 }
1058
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001059 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -07001060 if(o != null) {
Jason Samse07694b2012-04-03 15:36:36 -07001061 return o.getID(this);
Jason Samsd8e41612009-08-20 17:22:40 -07001062 }
Jason Sams6b9dec02009-09-23 16:38:37 -07001063 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001064 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001065}