blob: c3fcbb54fae0285acb9a091e8b188c6d9f99ba19 [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
Scott Mainb47fa162013-02-05 14:23:13 -080044 * <a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p>
Joe Fernandez3aef8e1d2011-12-20 10:38:34 -080045 * </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 Sams455d6442013-02-05 19:20:18 -0800160 native void rsnContextSendMessage(int con, int id, int[] data);
161 synchronized void nContextSendMessage(int id, int[] data) {
162 validate();
163 rsnContextSendMessage(mContext, id, data);
164 }
165
Jason Sams2e1872f2010-08-17 16:25:41 -0700166 native void rsnContextBindRootScript(int con, int script);
167 synchronized void nContextBindRootScript(int script) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800168 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700169 rsnContextBindRootScript(mContext, script);
170 }
171 native void rsnContextBindSampler(int con, int sampler, int slot);
172 synchronized void nContextBindSampler(int sampler, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800173 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700174 rsnContextBindSampler(mContext, sampler, slot);
175 }
176 native void rsnContextBindProgramStore(int con, int pfs);
177 synchronized void nContextBindProgramStore(int pfs) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800178 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700179 rsnContextBindProgramStore(mContext, pfs);
180 }
181 native void rsnContextBindProgramFragment(int con, int pf);
182 synchronized void nContextBindProgramFragment(int pf) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800183 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700184 rsnContextBindProgramFragment(mContext, pf);
185 }
186 native void rsnContextBindProgramVertex(int con, int pv);
187 synchronized void nContextBindProgramVertex(int pv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800188 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700189 rsnContextBindProgramVertex(mContext, pv);
190 }
191 native void rsnContextBindProgramRaster(int con, int pr);
192 synchronized void nContextBindProgramRaster(int pr) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800193 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700194 rsnContextBindProgramRaster(mContext, pr);
195 }
196 native void rsnContextPause(int con);
197 synchronized void nContextPause() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800198 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700199 rsnContextPause(mContext);
200 }
201 native void rsnContextResume(int con);
202 synchronized void nContextResume() {
Jason Samsd1ac9812011-01-18 18:12:26 -0800203 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700204 rsnContextResume(mContext);
205 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700206
Jason Sams2e1872f2010-08-17 16:25:41 -0700207 native void rsnAssignName(int con, int obj, byte[] name);
208 synchronized void nAssignName(int obj, byte[] name) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800209 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700210 rsnAssignName(mContext, obj, name);
211 }
212 native String rsnGetName(int con, int obj);
213 synchronized String nGetName(int obj) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800214 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700215 return rsnGetName(mContext, obj);
216 }
217 native void rsnObjDestroy(int con, int id);
218 synchronized void nObjDestroy(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800219 // There is a race condition here. The calling code may be run
220 // by the gc while teardown is occuring. This protects againts
221 // deleting dead objects.
222 if (mContext != 0) {
223 rsnObjDestroy(mContext, id);
224 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700225 }
Jason Samsfe08d992009-05-27 14:45:32 -0700226
Jason Sams2e1872f2010-08-17 16:25:41 -0700227 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
228 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800229 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700230 return rsnElementCreate(mContext, type, kind, norm, vecSize);
231 }
Jason Sams70d4e502010-09-02 17:35:23 -0700232 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
233 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800234 validate();
Jason Sams70d4e502010-09-02 17:35:23 -0700235 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700236 }
237 native void rsnElementGetNativeData(int con, int id, int[] elementData);
238 synchronized void nElementGetNativeData(int id, int[] elementData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800239 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700240 rsnElementGetNativeData(mContext, id, elementData);
241 }
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700242 native void rsnElementGetSubElements(int con, int id,
243 int[] IDs, String[] names, int[] arraySizes);
244 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800245 validate();
Alex Sakhartchouk7d5f5e72011-10-18 11:08:31 -0700246 rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700247 }
Jason Sams768bc022009-09-21 19:41:04 -0700248
Jason Samsb109cc72013-01-07 18:20:12 -0800249 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces, int yuv);
250 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces, int yuv) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800251 validate();
Jason Samsb109cc72013-01-07 18:20:12 -0800252 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces, yuv);
Jason Sams2e1872f2010-08-17 16:25:41 -0700253 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700254 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
255 synchronized void nTypeGetNativeData(int id, int[] typeData) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800256 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700257 rsnTypeGetNativeData(mContext, id, typeData);
258 }
Jason Sams768bc022009-09-21 19:41:04 -0700259
Jason Sams857d0c72011-11-23 15:02:15 -0800260 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
261 synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800262 validate();
Jason Sams857d0c72011-11-23 15:02:15 -0800263 return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
Jason Sams2e1872f2010-08-17 16:25:41 -0700264 }
Jason Sams5476b452010-12-08 16:14:36 -0800265 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
266 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800267 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800268 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700269 }
Tim Murraya3145512012-12-04 17:59:29 -0800270
271 native int rsnAllocationCreateBitmapBackedAllocation(int con, int type, int mip, Bitmap bmp, int usage);
272 synchronized int nAllocationCreateBitmapBackedAllocation(int type, int mip, Bitmap bmp, int usage) {
273 validate();
274 return rsnAllocationCreateBitmapBackedAllocation(mContext, type, mip, bmp, usage);
275 }
276
277
Jason Sams5476b452010-12-08 16:14:36 -0800278 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
279 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800280 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800281 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800282 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700283 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
284 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800285 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700286 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
287 }
Jason Sams5476b452010-12-08 16:14:36 -0800288 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
289 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800290 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800291 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
292 }
293
Jason Sams4ef66502010-12-10 16:03:15 -0800294 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
295 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800296 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800297 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
298 }
299
300
Jason Sams5476b452010-12-08 16:14:36 -0800301 native void rsnAllocationSyncAll(int con, int alloc, int src);
302 synchronized void nAllocationSyncAll(int alloc, int src) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800303 validate();
Jason Sams5476b452010-12-08 16:14:36 -0800304 rsnAllocationSyncAll(mContext, alloc, src);
305 }
Jason Sams72226e02013-02-22 12:45:54 -0800306 native Surface rsnAllocationGetSurface(int con, int alloc);
307 synchronized Surface nAllocationGetSurface(int alloc) {
Jason Sams615e7ce2012-01-13 14:01:20 -0800308 validate();
Jason Sams72226e02013-02-22 12:45:54 -0800309 return rsnAllocationGetSurface(mContext, alloc);
Jason Samsfe1d5ff2012-03-23 11:47:26 -0700310 }
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700311 native void rsnAllocationSetSurface(int con, int alloc, Surface sur);
312 synchronized void nAllocationSetSurface(int alloc, Surface sur) {
Jason Sams163766c2012-02-15 12:04:24 -0800313 validate();
Jason Samsfb9aa9f2012-03-28 15:30:07 -0700314 rsnAllocationSetSurface(mContext, alloc, sur);
Jason Sams163766c2012-02-15 12:04:24 -0800315 }
316 native void rsnAllocationIoSend(int con, int alloc);
317 synchronized void nAllocationIoSend(int alloc) {
318 validate();
319 rsnAllocationIoSend(mContext, alloc);
320 }
321 native void rsnAllocationIoReceive(int con, int alloc);
322 synchronized void nAllocationIoReceive(int alloc) {
323 validate();
324 rsnAllocationIoReceive(mContext, alloc);
325 }
326
Jason Sams615e7ce2012-01-13 14:01:20 -0800327
Jason Samsf7086092011-01-12 13:28:37 -0800328 native void rsnAllocationGenerateMipmaps(int con, int alloc);
329 synchronized void nAllocationGenerateMipmaps(int alloc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800330 validate();
Jason Samsf7086092011-01-12 13:28:37 -0800331 rsnAllocationGenerateMipmaps(mContext, alloc);
332 }
Jason Sams4ef66502010-12-10 16:03:15 -0800333 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
334 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800335 validate();
Jason Sams4ef66502010-12-10 16:03:15 -0800336 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700337 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700338
Jason Sams49a05d72010-12-29 14:31:29 -0800339
340 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
341 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800342 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800343 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700344 }
Jason Sams49a05d72010-12-29 14:31:29 -0800345 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
346 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800347 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800348 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
349 }
350 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
351 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800352 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800353 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
354 }
355 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
356 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800357 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800358 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700359 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700360
Jason Sams49a05d72010-12-29 14:31:29 -0800361 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
362 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800363 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800364 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700365 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700366
Alex Sakhartchouk304b1f52011-06-14 11:13:19 -0700367 native void rsnAllocationData2D(int con,
368 int dstAlloc, int dstXoff, int dstYoff,
369 int dstMip, int dstFace,
370 int width, int height,
371 int srcAlloc, int srcXoff, int srcYoff,
372 int srcMip, int srcFace);
373 synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
374 int dstMip, int dstFace,
375 int width, int height,
376 int srcAlloc, int srcXoff, int srcYoff,
377 int srcMip, int srcFace) {
378 validate();
379 rsnAllocationData2D(mContext,
380 dstAlloc, dstXoff, dstYoff,
381 dstMip, dstFace,
382 width, height,
383 srcAlloc, srcXoff, srcYoff,
384 srcMip, srcFace);
385 }
386
Jason Samsfa445b92011-01-07 17:00:07 -0800387 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
388 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 -0800389 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800390 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
391 }
392 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
393 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 -0800394 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800395 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
396 }
Jason Sams49a05d72010-12-29 14:31:29 -0800397 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
398 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 -0800399 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800400 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700401 }
Jason Sams49a05d72010-12-29 14:31:29 -0800402 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
403 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 -0800404 validate();
Jason Sams49a05d72010-12-29 14:31:29 -0800405 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700406 }
Jason Samsfa445b92011-01-07 17:00:07 -0800407 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
408 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800409 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800410 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
411 }
Jason Sams49a05d72010-12-29 14:31:29 -0800412
Jason Samsfa445b92011-01-07 17:00:07 -0800413 native void rsnAllocationRead(int con, int id, byte[] d);
414 synchronized void nAllocationRead(int id, byte[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800415 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800416 rsnAllocationRead(mContext, id, d);
417 }
418 native void rsnAllocationRead(int con, int id, short[] d);
419 synchronized void nAllocationRead(int id, short[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800420 validate();
Jason Samsfa445b92011-01-07 17:00:07 -0800421 rsnAllocationRead(mContext, id, d);
422 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700423 native void rsnAllocationRead(int con, int id, int[] d);
424 synchronized void nAllocationRead(int id, int[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800425 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700426 rsnAllocationRead(mContext, id, d);
427 }
428 native void rsnAllocationRead(int con, int id, float[] d);
429 synchronized void nAllocationRead(int id, float[] d) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800430 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700431 rsnAllocationRead(mContext, id, d);
432 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700433 native int rsnAllocationGetType(int con, int id);
434 synchronized int nAllocationGetType(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800435 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700436 return rsnAllocationGetType(mContext, id);
437 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700438
Jason Sams5edc6082010-10-05 13:32:49 -0700439 native void rsnAllocationResize1D(int con, int id, int dimX);
440 synchronized void nAllocationResize1D(int id, int dimX) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800441 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700442 rsnAllocationResize1D(mContext, id, dimX);
443 }
444 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
445 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800446 validate();
Jason Sams5edc6082010-10-05 13:32:49 -0700447 rsnAllocationResize2D(mContext, id, dimX, dimY);
448 }
449
Jason Sams2e1872f2010-08-17 16:25:41 -0700450 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
451 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800452 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700453 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
454 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800455 native int rsnFileA3DCreateFromFile(int con, String path);
456 synchronized int nFileA3DCreateFromFile(String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800457 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800458 return rsnFileA3DCreateFromFile(mContext, path);
459 }
460 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
461 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800462 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800463 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
464 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700465 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
466 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800467 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700468 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
469 }
470 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
471 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800472 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700473 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
474 }
475 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
476 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800477 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700478 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
479 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700480
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800481 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
482 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800483 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700484 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
485 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800486 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
487 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800488 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800489 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
490 }
491 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
492 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800493 validate();
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800494 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
495 }
Jason Sams22534172009-08-04 16:58:20 -0700496
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700497
Jason Sams2e1872f2010-08-17 16:25:41 -0700498 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
499 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800500 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700501 rsnScriptBindAllocation(mContext, script, alloc, slot);
502 }
503 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
504 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800505 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700506 rsnScriptSetTimeZone(mContext, script, timeZone);
507 }
508 native void rsnScriptInvoke(int con, int id, int slot);
509 synchronized void nScriptInvoke(int id, int slot) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800510 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700511 rsnScriptInvoke(mContext, id, slot);
512 }
Jason Sams6e494d32011-04-27 16:33:11 -0700513 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
514 native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800515 native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout, byte[] params,
516 int xstart, int xend, int ystart, int yend, int zstart, int zend);
Stephen Hinesdac6ed02013-02-13 00:09:02 -0800517 native void rsnScriptForEachClipped(int con, int id, int slot, int ain, int aout,
518 int xstart, int xend, int ystart, int yend, int zstart, int zend);
Jason Sams6e494d32011-04-27 16:33:11 -0700519 synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
520 validate();
521 if (params == null) {
522 rsnScriptForEach(mContext, id, slot, ain, aout);
523 } else {
524 rsnScriptForEach(mContext, id, slot, ain, aout, params);
525 }
526 }
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800527
528 synchronized void nScriptForEachClipped(int id, int slot, int ain, int aout, byte[] params,
529 int xstart, int xend, int ystart, int yend, int zstart, int zend) {
530 validate();
Stephen Hinesdac6ed02013-02-13 00:09:02 -0800531 if (params == null) {
532 rsnScriptForEachClipped(mContext, id, slot, ain, aout, xstart, xend, ystart, yend, zstart, zend);
533 } else {
534 rsnScriptForEachClipped(mContext, id, slot, ain, aout, params, xstart, xend, ystart, yend, zstart, zend);
535 }
Tim Murrayeb8c29c2013-02-07 12:16:41 -0800536 }
537
Jason Sams2e1872f2010-08-17 16:25:41 -0700538 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
539 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800540 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700541 rsnScriptInvokeV(mContext, id, slot, params);
542 }
543 native void rsnScriptSetVarI(int con, int id, int slot, int val);
544 synchronized void nScriptSetVarI(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800545 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700546 rsnScriptSetVarI(mContext, id, slot, val);
547 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700548 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
549 synchronized void nScriptSetVarJ(int id, int slot, long val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800550 validate();
Stephen Hines031ec58c2010-10-11 10:54:21 -0700551 rsnScriptSetVarJ(mContext, id, slot, val);
552 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700553 native void rsnScriptSetVarF(int con, int id, int slot, float val);
554 synchronized void nScriptSetVarF(int id, int slot, float val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800555 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700556 rsnScriptSetVarF(mContext, id, slot, val);
557 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700558 native void rsnScriptSetVarD(int con, int id, int slot, double val);
559 synchronized void nScriptSetVarD(int id, int slot, double val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800560 validate();
Stephen Hinesca54ec32010-09-20 17:20:30 -0700561 rsnScriptSetVarD(mContext, id, slot, val);
562 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700563 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
564 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800565 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700566 rsnScriptSetVarV(mContext, id, slot, val);
567 }
Stephen Hinesadeb8092012-04-20 14:26:06 -0700568 native void rsnScriptSetVarVE(int con, int id, int slot, byte[] val,
569 int e, int[] dims);
570 synchronized void nScriptSetVarVE(int id, int slot, byte[] val,
571 int e, int[] dims) {
572 validate();
573 rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
574 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800575 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
576 synchronized void nScriptSetVarObj(int id, int slot, int val) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800577 validate();
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800578 rsnScriptSetVarObj(mContext, id, slot, val);
579 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700580
Jason Samse4a06c52011-03-16 16:29:28 -0700581 native int rsnScriptCCreate(int con, String resName, String cacheDir,
582 byte[] script, int length);
583 synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800584 validate();
Jason Samse4a06c52011-03-16 16:29:28 -0700585 return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
Jason Sams2e1872f2010-08-17 16:25:41 -0700586 }
Jason Samsebfb4362009-09-23 13:57:02 -0700587
Jason Sams6ab97682012-08-10 12:09:43 -0700588 native int rsnScriptIntrinsicCreate(int con, int id, int eid);
589 synchronized int nScriptIntrinsicCreate(int id, int eid) {
590 validate();
591 return rsnScriptIntrinsicCreate(mContext, id, eid);
592 }
593
Jason Sams08a81582012-09-18 12:32:10 -0700594 native int rsnScriptKernelIDCreate(int con, int sid, int slot, int sig);
595 synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) {
596 validate();
597 return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
598 }
599
600 native int rsnScriptFieldIDCreate(int con, int sid, int slot);
601 synchronized int nScriptFieldIDCreate(int sid, int slot) {
602 validate();
603 return rsnScriptFieldIDCreate(mContext, sid, slot);
604 }
605
606 native int rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types);
607 synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) {
608 validate();
609 return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
610 }
611
612 native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc);
613 synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) {
614 validate();
615 rsnScriptGroupSetInput(mContext, group, kernel, alloc);
616 }
617
618 native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc);
619 synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) {
620 validate();
621 rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
622 }
623
624 native void rsnScriptGroupExecute(int con, int group);
625 synchronized void nScriptGroupExecute(int group) {
626 validate();
627 rsnScriptGroupExecute(mContext, group);
628 }
629
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700630 native int rsnSamplerCreate(int con, int magFilter, int minFilter,
631 int wrapS, int wrapT, int wrapR, float aniso);
632 synchronized int nSamplerCreate(int magFilter, int minFilter,
633 int wrapS, int wrapT, int wrapR, float aniso) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800634 validate();
Alex Sakhartchouka89094a2011-05-04 17:45:36 -0700635 return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
Jason Sams2e1872f2010-08-17 16:25:41 -0700636 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800637
Jason Sams331bf9b2011-04-06 11:23:54 -0700638 native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
639 boolean depthMask, boolean dither,
640 int srcMode, int dstMode, int depthFunc);
641 synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
642 boolean depthMask, boolean dither,
643 int srcMode, int dstMode, int depthFunc) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800644 validate();
Jason Samsbd184c52011-04-06 11:44:47 -0700645 return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
646 dstMode, depthFunc);
Jason Sams2e1872f2010-08-17 16:25:41 -0700647 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700648
Jason Sams94aaed32011-09-23 14:18:53 -0700649 native int rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
650 synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800651 validate();
Jason Sams94aaed32011-09-23 14:18:53 -0700652 return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
Jason Sams2e1872f2010-08-17 16:25:41 -0700653 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700654
Jason Sams2e1872f2010-08-17 16:25:41 -0700655 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
656 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800657 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700658 rsnProgramBindConstants(mContext, pv, slot, mID);
659 }
660 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
661 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800662 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700663 rsnProgramBindTexture(mContext, vpf, slot, a);
664 }
665 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
666 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800667 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700668 rsnProgramBindSampler(mContext, vpf, slot, s);
669 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800670 native int rsnProgramFragmentCreate(int con, String shader, String[] texNames, int[] params);
671 synchronized int nProgramFragmentCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800672 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800673 return rsnProgramFragmentCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700674 }
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800675 native int rsnProgramVertexCreate(int con, String shader, String[] texNames, int[] params);
676 synchronized int nProgramVertexCreate(String shader, String[] texNames, int[] params) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800677 validate();
Alex Sakhartchouk2123b462012-02-15 16:21:46 -0800678 return rsnProgramVertexCreate(mContext, shader, texNames, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700679 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700680
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700681 native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
682 synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800683 validate();
Alex Sakhartchouk25999a02011-05-12 10:38:03 -0700684 return rsnMeshCreate(mContext, vtx, idx, prim);
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800685 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700686 native int rsnMeshGetVertexBufferCount(int con, int id);
687 synchronized int nMeshGetVertexBufferCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800688 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700689 return rsnMeshGetVertexBufferCount(mContext, id);
690 }
691 native int rsnMeshGetIndexCount(int con, int id);
692 synchronized int nMeshGetIndexCount(int id) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800693 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700694 return rsnMeshGetIndexCount(mContext, id);
695 }
696 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
697 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800698 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700699 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
700 }
701 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
702 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
Jason Samsd1ac9812011-01-18 18:12:26 -0800703 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700704 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
705 }
706
Jason Samsf15ed012011-10-31 13:23:43 -0700707 native int rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
708 synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
709 validate();
710 return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
711 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700712
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800713 int mDev;
714 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700715 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800716 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700717
Jason Sams8cb39de2010-06-01 15:47:01 -0700718 Element mElement_U8;
719 Element mElement_I8;
720 Element mElement_U16;
721 Element mElement_I16;
722 Element mElement_U32;
723 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700724 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700725 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700726 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700727 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700728 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700729
Jason Sams8cb39de2010-06-01 15:47:01 -0700730 Element mElement_ELEMENT;
731 Element mElement_TYPE;
732 Element mElement_ALLOCATION;
733 Element mElement_SAMPLER;
734 Element mElement_SCRIPT;
735 Element mElement_MESH;
736 Element mElement_PROGRAM_FRAGMENT;
737 Element mElement_PROGRAM_VERTEX;
738 Element mElement_PROGRAM_RASTER;
739 Element mElement_PROGRAM_STORE;
Stephen Hines3a291412012-04-11 17:27:29 -0700740 Element mElement_FONT;
Jason Samsa70f4162010-03-26 15:33:42 -0700741
Jason Sams3c0dfba2009-09-27 17:50:38 -0700742 Element mElement_A_8;
743 Element mElement_RGB_565;
744 Element mElement_RGB_888;
745 Element mElement_RGBA_5551;
746 Element mElement_RGBA_4444;
747 Element mElement_RGBA_8888;
748
Jason Sams8cb39de2010-06-01 15:47:01 -0700749 Element mElement_FLOAT_2;
750 Element mElement_FLOAT_3;
751 Element mElement_FLOAT_4;
Stephen Hines836c4a52011-06-01 14:38:10 -0700752
753 Element mElement_DOUBLE_2;
754 Element mElement_DOUBLE_3;
755 Element mElement_DOUBLE_4;
756
757 Element mElement_UCHAR_2;
758 Element mElement_UCHAR_3;
Jason Sams8cb39de2010-06-01 15:47:01 -0700759 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800760
Stephen Hines836c4a52011-06-01 14:38:10 -0700761 Element mElement_CHAR_2;
762 Element mElement_CHAR_3;
763 Element mElement_CHAR_4;
764
765 Element mElement_USHORT_2;
766 Element mElement_USHORT_3;
767 Element mElement_USHORT_4;
768
769 Element mElement_SHORT_2;
770 Element mElement_SHORT_3;
771 Element mElement_SHORT_4;
772
773 Element mElement_UINT_2;
774 Element mElement_UINT_3;
775 Element mElement_UINT_4;
776
777 Element mElement_INT_2;
778 Element mElement_INT_3;
779 Element mElement_INT_4;
780
781 Element mElement_ULONG_2;
782 Element mElement_ULONG_3;
783 Element mElement_ULONG_4;
784
785 Element mElement_LONG_2;
786 Element mElement_LONG_3;
787 Element mElement_LONG_4;
788
Jason Sams1d45c472010-08-25 14:31:48 -0700789 Element mElement_MATRIX_4X4;
790 Element mElement_MATRIX_3X3;
791 Element mElement_MATRIX_2X2;
792
Jason Sams4d339932010-05-11 14:03:58 -0700793 Sampler mSampler_CLAMP_NEAREST;
794 Sampler mSampler_CLAMP_LINEAR;
795 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
796 Sampler mSampler_WRAP_NEAREST;
797 Sampler mSampler_WRAP_LINEAR;
798 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
Tim Murray6b9b2ca2013-02-15 13:25:55 -0800799 Sampler mSampler_MIRRORED_REPEAT_NEAREST;
800 Sampler mSampler_MIRRORED_REPEAT_LINEAR;
801 Sampler mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
Jason Sams4d339932010-05-11 14:03:58 -0700802
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700803 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
804 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700805 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
806 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700807
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700808 ProgramRaster mProgramRaster_CULL_BACK;
809 ProgramRaster mProgramRaster_CULL_FRONT;
810 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700811
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700812 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700813 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700814
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700815 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800816 * Base class application should derive from for handling RS messages
Stephen Hines8cecbb52011-02-28 18:20:34 -0800817 * coming from their scripts. When a script calls sendToClient the data
Jason Sams27676fe2010-11-10 17:00:59 -0800818 * fields will be filled in and then the run method called by a message
819 * handling thread. This will occur some time after sendToClient completes
820 * in the script.
821 *
822 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800823 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700824 protected int[] mData;
825 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800826 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700827 public void run() {
828 }
829 }
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700830 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800831 * If an application is expecting messages it should set this field to an
832 * instance of RSMessage. This instance will receive all the user messages
833 * sent from sendToClient by scripts from this context.
834 *
835 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800836 RSMessageHandler mMessageCallback = null;
837
838 public void setMessageHandler(RSMessageHandler msg) {
839 mMessageCallback = msg;
840 }
841 public RSMessageHandler getMessageHandler() {
842 return mMessageCallback;
843 }
Jason Sams516c3192009-10-06 13:58:47 -0700844
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700845 /**
Jason Sams455d6442013-02-05 19:20:18 -0800846 * @hide
847 *
848 * @param id
849 * @param data
850 */
851 public void sendMessage(int id, int[] data) {
852 nContextSendMessage(id, data);
853 }
854
855 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800856 * Runtime error base class. An application should derive from this class
857 * if it wishes to install an error handler. When errors occur at runtime
858 * the fields in this class will be filled and the run method called.
859 *
860 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800861 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800862 protected String mErrorMessage;
863 protected int mErrorNum;
864 public void run() {
865 }
866 }
Jason Sams27676fe2010-11-10 17:00:59 -0800867
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700868 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800869 * Application Error handler. All runtime errors will be dispatched to the
870 * instance of RSAsyncError set here. If this field is null a
871 * RSRuntimeException will instead be thrown with details about the error.
872 * This will cause program termaination.
873 *
874 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800875 RSErrorHandler mErrorCallback = null;
876
877 public void setErrorHandler(RSErrorHandler msg) {
878 mErrorCallback = msg;
879 }
880 public RSErrorHandler getErrorHandler() {
881 return mErrorCallback;
882 }
Jason Sams1c415172010-11-08 17:06:46 -0800883
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700884 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800885 * RenderScript worker threads priority enumeration. The default value is
886 * NORMAL. Applications wishing to do background processing such as
887 * wallpapers should set their priority to LOW to avoid starving forground
888 * processes.
889 */
Jason Sams7d787b42009-11-15 12:14:26 -0800890 public enum Priority {
Glenn Kasten260c77a2011-06-01 17:25:54 -0700891 LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
892 NORMAL (Process.THREAD_PRIORITY_DISPLAY);
Jason Sams7d787b42009-11-15 12:14:26 -0800893
894 int mID;
895 Priority(int id) {
896 mID = id;
897 }
898 }
899
Jason Sams771bebb2009-12-07 12:40:12 -0800900 void validate() {
901 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700902 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800903 }
904 }
905
Jason Sams27676fe2010-11-10 17:00:59 -0800906
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -0700907 /**
Jason Sams27676fe2010-11-10 17:00:59 -0800908 * Change the priority of the worker threads for this context.
909 *
910 * @param p New priority to be set.
911 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800912 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800913 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800914 nContextSetPriority(p.mID);
915 }
916
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800917 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700918 RenderScript mRS;
919 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800920 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800921
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800922 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
923 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
924 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
925 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
926 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700927
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800928 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800929
Jason Sams516c3192009-10-06 13:58:47 -0700930 MessageThread(RenderScript rs) {
931 super("RSMessageThread");
932 mRS = rs;
933
934 }
935
936 public void run() {
937 // This function is a temporary solution. The final solution will
938 // used typed allocations where the message id is the type indicator.
939 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700940 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700941 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700942 rbuf[0] = 0;
Jason Samsedbfabd2011-05-17 15:01:29 -0700943 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800944 int size = mAuxData[1];
945 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800946
947 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
948 if ((size>>2) >= rbuf.length) {
949 rbuf = new int[(size + 3) >> 2];
950 }
Jason Samsedbfabd2011-05-17 15:01:29 -0700951 if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
952 RS_MESSAGE_TO_CLIENT_USER) {
953 throw new RSDriverException("Error processing message from Renderscript.");
954 }
Jason Sams1c415172010-11-08 17:06:46 -0800955
956 if(mRS.mMessageCallback != null) {
957 mRS.mMessageCallback.mData = rbuf;
958 mRS.mMessageCallback.mID = subID;
959 mRS.mMessageCallback.mLength = size;
960 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700961 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800962 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700963 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700964 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700965 }
Jason Sams1c415172010-11-08 17:06:46 -0800966
967 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
968 String e = mRS.nContextGetErrorMessage(mRS.mContext);
969
Jason Samsadd9d962010-11-22 16:20:16 -0800970 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
971 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
972 }
973
Jason Sams1c415172010-11-08 17:06:46 -0800974 if(mRS.mErrorCallback != null) {
975 mRS.mErrorCallback.mErrorMessage = e;
976 mRS.mErrorCallback.mErrorNum = subID;
977 mRS.mErrorCallback.run();
978 } else {
Jason Samsa4b7bc92013-02-05 15:05:39 -0800979 android.util.Log.e(LOG_TAG, "non fatal RS error, " + e);
Stephen Hinesbe74bdd2012-02-03 15:29:36 -0800980 // Do not throw here. In these cases, we do not have
981 // a fatal error.
Jason Sams1c415172010-11-08 17:06:46 -0800982 }
983 continue;
984 }
985
986 // 2: teardown.
987 // But we want to avoid starving other threads during
988 // teardown by yielding until the next line in the destructor
989 // can execute to set mRun = false
990 try {
991 sleep(1, 0);
992 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700993 }
Jason Sams516c3192009-10-06 13:58:47 -0700994 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800995 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700996 }
997 }
998
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800999 RenderScript(Context ctx) {
Jason Sams1a4e1f32012-02-24 17:51:24 -08001000 if (ctx != null) {
1001 mApplicationContext = ctx.getApplicationContext();
1002 }
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001003 }
1004
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001005 /**
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001006 * Gets the application context associated with the RenderScript context.
1007 *
1008 * @return The application context.
1009 */
1010 public final Context getApplicationContext() {
1011 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001012 }
1013
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001014 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001015 * Create a basic RenderScript context.
1016 *
Jason Sams1a4e1f32012-02-24 17:51:24 -08001017 * @hide
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001018 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -08001019 * @return RenderScript
1020 */
Jason Sams1a4e1f32012-02-24 17:51:24 -08001021 public static RenderScript create(Context ctx, int sdkVersion) {
Shih-wei Liao6b32fab2010-12-10 01:03:59 -08001022 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -08001023
1024 rs.mDev = rs.nDeviceCreate();
Stephen Hines4382467a2011-08-01 15:02:34 -07001025 rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion);
Jason Sams26985362011-05-03 15:01:58 -07001026 if (rs.mContext == 0) {
1027 throw new RSDriverException("Failed to create RS context.");
1028 }
Jason Sams704ff642010-02-09 16:05:07 -08001029 rs.mMessageThread = new MessageThread(rs);
1030 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -08001031 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -08001032 }
1033
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001034 /**
Jason Sams1a4e1f32012-02-24 17:51:24 -08001035 * Create a basic RenderScript context.
1036 *
1037 * @param ctx The context.
1038 * @return RenderScript
1039 */
1040 public static RenderScript create(Context ctx) {
1041 int v = ctx.getApplicationInfo().targetSdkVersion;
1042 return create(ctx, v);
1043 }
1044
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001045 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001046 * Print the currently available debugging information about the state of
1047 * the RS context to the log.
1048 *
Jason Sams27676fe2010-11-10 17:00:59 -08001049 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001050 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001051 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001052 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -08001053 }
1054
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001055 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001056 * Wait for any commands in the fifo between the java bindings and native to
1057 * be processed.
1058 *
1059 */
Jason Sams96ed4cf2010-06-15 12:15:57 -07001060 public void finish() {
1061 nContextFinish();
1062 }
1063
Stephen Hines9c9ad3f8c22012-05-07 15:34:29 -07001064 /**
Jason Sams27676fe2010-11-10 17:00:59 -08001065 * Destroy this renderscript context. Once this function is called its no
1066 * longer legal to use this or any objects created by this context.
1067 *
1068 */
Jason Samsf5b45962009-08-25 14:49:07 -07001069 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -08001070 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -07001071 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -07001072 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -07001073 try {
1074 mMessageThread.join();
1075 } catch(InterruptedException e) {
1076 }
Jason Sams516c3192009-10-06 13:58:47 -07001077
Jason Sams2e1872f2010-08-17 16:25:41 -07001078 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -07001079 mContext = 0;
1080
1081 nDeviceDestroy(mDev);
1082 mDev = 0;
1083 }
Jason Sams02fb2cb2009-05-28 15:37:57 -07001084
Jason Samsa9e7a052009-09-25 14:51:22 -07001085 boolean isAlive() {
1086 return mContext != 0;
1087 }
1088
Jason Samsbf6ef8d2010-12-06 15:59:59 -08001089 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -07001090 if(o != null) {
Jason Samse07694b2012-04-03 15:36:36 -07001091 return o.getID(this);
Jason Samsd8e41612009-08-20 17:22:40 -07001092 }
Jason Sams6b9dec02009-09-23 16:38:37 -07001093 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001094 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001095}