blob: 28b32d5df69c26da0d217d6d822da60c0a37e63a [file] [log] [blame]
Jack Palevich60aa3ea2009-05-26 13:45:08 -07001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Jason Sams94d8e90a2009-06-10 16:09:05 -070017package android.renderscript;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070018
Jason Sams43ee06852009-08-12 17:54:11 -070019import java.lang.reflect.Field;
Jason Sams36e612a2009-07-31 16:26:13 -070020
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080021import android.content.Context;
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -080022import android.content.res.AssetManager;
Jason Samsb8c5a842009-07-31 20:40:47 -070023import android.graphics.Bitmap;
Romain Guy650a3eb2009-08-31 14:06:43 -070024import android.graphics.BitmapFactory;
Jason Sams36e612a2009-07-31 16:26:13 -070025import android.util.Config;
26import android.util.Log;
27import android.view.Surface;
Jack Palevich43702d82009-05-28 13:38:16 -070028
Jack Palevich60aa3ea2009-05-26 13:45:08 -070029
Jason Samse29d4712009-07-23 15:19:03 -070030/**
Jason Sams27676fe2010-11-10 17:00:59 -080031 * RenderScript base master class. An instance of this class creates native
32 * worker threads for processing commands from this object. This base class
33 * does not provide any extended capabilities beyond simple data processing.
34 * For extended capabilities use derived classes such as RenderScriptGL.
35 *
36 *
37 *
Jason Samse29d4712009-07-23 15:19:03 -070038 **/
Jack Palevich60aa3ea2009-05-26 13:45:08 -070039public class RenderScript {
Jason Sams3bc47d42009-11-12 15:10:25 -080040 static final String LOG_TAG = "RenderScript_jni";
Jason Samsbf6ef8d2010-12-06 15:59:59 -080041 static final boolean DEBUG = false;
Romain Guy650a3eb2009-08-31 14:06:43 -070042 @SuppressWarnings({"UnusedDeclaration", "deprecation"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -080043 static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070044
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080045 private Context mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -070046
Shih-wei Liao6b32fab2010-12-10 01:03:59 -080047 /*
Jack Palevich60aa3ea2009-05-26 13:45:08 -070048 * We use a class initializer to allow the native code to cache some
49 * field offsets.
50 */
Romain Guy650a3eb2009-08-31 14:06:43 -070051 @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -080052 static boolean sInitialized;
53 native static void _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070054
Jason Samsdba3ba52009-07-30 14:56:12 -070055
Jack Palevich60aa3ea2009-05-26 13:45:08 -070056 static {
57 sInitialized = false;
58 try {
Jason Samse29d4712009-07-23 15:19:03 -070059 System.loadLibrary("rs_jni");
Jack Palevich60aa3ea2009-05-26 13:45:08 -070060 _nInit();
Jack Palevich60aa3ea2009-05-26 13:45:08 -070061 sInitialized = true;
62 } catch (UnsatisfiedLinkError e) {
Jason Samsfa445b92011-01-07 17:00:07 -080063 Log.e(LOG_TAG, "Error loading RS jni library: " + e);
64 throw new RSRuntimeException("Error loading RS jni library: " + e);
Jack Palevich60aa3ea2009-05-26 13:45:08 -070065 }
66 }
67
Jason Sams2e1872f2010-08-17 16:25:41 -070068 // Non-threadsafe functions.
Jason Sams36e612a2009-07-31 16:26:13 -070069 native int nDeviceCreate();
70 native void nDeviceDestroy(int dev);
Jason Samsebfb4362009-09-23 13:57:02 -070071 native void nDeviceSetConfig(int dev, int param, int value);
Jason Sams1c415172010-11-08 17:06:46 -080072 native void nContextGetUserMessage(int con, int[] data);
73 native String nContextGetErrorMessage(int con);
74 native int nContextPeekMessage(int con, int[] subID, boolean wait);
Jason Sams2e1872f2010-08-17 16:25:41 -070075 native void nContextInitToClient(int con);
76 native void nContextDeinitToClient(int con);
Jason Sams3eaa3382009-06-10 15:04:38 -070077
Jason Sams718cd1f2009-12-23 14:35:29 -080078
Jason Sams2e1872f2010-08-17 16:25:41 -070079 // Methods below are wrapped to protect the non-threadsafe
80 // lockless fifo.
Jason Sams11c8af92010-10-13 15:31:10 -070081 native int rsnContextCreateGL(int dev, int ver,
82 int colorMin, int colorPref,
83 int alphaMin, int alphaPref,
84 int depthMin, int depthPref,
85 int stencilMin, int stencilPref,
86 int samplesMin, int samplesPref, float samplesQ);
87 synchronized int nContextCreateGL(int dev, int ver,
88 int colorMin, int colorPref,
89 int alphaMin, int alphaPref,
90 int depthMin, int depthPref,
91 int stencilMin, int stencilPref,
92 int samplesMin, int samplesPref, float samplesQ) {
93 return rsnContextCreateGL(dev, ver, colorMin, colorPref,
94 alphaMin, alphaPref, depthMin, depthPref,
95 stencilMin, stencilPref,
96 samplesMin, samplesPref, samplesQ);
Jason Sams2e1872f2010-08-17 16:25:41 -070097 }
98 native int rsnContextCreate(int dev, int ver);
99 synchronized int nContextCreate(int dev, int ver) {
100 return rsnContextCreate(dev, ver);
101 }
102 native void rsnContextDestroy(int con);
103 synchronized void nContextDestroy() {
104 rsnContextDestroy(mContext);
105 }
106 native void rsnContextSetSurface(int con, int w, int h, Surface sur);
107 synchronized void nContextSetSurface(int w, int h, Surface sur) {
108 rsnContextSetSurface(mContext, w, h, sur);
109 }
110 native void rsnContextSetPriority(int con, int p);
111 synchronized void nContextSetPriority(int p) {
112 rsnContextSetPriority(mContext, p);
113 }
114 native void rsnContextDump(int con, int bits);
115 synchronized void nContextDump(int bits) {
116 rsnContextDump(mContext, bits);
117 }
118 native void rsnContextFinish(int con);
119 synchronized void nContextFinish() {
120 rsnContextFinish(mContext);
121 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700122
Jason Sams2e1872f2010-08-17 16:25:41 -0700123 native void rsnContextBindRootScript(int con, int script);
124 synchronized void nContextBindRootScript(int script) {
125 rsnContextBindRootScript(mContext, script);
126 }
127 native void rsnContextBindSampler(int con, int sampler, int slot);
128 synchronized void nContextBindSampler(int sampler, int slot) {
129 rsnContextBindSampler(mContext, sampler, slot);
130 }
131 native void rsnContextBindProgramStore(int con, int pfs);
132 synchronized void nContextBindProgramStore(int pfs) {
133 rsnContextBindProgramStore(mContext, pfs);
134 }
135 native void rsnContextBindProgramFragment(int con, int pf);
136 synchronized void nContextBindProgramFragment(int pf) {
137 rsnContextBindProgramFragment(mContext, pf);
138 }
139 native void rsnContextBindProgramVertex(int con, int pv);
140 synchronized void nContextBindProgramVertex(int pv) {
141 rsnContextBindProgramVertex(mContext, pv);
142 }
143 native void rsnContextBindProgramRaster(int con, int pr);
144 synchronized void nContextBindProgramRaster(int pr) {
145 rsnContextBindProgramRaster(mContext, pr);
146 }
147 native void rsnContextPause(int con);
148 synchronized void nContextPause() {
149 rsnContextPause(mContext);
150 }
151 native void rsnContextResume(int con);
152 synchronized void nContextResume() {
153 rsnContextResume(mContext);
154 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700155
Jason Sams2e1872f2010-08-17 16:25:41 -0700156 native void rsnAssignName(int con, int obj, byte[] name);
157 synchronized void nAssignName(int obj, byte[] name) {
158 rsnAssignName(mContext, obj, name);
159 }
160 native String rsnGetName(int con, int obj);
161 synchronized String nGetName(int obj) {
162 return rsnGetName(mContext, obj);
163 }
164 native void rsnObjDestroy(int con, int id);
165 synchronized void nObjDestroy(int id) {
166 rsnObjDestroy(mContext, id);
167 }
Jason Samsfe08d992009-05-27 14:45:32 -0700168
Jason Sams2e1872f2010-08-17 16:25:41 -0700169 native int rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
170 synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
171 return rsnElementCreate(mContext, type, kind, norm, vecSize);
172 }
Jason Sams70d4e502010-09-02 17:35:23 -0700173 native int rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
174 synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
175 return rsnElementCreate2(mContext, elements, names, arraySizes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700176 }
177 native void rsnElementGetNativeData(int con, int id, int[] elementData);
178 synchronized void nElementGetNativeData(int id, int[] elementData) {
179 rsnElementGetNativeData(mContext, id, elementData);
180 }
181 native void rsnElementGetSubElements(int con, int id, int[] IDs, String[] names);
182 synchronized void nElementGetSubElements(int id, int[] IDs, String[] names) {
183 rsnElementGetSubElements(mContext, id, IDs, names);
184 }
Jason Sams768bc022009-09-21 19:41:04 -0700185
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800186 native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
187 synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
188 return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
Jason Sams2e1872f2010-08-17 16:25:41 -0700189 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700190 native void rsnTypeGetNativeData(int con, int id, int[] typeData);
191 synchronized void nTypeGetNativeData(int id, int[] typeData) {
192 rsnTypeGetNativeData(mContext, id, typeData);
193 }
Jason Sams768bc022009-09-21 19:41:04 -0700194
Jason Samsd4b23b52010-12-13 15:32:35 -0800195 native int rsnAllocationCreateTyped(int con, int type, int mip, int usage);
196 synchronized int nAllocationCreateTyped(int type, int mip, int usage) {
197 return rsnAllocationCreateTyped(mContext, type, mip, usage);
Jason Sams2e1872f2010-08-17 16:25:41 -0700198 }
Jason Sams5476b452010-12-08 16:14:36 -0800199 native int rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
200 synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
201 return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk26ae3902010-10-11 12:35:15 -0700202 }
Jason Sams5476b452010-12-08 16:14:36 -0800203 native int rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
204 synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
205 return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
Alex Sakhartchouk67f2e442010-11-18 15:22:43 -0800206 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700207 native int rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
208 synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
209 return rsnAllocationCreateBitmapRef(mContext, type, bmp);
210 }
Jason Sams5476b452010-12-08 16:14:36 -0800211 native int rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
212 synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
213 return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
214 }
215
Jason Sams4ef66502010-12-10 16:03:15 -0800216 native void rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
217 synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
218 rsnAllocationCopyToBitmap(mContext, alloc, bmp);
219 }
220
221
Jason Sams5476b452010-12-08 16:14:36 -0800222 native void rsnAllocationSyncAll(int con, int alloc, int src);
223 synchronized void nAllocationSyncAll(int alloc, int src) {
224 rsnAllocationSyncAll(mContext, alloc, src);
225 }
Jason Samsf7086092011-01-12 13:28:37 -0800226 native void rsnAllocationGenerateMipmaps(int con, int alloc);
227 synchronized void nAllocationGenerateMipmaps(int alloc) {
228 rsnAllocationGenerateMipmaps(mContext, alloc);
229 }
Jason Sams4ef66502010-12-10 16:03:15 -0800230 native void rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
231 synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
232 rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
Jason Sams2e1872f2010-08-17 16:25:41 -0700233 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700234
Jason Sams49a05d72010-12-29 14:31:29 -0800235
236 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
237 synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
238 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700239 }
Jason Sams49a05d72010-12-29 14:31:29 -0800240 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
241 synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
242 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
243 }
244 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
245 synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
246 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
247 }
248 native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
249 synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
250 rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700251 }
Alex Sakhartchoukaae74ad2010-06-04 10:06:50 -0700252
Jason Sams49a05d72010-12-29 14:31:29 -0800253 native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
254 synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
255 rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700256 }
Alex Sakhartchouk9b949fc2010-06-24 17:15:34 -0700257
Jason Samsfa445b92011-01-07 17:00:07 -0800258 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
259 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) {
260 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
261 }
262 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
263 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) {
264 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
265 }
Jason Sams49a05d72010-12-29 14:31:29 -0800266 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
267 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) {
268 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700269 }
Jason Sams49a05d72010-12-29 14:31:29 -0800270 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
271 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) {
272 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
Jason Sams2e1872f2010-08-17 16:25:41 -0700273 }
Jason Samsfa445b92011-01-07 17:00:07 -0800274 native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
275 synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
276 rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
277 }
Jason Sams49a05d72010-12-29 14:31:29 -0800278
Jason Samsfa445b92011-01-07 17:00:07 -0800279 native void rsnAllocationRead(int con, int id, byte[] d);
280 synchronized void nAllocationRead(int id, byte[] d) {
281 rsnAllocationRead(mContext, id, d);
282 }
283 native void rsnAllocationRead(int con, int id, short[] d);
284 synchronized void nAllocationRead(int id, short[] d) {
285 rsnAllocationRead(mContext, id, d);
286 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700287 native void rsnAllocationRead(int con, int id, int[] d);
288 synchronized void nAllocationRead(int id, int[] d) {
289 rsnAllocationRead(mContext, id, d);
290 }
291 native void rsnAllocationRead(int con, int id, float[] d);
292 synchronized void nAllocationRead(int id, float[] d) {
293 rsnAllocationRead(mContext, id, d);
294 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700295 native int rsnAllocationGetType(int con, int id);
296 synchronized int nAllocationGetType(int id) {
297 return rsnAllocationGetType(mContext, id);
298 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700299
Jason Sams5edc6082010-10-05 13:32:49 -0700300 native void rsnAllocationResize1D(int con, int id, int dimX);
301 synchronized void nAllocationResize1D(int id, int dimX) {
302 rsnAllocationResize1D(mContext, id, dimX);
303 }
304 native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
305 synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
306 rsnAllocationResize2D(mContext, id, dimX, dimY);
307 }
308
Jason Sams2e1872f2010-08-17 16:25:41 -0700309 native int rsnFileA3DCreateFromAssetStream(int con, int assetStream);
310 synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
311 return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
312 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800313 native int rsnFileA3DCreateFromFile(int con, String path);
314 synchronized int nFileA3DCreateFromFile(String path) {
315 return rsnFileA3DCreateFromFile(mContext, path);
316 }
317 native int rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
318 synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
319 return rsnFileA3DCreateFromAsset(mContext, mgr, path);
320 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700321 native int rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
322 synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
323 return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
324 }
325 native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
326 synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
327 rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
328 }
329 native int rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
330 synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
331 return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
332 }
Jason Samsbd1c3ad2009-08-03 16:03:08 -0700333
Alex Sakhartchouke27cdee2010-12-17 11:41:08 -0800334 native int rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
335 synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
Jason Sams2e1872f2010-08-17 16:25:41 -0700336 return rsnFontCreateFromFile(mContext, fileName, size, dpi);
337 }
Alex Sakhartchoukb0253ea2011-01-07 11:12:08 -0800338 native int rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
339 synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
340 return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
341 }
342 native int rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
343 synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
344 return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
345 }
Jason Sams22534172009-08-04 16:58:20 -0700346
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700347
Jason Sams2e1872f2010-08-17 16:25:41 -0700348 native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
349 synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
350 rsnScriptBindAllocation(mContext, script, alloc, slot);
351 }
352 native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
353 synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
354 rsnScriptSetTimeZone(mContext, script, timeZone);
355 }
356 native void rsnScriptInvoke(int con, int id, int slot);
357 synchronized void nScriptInvoke(int id, int slot) {
358 rsnScriptInvoke(mContext, id, slot);
359 }
360 native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
361 synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
362 rsnScriptInvokeV(mContext, id, slot, params);
363 }
364 native void rsnScriptSetVarI(int con, int id, int slot, int val);
365 synchronized void nScriptSetVarI(int id, int slot, int val) {
366 rsnScriptSetVarI(mContext, id, slot, val);
367 }
Stephen Hines031ec58c2010-10-11 10:54:21 -0700368 native void rsnScriptSetVarJ(int con, int id, int slot, long val);
369 synchronized void nScriptSetVarJ(int id, int slot, long val) {
370 rsnScriptSetVarJ(mContext, id, slot, val);
371 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700372 native void rsnScriptSetVarF(int con, int id, int slot, float val);
373 synchronized void nScriptSetVarF(int id, int slot, float val) {
374 rsnScriptSetVarF(mContext, id, slot, val);
375 }
Stephen Hinesca54ec32010-09-20 17:20:30 -0700376 native void rsnScriptSetVarD(int con, int id, int slot, double val);
377 synchronized void nScriptSetVarD(int id, int slot, double val) {
378 rsnScriptSetVarD(mContext, id, slot, val);
379 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700380 native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
381 synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
382 rsnScriptSetVarV(mContext, id, slot, val);
383 }
Jason Sams6f4cf0b2010-11-16 17:37:02 -0800384 native void rsnScriptSetVarObj(int con, int id, int slot, int val);
385 synchronized void nScriptSetVarObj(int id, int slot, int val) {
386 rsnScriptSetVarObj(mContext, id, slot, val);
387 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700388
Jason Sams2e1872f2010-08-17 16:25:41 -0700389 native void rsnScriptCBegin(int con);
390 synchronized void nScriptCBegin() {
391 rsnScriptCBegin(mContext);
392 }
393 native void rsnScriptCSetScript(int con, byte[] script, int offset, int length);
394 synchronized void nScriptCSetScript(byte[] script, int offset, int length) {
395 rsnScriptCSetScript(mContext, script, offset, length);
396 }
Shih-wei Liaoeeca4352010-12-20 20:45:56 +0800397 native int rsnScriptCCreate(int con, String packageName, String resName, String cacheDir);
398 synchronized int nScriptCCreate(String packageName, String resName, String cacheDir) {
399 return rsnScriptCCreate(mContext, packageName, resName, cacheDir);
Jason Sams2e1872f2010-08-17 16:25:41 -0700400 }
Jason Samsebfb4362009-09-23 13:57:02 -0700401
Jason Sams2e1872f2010-08-17 16:25:41 -0700402 native void rsnSamplerBegin(int con);
403 synchronized void nSamplerBegin() {
404 rsnSamplerBegin(mContext);
405 }
406 native void rsnSamplerSet(int con, int param, int value);
407 synchronized void nSamplerSet(int param, int value) {
408 rsnSamplerSet(mContext, param, value);
409 }
Alex Sakhartchoukf5b35102010-09-30 11:36:37 -0700410 native void rsnSamplerSet2(int con, int param, float value);
411 synchronized void nSamplerSet2(int param, float value) {
412 rsnSamplerSet2(mContext, param, value);
413 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700414 native int rsnSamplerCreate(int con);
415 synchronized int nSamplerCreate() {
416 return rsnSamplerCreate(mContext);
417 }
Jason Sams0011bcf2009-12-15 12:58:36 -0800418
Jason Sams2e1872f2010-08-17 16:25:41 -0700419 native void rsnProgramStoreBegin(int con, int in, int out);
420 synchronized void nProgramStoreBegin(int in, int out) {
421 rsnProgramStoreBegin(mContext, in, out);
422 }
423 native void rsnProgramStoreDepthFunc(int con, int func);
424 synchronized void nProgramStoreDepthFunc(int func) {
425 rsnProgramStoreDepthFunc(mContext, func);
426 }
427 native void rsnProgramStoreDepthMask(int con, boolean enable);
428 synchronized void nProgramStoreDepthMask(boolean enable) {
429 rsnProgramStoreDepthMask(mContext, enable);
430 }
431 native void rsnProgramStoreColorMask(int con, boolean r, boolean g, boolean b, boolean a);
432 synchronized void nProgramStoreColorMask(boolean r, boolean g, boolean b, boolean a) {
433 rsnProgramStoreColorMask(mContext, r, g, b, a);
434 }
435 native void rsnProgramStoreBlendFunc(int con, int src, int dst);
436 synchronized void nProgramStoreBlendFunc(int src, int dst) {
437 rsnProgramStoreBlendFunc(mContext, src, dst);
438 }
439 native void rsnProgramStoreDither(int con, boolean enable);
440 synchronized void nProgramStoreDither(boolean enable) {
441 rsnProgramStoreDither(mContext, enable);
442 }
443 native int rsnProgramStoreCreate(int con);
444 synchronized int nProgramStoreCreate() {
445 return rsnProgramStoreCreate(mContext);
446 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700447
Jason Sams2e1872f2010-08-17 16:25:41 -0700448 native int rsnProgramRasterCreate(int con, boolean pointSmooth, boolean lineSmooth, boolean pointSprite);
449 synchronized int nProgramRasterCreate(boolean pointSmooth, boolean lineSmooth, boolean pointSprite) {
450 return rsnProgramRasterCreate(mContext, pointSmooth, lineSmooth, pointSprite);
451 }
452 native void rsnProgramRasterSetLineWidth(int con, int pr, float v);
453 synchronized void nProgramRasterSetLineWidth(int pr, float v) {
454 rsnProgramRasterSetLineWidth(mContext, pr, v);
455 }
456 native void rsnProgramRasterSetCullMode(int con, int pr, int mode);
457 synchronized void nProgramRasterSetCullMode(int pr, int mode) {
458 rsnProgramRasterSetCullMode(mContext, pr, mode);
459 }
Jason Sams1fe9b8c2009-06-11 14:46:10 -0700460
Jason Sams2e1872f2010-08-17 16:25:41 -0700461 native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
462 synchronized void nProgramBindConstants(int pv, int slot, int mID) {
463 rsnProgramBindConstants(mContext, pv, slot, mID);
464 }
465 native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
466 synchronized void nProgramBindTexture(int vpf, int slot, int a) {
467 rsnProgramBindTexture(mContext, vpf, slot, a);
468 }
469 native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
470 synchronized void nProgramBindSampler(int vpf, int slot, int s) {
471 rsnProgramBindSampler(mContext, vpf, slot, s);
472 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700473 native int rsnProgramFragmentCreate(int con, String shader, int[] params);
474 synchronized int nProgramFragmentCreate(String shader, int[] params) {
475 return rsnProgramFragmentCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700476 }
Alex Sakhartchoukb89aaac2010-09-23 16:16:33 -0700477 native int rsnProgramVertexCreate(int con, String shader, int[] params);
478 synchronized int nProgramVertexCreate(String shader, int[] params) {
479 return rsnProgramVertexCreate(mContext, shader, params);
Jason Sams2e1872f2010-08-17 16:25:41 -0700480 }
Alex Sakhartchouk164aaed2010-07-01 16:14:06 -0700481
Jason Sams2e1872f2010-08-17 16:25:41 -0700482 native int rsnMeshCreate(int con, int vtxCount, int indexCount);
483 synchronized int nMeshCreate(int vtxCount, int indexCount) {
484 return rsnMeshCreate(mContext, vtxCount, indexCount);
485 }
486 native void rsnMeshBindVertex(int con, int id, int alloc, int slot);
487 synchronized void nMeshBindVertex(int id, int alloc, int slot) {
488 rsnMeshBindVertex(mContext, id, alloc, slot);
489 }
490 native void rsnMeshBindIndex(int con, int id, int alloc, int prim, int slot);
491 synchronized void nMeshBindIndex(int id, int alloc, int prim, int slot) {
492 rsnMeshBindIndex(mContext, id, alloc, prim, slot);
493 }
Alex Sakhartchouk9d71e212010-11-08 15:10:52 -0800494 native void rsnMeshInitVertexAttribs(int con, int id);
495 synchronized void nMeshInitVertexAttribs(int id) {
496 rsnMeshInitVertexAttribs(mContext, id);
497 }
Jason Sams2e1872f2010-08-17 16:25:41 -0700498 native int rsnMeshGetVertexBufferCount(int con, int id);
499 synchronized int nMeshGetVertexBufferCount(int id) {
500 return rsnMeshGetVertexBufferCount(mContext, id);
501 }
502 native int rsnMeshGetIndexCount(int con, int id);
503 synchronized int nMeshGetIndexCount(int id) {
504 return rsnMeshGetIndexCount(mContext, id);
505 }
506 native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
507 synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
508 rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
509 }
510 native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
511 synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
512 rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
513 }
514
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700515
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800516 int mDev;
517 int mContext;
Romain Guy650a3eb2009-08-31 14:06:43 -0700518 @SuppressWarnings({"FieldCanBeLocal"})
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800519 MessageThread mMessageThread;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700520
Jason Sams8cb39de2010-06-01 15:47:01 -0700521 Element mElement_U8;
522 Element mElement_I8;
523 Element mElement_U16;
524 Element mElement_I16;
525 Element mElement_U32;
526 Element mElement_I32;
Stephen Hines52d83632010-10-11 16:10:42 -0700527 Element mElement_U64;
Stephen Hinesef1dac22010-10-01 15:39:33 -0700528 Element mElement_I64;
Jason Sams8cb39de2010-06-01 15:47:01 -0700529 Element mElement_F32;
Stephen Hines02f417052010-09-30 15:19:22 -0700530 Element mElement_F64;
Jason Samsf110d4b2010-06-21 17:42:41 -0700531 Element mElement_BOOLEAN;
Jason Sams3c0dfba2009-09-27 17:50:38 -0700532
Jason Sams8cb39de2010-06-01 15:47:01 -0700533 Element mElement_ELEMENT;
534 Element mElement_TYPE;
535 Element mElement_ALLOCATION;
536 Element mElement_SAMPLER;
537 Element mElement_SCRIPT;
538 Element mElement_MESH;
539 Element mElement_PROGRAM_FRAGMENT;
540 Element mElement_PROGRAM_VERTEX;
541 Element mElement_PROGRAM_RASTER;
542 Element mElement_PROGRAM_STORE;
Jason Samsa70f4162010-03-26 15:33:42 -0700543
Jason Sams3c0dfba2009-09-27 17:50:38 -0700544 Element mElement_A_8;
545 Element mElement_RGB_565;
546 Element mElement_RGB_888;
547 Element mElement_RGBA_5551;
548 Element mElement_RGBA_4444;
549 Element mElement_RGBA_8888;
550
Jason Sams8cb39de2010-06-01 15:47:01 -0700551 Element mElement_FLOAT_2;
552 Element mElement_FLOAT_3;
553 Element mElement_FLOAT_4;
554 Element mElement_UCHAR_4;
Jason Sams7d787b42009-11-15 12:14:26 -0800555
Jason Sams1d45c472010-08-25 14:31:48 -0700556 Element mElement_MATRIX_4X4;
557 Element mElement_MATRIX_3X3;
558 Element mElement_MATRIX_2X2;
559
Jason Sams4d339932010-05-11 14:03:58 -0700560 Sampler mSampler_CLAMP_NEAREST;
561 Sampler mSampler_CLAMP_LINEAR;
562 Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
563 Sampler mSampler_WRAP_NEAREST;
564 Sampler mSampler_WRAP_LINEAR;
565 Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
566
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700567 ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
568 ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700569 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
570 ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700571
Alex Sakhartchoukd36f2482010-08-24 11:37:33 -0700572 ProgramRaster mProgramRaster_CULL_BACK;
573 ProgramRaster mProgramRaster_CULL_FRONT;
574 ProgramRaster mProgramRaster_CULL_NONE;
Alex Sakhartchouk32e09b52010-08-23 10:24:10 -0700575
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700576 ///////////////////////////////////////////////////////////////////////////////////
Jack Palevich43702d82009-05-28 13:38:16 -0700577 //
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700578
Jason Sams27676fe2010-11-10 17:00:59 -0800579 /**
580 * Base class application should derive from for handling RS messages
581 * comming from their scripts. When a script calls sendToClient the data
582 * fields will be filled in and then the run method called by a message
583 * handling thread. This will occur some time after sendToClient completes
584 * in the script.
585 *
586 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800587 public static class RSMessageHandler implements Runnable {
Jason Sams516c3192009-10-06 13:58:47 -0700588 protected int[] mData;
589 protected int mID;
Jason Sams1c415172010-11-08 17:06:46 -0800590 protected int mLength;
Jason Sams516c3192009-10-06 13:58:47 -0700591 public void run() {
592 }
593 }
Jason Sams27676fe2010-11-10 17:00:59 -0800594 /**
595 * If an application is expecting messages it should set this field to an
596 * instance of RSMessage. This instance will receive all the user messages
597 * sent from sendToClient by scripts from this context.
598 *
599 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800600 RSMessageHandler mMessageCallback = null;
601
602 public void setMessageHandler(RSMessageHandler msg) {
603 mMessageCallback = msg;
604 }
605 public RSMessageHandler getMessageHandler() {
606 return mMessageCallback;
607 }
Jason Sams516c3192009-10-06 13:58:47 -0700608
Jason Sams27676fe2010-11-10 17:00:59 -0800609 /**
610 * Runtime error base class. An application should derive from this class
611 * if it wishes to install an error handler. When errors occur at runtime
612 * the fields in this class will be filled and the run method called.
613 *
614 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800615 public static class RSErrorHandler implements Runnable {
Jason Sams1c415172010-11-08 17:06:46 -0800616 protected String mErrorMessage;
617 protected int mErrorNum;
618 public void run() {
619 }
620 }
Jason Sams27676fe2010-11-10 17:00:59 -0800621
622 /**
623 * Application Error handler. All runtime errors will be dispatched to the
624 * instance of RSAsyncError set here. If this field is null a
625 * RSRuntimeException will instead be thrown with details about the error.
626 * This will cause program termaination.
627 *
628 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800629 RSErrorHandler mErrorCallback = null;
630
631 public void setErrorHandler(RSErrorHandler msg) {
632 mErrorCallback = msg;
633 }
634 public RSErrorHandler getErrorHandler() {
635 return mErrorCallback;
636 }
Jason Sams1c415172010-11-08 17:06:46 -0800637
Jason Sams27676fe2010-11-10 17:00:59 -0800638 /**
639 * RenderScript worker threads priority enumeration. The default value is
640 * NORMAL. Applications wishing to do background processing such as
641 * wallpapers should set their priority to LOW to avoid starving forground
642 * processes.
643 */
Jason Sams7d787b42009-11-15 12:14:26 -0800644 public enum Priority {
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800645 // Remap these numbers to opaque...
Jason Sams7d787b42009-11-15 12:14:26 -0800646 LOW (5), //ANDROID_PRIORITY_BACKGROUND + 5
647 NORMAL (-4); //ANDROID_PRIORITY_DISPLAY
648
649 int mID;
650 Priority(int id) {
651 mID = id;
652 }
653 }
654
Jason Sams771bebb2009-12-07 12:40:12 -0800655 void validate() {
656 if (mContext == 0) {
Jason Samsc1d62102010-11-04 14:32:19 -0700657 throw new RSInvalidStateException("Calling RS with no Context active.");
Jason Sams771bebb2009-12-07 12:40:12 -0800658 }
659 }
660
Jason Sams27676fe2010-11-10 17:00:59 -0800661
662 /**
663 * Change the priority of the worker threads for this context.
664 *
665 * @param p New priority to be set.
666 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800667 public void setPriority(Priority p) {
Jason Sams5dbfe932010-01-27 14:41:43 -0800668 validate();
Jason Sams7d787b42009-11-15 12:14:26 -0800669 nContextSetPriority(p.mID);
670 }
671
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800672 static class MessageThread extends Thread {
Jason Sams516c3192009-10-06 13:58:47 -0700673 RenderScript mRS;
674 boolean mRun = true;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800675 int[] mAuxData = new int[2];
Jason Sams1c415172010-11-08 17:06:46 -0800676
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800677 static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
678 static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
679 static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
680 static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
681 static final int RS_MESSAGE_TO_CLIENT_USER = 4;
Jason Sams516c3192009-10-06 13:58:47 -0700682
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800683 static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
Jason Samsadd9d962010-11-22 16:20:16 -0800684
Jason Sams516c3192009-10-06 13:58:47 -0700685 MessageThread(RenderScript rs) {
686 super("RSMessageThread");
687 mRS = rs;
688
689 }
690
691 public void run() {
692 // This function is a temporary solution. The final solution will
693 // used typed allocations where the message id is the type indicator.
694 int[] rbuf = new int[16];
Jason Sams2e1872f2010-08-17 16:25:41 -0700695 mRS.nContextInitToClient(mRS.mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700696 while(mRun) {
Jason Sams1d45c472010-08-25 14:31:48 -0700697 rbuf[0] = 0;
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800698 int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData, true);
699 int size = mAuxData[1];
700 int subID = mAuxData[0];
Jason Sams1c415172010-11-08 17:06:46 -0800701
702 if (msg == RS_MESSAGE_TO_CLIENT_USER) {
703 if ((size>>2) >= rbuf.length) {
704 rbuf = new int[(size + 3) >> 2];
705 }
706 mRS.nContextGetUserMessage(mRS.mContext, rbuf);
707
708 if(mRS.mMessageCallback != null) {
709 mRS.mMessageCallback.mData = rbuf;
710 mRS.mMessageCallback.mID = subID;
711 mRS.mMessageCallback.mLength = size;
712 mRS.mMessageCallback.run();
Jason Sams1d45c472010-08-25 14:31:48 -0700713 } else {
Jason Sams1c415172010-11-08 17:06:46 -0800714 throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
Jason Sams516c3192009-10-06 13:58:47 -0700715 }
Stephen Hinesab98bb62010-09-24 14:38:30 -0700716 continue;
Jason Sams516c3192009-10-06 13:58:47 -0700717 }
Jason Sams1c415172010-11-08 17:06:46 -0800718
719 if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
720 String e = mRS.nContextGetErrorMessage(mRS.mContext);
721
Jason Samsadd9d962010-11-22 16:20:16 -0800722 if (subID >= RS_ERROR_FATAL_UNKNOWN) {
723 throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
724 }
725
Jason Sams1c415172010-11-08 17:06:46 -0800726 if(mRS.mErrorCallback != null) {
727 mRS.mErrorCallback.mErrorMessage = e;
728 mRS.mErrorCallback.mErrorNum = subID;
729 mRS.mErrorCallback.run();
730 } else {
731 //throw new RSRuntimeException("Received error num " + subID + ", details: " + e);
732 }
733 continue;
734 }
735
736 // 2: teardown.
737 // But we want to avoid starving other threads during
738 // teardown by yielding until the next line in the destructor
739 // can execute to set mRun = false
740 try {
741 sleep(1, 0);
742 } catch(InterruptedException e) {
Jason Sams516c3192009-10-06 13:58:47 -0700743 }
Jason Sams516c3192009-10-06 13:58:47 -0700744 }
Jason Sams3bc47d42009-11-12 15:10:25 -0800745 Log.d(LOG_TAG, "MessageThread exiting.");
Jason Sams516c3192009-10-06 13:58:47 -0700746 }
747 }
748
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800749 RenderScript(Context ctx) {
750 mApplicationContext = ctx.getApplicationContext();
751 }
752
753 /**
754 * Gets the application context associated with the RenderScript context.
755 *
756 * @return The application context.
757 */
758 public final Context getApplicationContext() {
759 return mApplicationContext;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700760 }
761
Jason Sams27676fe2010-11-10 17:00:59 -0800762 /**
763 * Create a basic RenderScript context.
764 *
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800765 * @param ctx The context.
Jason Sams27676fe2010-11-10 17:00:59 -0800766 * @return RenderScript
767 */
Shih-wei Liao6b32fab2010-12-10 01:03:59 -0800768 public static RenderScript create(Context ctx) {
769 RenderScript rs = new RenderScript(ctx);
Jason Sams704ff642010-02-09 16:05:07 -0800770
771 rs.mDev = rs.nDeviceCreate();
772 rs.mContext = rs.nContextCreate(rs.mDev, 0);
773 rs.mMessageThread = new MessageThread(rs);
774 rs.mMessageThread.start();
Jason Sams704ff642010-02-09 16:05:07 -0800775 return rs;
Jason Samsefd9b6fb2009-11-03 13:58:36 -0800776 }
777
Jason Sams27676fe2010-11-10 17:00:59 -0800778 /**
779 * Print the currently available debugging information about the state of
780 * the RS context to the log.
781 *
Jason Sams27676fe2010-11-10 17:00:59 -0800782 */
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800783 public void contextDump() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800784 validate();
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800785 nContextDump(0);
Jason Sams715333b2009-11-17 17:26:46 -0800786 }
787
Jason Sams27676fe2010-11-10 17:00:59 -0800788 /**
789 * Wait for any commands in the fifo between the java bindings and native to
790 * be processed.
791 *
792 */
Jason Sams96ed4cf2010-06-15 12:15:57 -0700793 public void finish() {
794 nContextFinish();
795 }
796
Jason Sams27676fe2010-11-10 17:00:59 -0800797 /**
798 * Destroy this renderscript context. Once this function is called its no
799 * longer legal to use this or any objects created by this context.
800 *
801 */
Jason Samsf5b45962009-08-25 14:49:07 -0700802 public void destroy() {
Jason Sams5dbfe932010-01-27 14:41:43 -0800803 validate();
Jason Sams2e1872f2010-08-17 16:25:41 -0700804 nContextDeinitToClient(mContext);
Jason Sams516c3192009-10-06 13:58:47 -0700805 mMessageThread.mRun = false;
Jason Samsa8bf9422010-09-16 13:43:19 -0700806 try {
807 mMessageThread.join();
808 } catch(InterruptedException e) {
809 }
Jason Sams516c3192009-10-06 13:58:47 -0700810
Jason Sams2e1872f2010-08-17 16:25:41 -0700811 nContextDestroy();
Jason Samsf5b45962009-08-25 14:49:07 -0700812 mContext = 0;
813
814 nDeviceDestroy(mDev);
815 mDev = 0;
816 }
Jason Sams02fb2cb2009-05-28 15:37:57 -0700817
Jason Samsa9e7a052009-09-25 14:51:22 -0700818 boolean isAlive() {
819 return mContext != 0;
820 }
821
Jason Samsbf6ef8d2010-12-06 15:59:59 -0800822 int safeID(BaseObj o) {
Jason Sams6b9dec02009-09-23 16:38:37 -0700823 if(o != null) {
Jason Sams06d69de2010-11-09 17:11:40 -0800824 return o.getID();
Jason Samsd8e41612009-08-20 17:22:40 -0700825 }
Jason Sams6b9dec02009-09-23 16:38:37 -0700826 return 0;
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700827 }
Jack Palevich60aa3ea2009-05-26 13:45:08 -0700828}