160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich/*
2be74bdd2349095f203ae0fddcc4816bfbd56bc5dStephen Hines * Copyright (C) 2008-2012 The Android Open Source Project
360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich *
460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Licensed under the Apache License, Version 2.0 (the "License");
560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * you may not use this file except in compliance with the License.
660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * You may obtain a copy of the License at
760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich *
860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich *      http://www.apache.org/licenses/LICENSE-2.0
960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich *
1060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Unless required by applicable law or agreed to in writing, software
1160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * distributed under the License is distributed on an "AS IS" BASIS,
1260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * See the License for the specific language governing permissions and
1460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * limitations under the License.
1560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich */
1660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
1794d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samspackage android.renderscript;
1860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
19a6f338ca5f0c8359d1952167858851dd025e47e2Jason Samsimport java.io.File;
20fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Samsimport java.lang.reflect.Field;
2136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
226b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liaoimport android.content.Context;
234382467a80dd12c6362d57edca7f2367f7ae877cStephen Hinesimport android.content.pm.ApplicationInfo;
244382467a80dd12c6362d57edca7f2367f7ae877cStephen Hinesimport android.content.pm.PackageManager;
25b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukimport android.content.res.AssetManager;
26b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.Bitmap;
27650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guyimport android.graphics.BitmapFactory;
28faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Samsimport android.graphics.SurfaceTexture;
29260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kastenimport android.os.Process;
3036e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Log;
3136e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.view.Surface;
3243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
3360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
344382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines
359c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
363aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * Renderscript base master class.  An instance of this class creates native
3727676fe24be7444a174c15df476e49adc5335d03Jason Sams * worker threads for processing commands from this object.  This base class
3827676fe24be7444a174c15df476e49adc5335d03Jason Sams * does not provide any extended capabilities beyond simple data processing.
3927676fe24be7444a174c15df476e49adc5335d03Jason Sams * For extended capabilities use derived classes such as RenderScriptGL.
4027676fe24be7444a174c15df476e49adc5335d03Jason Sams *
413aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference">
423aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3>
433aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <p>For more information about creating an application that uses Renderscript, read the
44b47fa1699a02a96d5da8e175966e9584c6bd5565Scott Main * <a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p>
453aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div>
46e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams **/
4760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichpublic class RenderScript {
483bc47d438171dce294e816366d53bc9eca772c5bJason Sams    static final String LOG_TAG = "RenderScript_jni";
49bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static final boolean DEBUG  = false;
50650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"UnusedDeclaration", "deprecation"})
5143a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato    static final boolean LOG_ENABLED = false;
5260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
536b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    private Context mApplicationContext;
5460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
556b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    /*
5660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * We use a class initializer to allow the native code to cache some
5760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * field offsets.
5860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
59650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
60bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static boolean sInitialized;
61bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    native static void _nInit();
6260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
63dba3ba5b5bf6026abceced921b1b0d231b0faefdJason Sams
6460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    static {
6560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        sInitialized = false;
6660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        try {
67e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams            System.loadLibrary("rs_jni");
6860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            _nInit();
6960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            sInitialized = true;
7060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        } catch (UnsatisfiedLinkError e) {
71fa445b9353972735d8d65e8a936786b1afe9886dJason Sams            Log.e(LOG_TAG, "Error loading RS jni library: " + e);
72fa445b9353972735d8d65e8a936786b1afe9886dJason Sams            throw new RSRuntimeException("Error loading RS jni library: " + e);
7360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
7460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
7560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Non-threadsafe functions.
7736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nDeviceCreate();
7836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nDeviceDestroy(int dev);
79ebfb436a49673693b98469683451bd9ede797557Jason Sams    native void nDeviceSetConfig(int dev, int param, int value);
80edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    native int nContextGetUserMessage(int con, int[] data);
811c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    native String nContextGetErrorMessage(int con);
82edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams    native int  nContextPeekMessage(int con, int[] subID);
832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void nContextInitToClient(int con);
842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void nContextDeinitToClient(int con);
852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
86a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams    /**
87a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * Name of the file that holds the object cache.
88a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     */
89a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams    private static final String CACHE_PATH = "com.android.renderscript.cache";
901a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams    static String mCachePath;
91a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams
92a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     /**
93a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * Sets the directory to use as a persistent storage for the
94a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * renderscript object file cache.
95a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     *
96a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * @hide
97a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     * @param cacheDir A directory the current process can write to
98a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams     */
99a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams    public static void setupDiskCache(File cacheDir) {
100a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams        File f = new File(cacheDir, CACHE_PATH);
101a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams        mCachePath = f.getAbsolutePath();
102a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams        f.mkdirs();
103a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams    }
104a6f338ca5f0c8359d1952167858851dd025e47e2Jason Sams
1052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Methods below are wrapped to protect the non-threadsafe
1072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // lockless fifo.
1084382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    native int  rsnContextCreateGL(int dev, int ver, int sdkVer,
10911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
11011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
11111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
11211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1132c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ, int dpi);
1144382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    synchronized int nContextCreateGL(int dev, int ver, int sdkVer,
11511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
11611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
11711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
11811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
1192c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ, int dpi) {
1204382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        return rsnContextCreateGL(dev, ver, sdkVer, colorMin, colorPref,
12111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  alphaMin, alphaPref, depthMin, depthPref,
12211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  stencilMin, stencilPref,
1232c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                                  samplesMin, samplesPref, samplesQ, dpi);
1242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1254382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    native int  rsnContextCreate(int dev, int ver, int sdkVer);
1264382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines    synchronized int nContextCreate(int dev, int ver, int sdkVer) {
1274382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        return rsnContextCreate(dev, ver, sdkVer);
1282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDestroy(int con);
1302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDestroy() {
131d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDestroy(mContext);
1332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetSurface(int con, int w, int h, Surface sur);
1352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetSurface(int w, int h, Surface sur) {
136d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetSurface(mContext, w, h, sur);
1382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
139faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    native void rsnContextSetSurfaceTexture(int con, int w, int h, SurfaceTexture sur);
140faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    synchronized void nContextSetSurfaceTexture(int w, int h, SurfaceTexture sur) {
141faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        validate();
142faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams        rsnContextSetSurfaceTexture(mContext, w, h, sur);
143faa32b33b50ad941f631716dd0915e936bdc3ac5Jason Sams    }
1442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetPriority(int con, int p);
1452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetPriority(int p) {
146d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetPriority(mContext, p);
1482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDump(int con, int bits);
1502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDump(int bits) {
151d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDump(mContext, bits);
1532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextFinish(int con);
1552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextFinish() {
156d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextFinish(mContext);
1582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindRootScript(int con, int script);
1612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindRootScript(int script) {
162d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindRootScript(mContext, script);
1642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindSampler(int con, int sampler, int slot);
1662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindSampler(int sampler, int slot) {
167d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindSampler(mContext, sampler, slot);
1692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramStore(int con, int pfs);
1712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramStore(int pfs) {
172d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramStore(mContext, pfs);
1742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramFragment(int con, int pf);
1762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramFragment(int pf) {
177d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramFragment(mContext, pf);
1792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramVertex(int con, int pv);
1812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramVertex(int pv) {
182d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramVertex(mContext, pv);
1842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramRaster(int con, int pr);
1862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramRaster(int pr) {
187d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramRaster(mContext, pr);
1892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextPause(int con);
1912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextPause() {
192d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextPause(mContext);
1942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextResume(int con);
1962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextResume() {
197d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextResume(mContext);
1992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAssignName(int con, int obj, byte[] name);
2022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAssignName(int obj, byte[] name) {
203d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAssignName(mContext, obj, name);
2052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native String rsnGetName(int con, int obj);
2072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized String nGetName(int obj) {
208d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnGetName(mContext, obj);
2102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnObjDestroy(int con, int id);
2122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nObjDestroy(int id) {
213d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // There is a race condition here.  The calling code may be run
214d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // by the gc while teardown is occuring.  This protects againts
215d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // deleting dead objects.
216d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        if (mContext != 0) {
217d1ac98149737299513da1357e36f68cbb6d74425Jason Sams            rsnObjDestroy(mContext, id);
218d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        }
2192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
2222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
223d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnElementCreate(mContext, type, kind, norm, vecSize);
2252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
22670d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    native int  rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
22770d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
228d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
22970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams        return rsnElementCreate2(mContext, elements, names, arraySizes);
2302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnElementGetNativeData(int con, int id, int[] elementData);
2322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nElementGetNativeData(int id, int[] elementData) {
233d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnElementGetNativeData(mContext, id, elementData);
2352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2367d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    native void rsnElementGetSubElements(int con, int id,
2377d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                                         int[] IDs, String[] names, int[] arraySizes);
2387d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    synchronized void nElementGetSubElements(int id, int[] IDs, String[] names, int[] arraySizes) {
239d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2407d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        rsnElementGetSubElements(mContext, id, IDs, names, arraySizes);
2412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
243bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
244bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
245d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
246bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
2472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnTypeGetNativeData(int con, int id, int[] typeData);
2492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nTypeGetNativeData(int id, int[] typeData) {
250d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnTypeGetNativeData(mContext, id, typeData);
2522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
254857d0c7017da763a420e825fffa2f260eb982c97Jason Sams    native int  rsnAllocationCreateTyped(int con, int type, int mip, int usage, int pointer);
255857d0c7017da763a420e825fffa2f260eb982c97Jason Sams    synchronized int nAllocationCreateTyped(int type, int mip, int usage, int pointer) {
256d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
257857d0c7017da763a420e825fffa2f260eb982c97Jason Sams        return rsnAllocationCreateTyped(mContext, type, mip, usage, pointer);
2582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2595476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
2605476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
261d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2625476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
26326ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    }
2645476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
2655476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
266d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2675476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
26867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    }
2692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
2702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
271d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationCreateBitmapRef(mContext, type, bmp);
2732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2745476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
2755476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
276d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2775476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
2785476b450e50939940dcf3f15c92335cee2fc572dJason Sams    }
2795476b450e50939940dcf3f15c92335cee2fc572dJason Sams
2804ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    native void  rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
2814ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
282d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2834ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams        rsnAllocationCopyToBitmap(mContext, alloc, bmp);
2844ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    }
2854ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
2864ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
2875476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native void rsnAllocationSyncAll(int con, int alloc, int src);
2885476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized void nAllocationSyncAll(int alloc, int src) {
289d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2905476b450e50939940dcf3f15c92335cee2fc572dJason Sams        rsnAllocationSyncAll(mContext, alloc, src);
2915476b450e50939940dcf3f15c92335cee2fc572dJason Sams    }
292615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams    native int rsnAllocationGetSurfaceTextureID(int con, int alloc);
293615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams    synchronized int nAllocationGetSurfaceTextureID(int alloc) {
294615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams        validate();
295615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams        return rsnAllocationGetSurfaceTextureID(mContext, alloc);
296615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams    }
297fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams    native void rsnAllocationGetSurfaceTextureID2(int con, int alloc, SurfaceTexture st);
298fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams    synchronized void nAllocationGetSurfaceTextureID2(int alloc, SurfaceTexture st) {
299fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams        validate();
300fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams        rsnAllocationGetSurfaceTextureID2(mContext, alloc, st);
301fe1d5ffd1b6c4977a9f301997d2ad90e5b049a3bJason Sams    }
302fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    native void rsnAllocationSetSurface(int con, int alloc, Surface sur);
303fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams    synchronized void nAllocationSetSurface(int alloc, Surface sur) {
304163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        validate();
305fb9aa9f3ef11878caaf6fcfb5ea49ffb9f7abf33Jason Sams        rsnAllocationSetSurface(mContext, alloc, sur);
306163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
307163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    native void rsnAllocationIoSend(int con, int alloc);
308163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    synchronized void nAllocationIoSend(int alloc) {
309163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        validate();
310163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        rsnAllocationIoSend(mContext, alloc);
311163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
312163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    native void rsnAllocationIoReceive(int con, int alloc);
313163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    synchronized void nAllocationIoReceive(int alloc) {
314163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        validate();
315163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams        rsnAllocationIoReceive(mContext, alloc);
316163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams    }
317163766cbe798baf8e86eb8201bc6c3def931d59aJason Sams
318615e7cee03d1a53072b0369fa9f247811ac56845Jason Sams
319f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    native void rsnAllocationGenerateMipmaps(int con, int alloc);
320f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    synchronized void nAllocationGenerateMipmaps(int alloc) {
321d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
322f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams        rsnAllocationGenerateMipmaps(mContext, alloc);
323f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    }
3244ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    native void  rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
3254ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
326d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3274ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams        rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
3282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
3302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
33149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
33249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
333d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
33449a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
3352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
33649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
33749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
338d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
33949a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
3402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
34149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
34249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
343d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
34449a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
3452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
34649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
34749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
348d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
34949a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
35049bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    }
35149a05d7b82956009f03acbb92a064eed054eb031Jason Sams
35249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
35349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
354d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
35549a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
3562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
358304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    native void rsnAllocationData2D(int con,
359304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int dstAlloc, int dstXoff, int dstYoff,
360304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int dstMip, int dstFace,
361304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int width, int height,
362304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int srcAlloc, int srcXoff, int srcYoff,
363304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                    int srcMip, int srcFace);
364304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    synchronized void nAllocationData2D(int dstAlloc, int dstXoff, int dstYoff,
365304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int dstMip, int dstFace,
366304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int width, int height,
367304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int srcAlloc, int srcXoff, int srcYoff,
368304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                                        int srcMip, int srcFace) {
369304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk        validate();
370304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk        rsnAllocationData2D(mContext,
371304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstAlloc, dstXoff, dstYoff,
372304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            dstMip, dstFace,
373304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            width, height,
374304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcAlloc, srcXoff, srcYoff,
375304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk                            srcMip, srcFace);
376304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk    }
377304b1f5497155bcf91e7b855cfab7a675e80bf26Alex Sakhartchouk
378fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
379fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) {
380d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
381fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
382fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
383fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
384fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) {
385d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
386fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
387fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
38849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
38949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) {
390d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
39149a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
3922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
39349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
39449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) {
395d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
39649a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
3972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
398fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
399fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
400d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
401fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
402fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
40349a05d7b82956009f03acbb92a064eed054eb031Jason Sams
404fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationRead(int con, int id, byte[] d);
405fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationRead(int id, byte[] d) {
406d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
407fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationRead(mContext, id, d);
408fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
409fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationRead(int con, int id, short[] d);
410fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationRead(int id, short[] d) {
411d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
412fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationRead(mContext, id, d);
413fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
4142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, int[] d);
4152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, int[] d) {
416d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
4182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, float[] d);
4202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, float[] d) {
421d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
4232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationGetType(int con, int id);
4252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationGetType(int id) {
426d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationGetType(mContext, id);
4282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4305edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    native void rsnAllocationResize1D(int con, int id, int dimX);
4315edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    synchronized void nAllocationResize1D(int id, int dimX) {
432d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4335edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams        rsnAllocationResize1D(mContext, id, dimX);
4345edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    }
4355edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
4365edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
437d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4385edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams        rsnAllocationResize2D(mContext, id, dimX, dimY);
4395edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    }
4405edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
4412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DCreateFromAssetStream(int con, int assetStream);
4422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
443d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
4452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
446b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFileA3DCreateFromFile(int con, String path);
447b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFileA3DCreateFromFile(String path) {
448d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
449b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFileA3DCreateFromFile(mContext, path);
450b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
451b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
452b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
453d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
454b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFileA3DCreateFromAsset(mContext, mgr, path);
455b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
4562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
4572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
458d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
4602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
4622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
463d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
4652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
4672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
468d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
4702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
472e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk    native int  rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
473e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk    synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
474d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFontCreateFromFile(mContext, fileName, size, dpi);
4762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
477b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
478b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
479d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
480b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
481b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
482b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
483b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
484d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
485b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
486b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
4872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
4902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
491d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptBindAllocation(mContext, script, alloc, slot);
4932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
4952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
496d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetTimeZone(mContext, script, timeZone);
4982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvoke(int con, int id, int slot);
5002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvoke(int id, int slot) {
501d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvoke(mContext, id, slot);
5032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5046e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params);
5056e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    native void rsnScriptForEach(int con, int id, int slot, int ain, int aout);
5066e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) {
5076e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        validate();
5086e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        if (params == null) {
5096e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams            rsnScriptForEach(mContext, id, slot, ain, aout);
5106e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        } else {
5116e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams            rsnScriptForEach(mContext, id, slot, ain, aout, params);
5126e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams        }
5136e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams    }
5142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
5152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
516d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvokeV(mContext, id, slot, params);
5182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarI(int con, int id, int slot, int val);
5202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarI(int id, int slot, int val) {
521d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarI(mContext, id, slot, val);
5232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
524031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    native void rsnScriptSetVarJ(int con, int id, int slot, long val);
525031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    synchronized void nScriptSetVarJ(int id, int slot, long val) {
526d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
527031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines        rsnScriptSetVarJ(mContext, id, slot, val);
528031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    }
5292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarF(int con, int id, int slot, float val);
5302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarF(int id, int slot, float val) {
531d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarF(mContext, id, slot, val);
5332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
534ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    native void rsnScriptSetVarD(int con, int id, int slot, double val);
535ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    synchronized void nScriptSetVarD(int id, int slot, double val) {
536d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
537ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines        rsnScriptSetVarD(mContext, id, slot, val);
538ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    }
5392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
5402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
541d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarV(mContext, id, slot, val);
5432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
544adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    native void rsnScriptSetVarVE(int con, int id, int slot, byte[] val,
545adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines                                  int e, int[] dims);
546adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    synchronized void nScriptSetVarVE(int id, int slot, byte[] val,
547adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines                                      int e, int[] dims) {
548adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines        validate();
549adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines        rsnScriptSetVarVE(mContext, id, slot, val, e, dims);
550adeb809201fcb77ba2b76a814ae4cdc9dacb326bStephen Hines    }
5516f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    native void rsnScriptSetVarObj(int con, int id, int slot, int val);
5526f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    synchronized void nScriptSetVarObj(int id, int slot, int val) {
553d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5546f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams        rsnScriptSetVarObj(mContext, id, slot, val);
5556f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    }
5562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
557e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    native int  rsnScriptCCreate(int con, String resName, String cacheDir,
558e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams                                 byte[] script, int length);
559e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams    synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) {
560d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
561e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams        return rsnScriptCCreate(mContext, resName, cacheDir, script, length);
5622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
5646ab97682fd444586ee135912a4210417a1c8781bJason Sams    native int  rsnScriptIntrinsicCreate(int con, int id, int eid);
5656ab97682fd444586ee135912a4210417a1c8781bJason Sams    synchronized int nScriptIntrinsicCreate(int id, int eid) {
5666ab97682fd444586ee135912a4210417a1c8781bJason Sams        validate();
5676ab97682fd444586ee135912a4210417a1c8781bJason Sams        return rsnScriptIntrinsicCreate(mContext, id, eid);
5686ab97682fd444586ee135912a4210417a1c8781bJason Sams    }
5696ab97682fd444586ee135912a4210417a1c8781bJason Sams
57008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native int  rsnScriptKernelIDCreate(int con, int sid, int slot, int sig);
57108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized int nScriptKernelIDCreate(int sid, int slot, int sig) {
57208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
57308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return rsnScriptKernelIDCreate(mContext, sid, slot, sig);
57408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
57508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
57608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native int  rsnScriptFieldIDCreate(int con, int sid, int slot);
57708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized int nScriptFieldIDCreate(int sid, int slot) {
57808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
57908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return rsnScriptFieldIDCreate(mContext, sid, slot);
58008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
58108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
58208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native int  rsnScriptGroupCreate(int con, int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types);
58308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized int nScriptGroupCreate(int[] kernels, int[] src, int[] dstk, int[] dstf, int[] types) {
58408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
58508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        return rsnScriptGroupCreate(mContext, kernels, src, dstk, dstf, types);
58608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
58708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
58808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native void rsnScriptGroupSetInput(int con, int group, int kernel, int alloc);
58908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized void nScriptGroupSetInput(int group, int kernel, int alloc) {
59008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
59108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        rsnScriptGroupSetInput(mContext, group, kernel, alloc);
59208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
59308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
59408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native void rsnScriptGroupSetOutput(int con, int group, int kernel, int alloc);
59508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized void nScriptGroupSetOutput(int group, int kernel, int alloc) {
59608a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
59708a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        rsnScriptGroupSetOutput(mContext, group, kernel, alloc);
59808a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
59908a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
60008a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    native void rsnScriptGroupExecute(int con, int group);
60108a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    synchronized void nScriptGroupExecute(int group) {
60208a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        validate();
60308a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams        rsnScriptGroupExecute(mContext, group);
60408a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams    }
60508a81583c18a849e442ceeb8d7baeca743fb3be8Jason Sams
606a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk    native int  rsnSamplerCreate(int con, int magFilter, int minFilter,
607a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 int wrapS, int wrapT, int wrapR, float aniso);
608a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk    synchronized int nSamplerCreate(int magFilter, int minFilter,
609a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk                                 int wrapS, int wrapT, int wrapR, float aniso) {
610d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
611a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk        return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso);
6122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
614331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    native int  rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a,
615331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      boolean depthMask, boolean dither,
616331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                      int srcMode, int dstMode, int depthFunc);
617331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams    synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a,
618331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                         boolean depthMask, boolean dither,
619331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                         int srcMode, int dstMode, int depthFunc) {
620d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
621bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams        return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode,
622bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams                                     dstMode, depthFunc);
6232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
62594aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    native int  rsnProgramRasterCreate(int con, boolean pointSprite, int cullMode);
62694aaed38467c71a6c804f0e18b41346a4013c25bJason Sams    synchronized int nProgramRasterCreate(boolean pointSprite, int cullMode) {
627d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
62894aaed38467c71a6c804f0e18b41346a4013c25bJason Sams        return rsnProgramRasterCreate(mContext, pointSprite, cullMode);
6292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
6312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
6322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindConstants(int pv, int slot, int mID) {
633d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindConstants(mContext, pv, slot, mID);
6352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
6372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindTexture(int vpf, int slot, int a) {
638d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindTexture(mContext, vpf, slot, a);
6402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
6422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindSampler(int vpf, int slot, int s) {
643d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindSampler(mContext, vpf, slot, s);
6452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6462123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    native int  rsnProgramFragmentCreate(int con, String shader, String[] texNames, int[] params);
6472123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    synchronized int nProgramFragmentCreate(String shader, String[] texNames, int[] params) {
648d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6492123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        return rsnProgramFragmentCreate(mContext, shader, texNames, params);
6502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6512123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    native int  rsnProgramVertexCreate(int con, String shader, String[] texNames, int[] params);
6522123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk    synchronized int nProgramVertexCreate(String shader, String[] texNames, int[] params) {
653d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6542123b46ba85adb2cfb78068f8368e830640118d3Alex Sakhartchouk        return rsnProgramVertexCreate(mContext, shader, texNames, params);
6552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
65725999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    native int  rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim);
65825999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk    synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) {
659d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
66025999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk        return rsnMeshCreate(mContext, vtx, idx, prim);
6619d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    }
6622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetVertexBufferCount(int con, int id);
6632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetVertexBufferCount(int id) {
664d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetVertexBufferCount(mContext, id);
6662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetIndexCount(int con, int id);
6682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetIndexCount(int id) {
669d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetIndexCount(mContext, id);
6712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
6732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
674d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
6762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
6782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
679d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
6812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
683f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    native int  rsnPathCreate(int con, int prim, boolean isStatic, int vtx, int loop, float q);
684f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    synchronized int nPathCreate(int prim, boolean isStatic, int vtx, int loop, float q) {
685f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams        validate();
686f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams        return rsnPathCreate(mContext, prim, isStatic, vtx, loop, q);
687f15ed0124ea7f7f87e4188a1dd15cc4917a62ee9Jason Sams    }
68860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
689bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mDev;
690bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mContext;
691650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal"})
692bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    MessageThread mMessageThread;
69360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
6948cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U8;
6958cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I8;
6968cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U16;
6978cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I16;
6988cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U32;
6998cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I32;
70052d836332f6aae74ed97fda1b53681f36710af64Stephen Hines    Element mElement_U64;
701ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines    Element mElement_I64;
7028cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_F32;
70302f41705199336f808ece50d81585450e7f8f61fStephen Hines    Element mElement_F64;
704f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams    Element mElement_BOOLEAN;
7058cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams
7068cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ELEMENT;
7078cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_TYPE;
7088cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ALLOCATION;
7098cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SAMPLER;
7108cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SCRIPT;
7118cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_MESH;
7128cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_FRAGMENT;
7138cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_VERTEX;
7148cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_RASTER;
7158cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_STORE;
7163a2914132146f340511425d7f78540098606b512Stephen Hines    Element mElement_FONT;
717a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
7183c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_A_8;
7193c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_565;
7203c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_888;
7213c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_5551;
7223c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_4444;
7233c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_8888;
7243c0dfbab807a459622aeade4940daddf482dec66Jason Sams
7258cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_2;
7268cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_3;
7278cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_4;
728836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
729836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_2;
730836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_3;
731836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_DOUBLE_4;
732836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
733836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UCHAR_2;
734836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UCHAR_3;
7358cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_UCHAR_4;
7367d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
737836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_2;
738836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_3;
739836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_CHAR_4;
740836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
741836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_2;
742836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_3;
743836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_USHORT_4;
744836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
745836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_2;
746836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_3;
747836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_SHORT_4;
748836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
749836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_2;
750836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_3;
751836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_UINT_4;
752836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
753836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_2;
754836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_3;
755836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_INT_4;
756836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
757836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_2;
758836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_3;
759836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_ULONG_4;
760836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
761836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_2;
762836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_3;
763836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines    Element mElement_LONG_4;
764836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines
7651d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_4X4;
7661d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_3X3;
7671d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_2X2;
7681d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams
7694d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_NEAREST;
7704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR;
7714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
7724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_NEAREST;
7734d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR;
7744d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
7754d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
776d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
777d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
778d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
779d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
780d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
781d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_BACK;
782d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_FRONT;
783d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_NONE;
78432e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk
78560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
78643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    //
78760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
7889c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
78927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Base class application should derive from for handling RS messages
7908cecbb5293f73e3f63f2601dda68016762c58a0cStephen Hines     * coming from their scripts.  When a script calls sendToClient the data
79127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * fields will be filled in and then the run method called by a message
79227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * handling thread.  This will occur some time after sendToClient completes
79327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * in the script.
79427676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
79527676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
796bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSMessageHandler implements Runnable {
797516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int[] mData;
798516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int mID;
7991c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mLength;
800516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
801516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
802516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
8039c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
80427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * If an application is expecting messages it should set this field to an
80527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSMessage.  This instance will receive all the user messages
80627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * sent from sendToClient by scripts from this context.
80727676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
80827676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
809bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSMessageHandler mMessageCallback = null;
810bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
811bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setMessageHandler(RSMessageHandler msg) {
812bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mMessageCallback = msg;
813bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
814bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSMessageHandler getMessageHandler() {
815bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mMessageCallback;
816bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
817516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
8189c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
81927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Runtime error base class.  An application should derive from this class
82027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * if it wishes to install an error handler.  When errors occur at runtime
82127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the fields in this class will be filled and the run method called.
82227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
82327676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
824bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSErrorHandler implements Runnable {
8251c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected String mErrorMessage;
8261c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mErrorNum;
8271c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        public void run() {
8281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        }
8291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
83027676fe24be7444a174c15df476e49adc5335d03Jason Sams
8319c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
83227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Application Error handler.  All runtime errors will be dispatched to the
83327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSAsyncError set here.  If this field is null a
83427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * RSRuntimeException will instead be thrown with details about the error.
83527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * This will cause program termaination.
83627676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
83727676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
838bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSErrorHandler mErrorCallback = null;
839bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
840bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setErrorHandler(RSErrorHandler msg) {
841bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mErrorCallback = msg;
842bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
843bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSErrorHandler getErrorHandler() {
844bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mErrorCallback;
845bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
8461c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
8479c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
84827676fe24be7444a174c15df476e49adc5335d03Jason Sams     * RenderScript worker threads priority enumeration.  The default value is
84927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * NORMAL.  Applications wishing to do background processing such as
85027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * wallpapers should set their priority to LOW to avoid starving forground
85127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * processes.
85227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
8537d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    public enum Priority {
854260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kasten        LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)),
855260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kasten        NORMAL (Process.THREAD_PRIORITY_DISPLAY);
8567d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
8577d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        int mID;
8587d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        Priority(int id) {
8597d787b4722eaeb79cab42c36060336e092b77b5fJason Sams            mID = id;
8607d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        }
8617d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
8627d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
863771bebb94054d06f97284379c93a2620613513c3Jason Sams    void validate() {
864771bebb94054d06f97284379c93a2620613513c3Jason Sams        if (mContext == 0) {
865c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams            throw new RSInvalidStateException("Calling RS with no Context active.");
866771bebb94054d06f97284379c93a2620613513c3Jason Sams        }
867771bebb94054d06f97284379c93a2620613513c3Jason Sams    }
868771bebb94054d06f97284379c93a2620613513c3Jason Sams
86927676fe24be7444a174c15df476e49adc5335d03Jason Sams
8709c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
87127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Change the priority of the worker threads for this context.
87227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
87327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @param p New priority to be set.
87427676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
875bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setPriority(Priority p) {
8765dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
8777d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        nContextSetPriority(p.mID);
8787d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
8797d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
880bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static class MessageThread extends Thread {
881516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        RenderScript mRS;
882516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        boolean mRun = true;
883bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        int[] mAuxData = new int[2];
8841c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
885bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
886bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
887bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
888bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
889bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_USER = 4;
890516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
891bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
892add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
893516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        MessageThread(RenderScript rs) {
894516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            super("RSMessageThread");
895516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            mRS = rs;
896516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
897516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
898516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
899516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
900516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // This function is a temporary solution.  The final solution will
901516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // used typed allocations where the message id is the type indicator.
902516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            int[] rbuf = new int[16];
9032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams            mRS.nContextInitToClient(mRS.mContext);
904516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            while(mRun) {
9051d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                rbuf[0] = 0;
906edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData);
907bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int size = mAuxData[1];
908bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int subID = mAuxData[0];
9091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
9101c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_USER) {
9111c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if ((size>>2) >= rbuf.length) {
9121c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        rbuf = new int[(size + 3) >> 2];
9131c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
914edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                    if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) !=
915edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                        RS_MESSAGE_TO_CLIENT_USER) {
916edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                        throw new RSDriverException("Error processing message from Renderscript.");
917edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams                    }
9181c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
9191c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mMessageCallback != null) {
9201c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mData = rbuf;
9211c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mID = subID;
9221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mLength = size;
9231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.run();
9241d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                    } else {
9251c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
926516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                    }
927ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                    continue;
928516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
9291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
9301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
9311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    String e = mRS.nContextGetErrorMessage(mRS.mContext);
9321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
933add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    if (subID >= RS_ERROR_FATAL_UNKNOWN) {
934add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                        throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
935add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    }
936add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
9371c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mErrorCallback != null) {
9381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorMessage = e;
9391c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorNum = subID;
9401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.run();
9411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    } else {
942be74bdd2349095f203ae0fddcc4816bfbd56bc5dStephen Hines                        // Do not throw here. In these cases, we do not have
943be74bdd2349095f203ae0fddcc4816bfbd56bc5dStephen Hines                        // a fatal error.
9441c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
9451c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    continue;
9461c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                }
9471c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
9481c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // 2: teardown.
9491c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // But we want to avoid starving other threads during
9501c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // teardown by yielding until the next line in the destructor
9511c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // can execute to set mRun = false
9521c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                try {
9531c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    sleep(1, 0);
9541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                } catch(InterruptedException e) {
955516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
956516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            }
9573bc47d438171dce294e816366d53bc9eca772c5bJason Sams            Log.d(LOG_TAG, "MessageThread exiting.");
958516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
959516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
960516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
9616b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    RenderScript(Context ctx) {
9621a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        if (ctx != null) {
9631a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams            mApplicationContext = ctx.getApplicationContext();
9641a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        }
96560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
96660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
9679c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
9686b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * Gets the application context associated with the RenderScript context.
96927676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
9706b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @return The application context.
9716b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     */
9726b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public final Context getApplicationContext() {
9736b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        return mApplicationContext;
9746b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    }
9756b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao
9769c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
9776b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * Create a basic RenderScript context.
97827676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
9791a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * @hide
9806b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @param ctx The context.
98127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @return RenderScript
98227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
9831a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams    public static RenderScript create(Context ctx, int sdkVersion) {
9846b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        RenderScript rs = new RenderScript(ctx);
985704ff64b099406bb328898a7443921f22dbffd6dJason Sams
986704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mDev = rs.nDeviceCreate();
9874382467a80dd12c6362d57edca7f2367f7ae877cStephen Hines        rs.mContext = rs.nContextCreate(rs.mDev, 0, sdkVersion);
9882698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams        if (rs.mContext == 0) {
9892698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams            throw new RSDriverException("Failed to create RS context.");
9902698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams        }
991704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread = new MessageThread(rs);
992704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread.start();
993704ff64b099406bb328898a7443921f22dbffd6dJason Sams        return rs;
994efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
995efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
9969c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
9971a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * Create a basic RenderScript context.
9981a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     *
9991a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * @param ctx The context.
10001a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     * @return RenderScript
10011a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams     */
10021a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams    public static RenderScript create(Context ctx) {
10031a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        int v = ctx.getApplicationInfo().targetSdkVersion;
10041a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams        return create(ctx, v);
10051a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams    }
10061a4e1f3efd077f3a61038aedab84dc84c9c44d19Jason Sams
10079c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
100827676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Print the currently available debugging information about the state of
100927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the RS context to the log.
101027676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
101127676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1012bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void contextDump() {
10135dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
1014bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        nContextDump(0);
1015715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    }
1016715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams
10179c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
101827676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Wait for any commands in the fifo between the java bindings and native to
101927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * be processed.
102027676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
102127676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
102296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    public void finish() {
102396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams        nContextFinish();
102496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    }
102596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
10269c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
102727676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Destroy this renderscript context.  Once this function is called its no
102827676fe24be7444a174c15df476e49adc5335d03Jason Sams     * longer legal to use this or any objects created by this context.
102927676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
103027676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
1031f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    public void destroy() {
10325dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
10332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDeinitToClient(mContext);
1034516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        mMessageThread.mRun = false;
1035a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        try {
1036a8bf9429b29743b3489817feb21bde2416acc465Jason Sams            mMessageThread.join();
1037a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        } catch(InterruptedException e) {
1038a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        }
1039516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
10402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDestroy();
1041f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mContext = 0;
1042f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams
1043f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        nDeviceDestroy(mDev);
1044f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mDev = 0;
1045f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    }
104602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
1047a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    boolean isAlive() {
1048a9e7a05b84470257637c97d65f6562aa832c66efJason Sams        return mContext != 0;
1049a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    }
1050a9e7a05b84470257637c97d65f6562aa832c66efJason Sams
1051bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int safeID(BaseObj o) {
10526b9dec00afec359f091ed353f371f08ff150278aJason Sams        if(o != null) {
1053e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams            return o.getID(this);
1054d8e4161f114331343b897cbacea927e7e60e7b17Jason Sams        }
10556b9dec00afec359f091ed353f371f08ff150278aJason Sams        return 0;
105660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
105760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich}
1058