RenderScript.java revision bf6ef8d78fffbce6c1849a4a28fb3f4401ad039e
160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich/*
260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Copyright (C) 2008 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
1943ee06857bb7f99446d1d84f8789016c5d105558Jason Samsimport java.lang.reflect.Field;
2036e612a488511940b61f09803b270aa1c61b68e0Jason Sams
21b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.Bitmap;
22650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guyimport android.graphics.BitmapFactory;
2336e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Config;
2436e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Log;
2536e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.view.Surface;
2643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
2760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
28e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams/**
29e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams * @hide
30e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams *
3127676fe24be7444a174c15df476e49adc5335d03Jason Sams * RenderScript base master class.  An instance of this class creates native
3227676fe24be7444a174c15df476e49adc5335d03Jason Sams * worker threads for processing commands from this object.  This base class
3327676fe24be7444a174c15df476e49adc5335d03Jason Sams * does not provide any extended capabilities beyond simple data processing.
3427676fe24be7444a174c15df476e49adc5335d03Jason Sams * For extended capabilities use derived classes such as RenderScriptGL.
3527676fe24be7444a174c15df476e49adc5335d03Jason Sams *
3627676fe24be7444a174c15df476e49adc5335d03Jason Sams *
3727676fe24be7444a174c15df476e49adc5335d03Jason Sams *
38e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams **/
3960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichpublic class RenderScript {
403bc47d438171dce294e816366d53bc9eca772c5bJason Sams    static final String LOG_TAG = "RenderScript_jni";
41bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static final boolean DEBUG  = false;
42650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"UnusedDeclaration", "deprecation"})
43bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
4460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
4560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
4660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
4702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams     /*
4860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * We use a class initializer to allow the native code to cache some
4960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * field offsets.
5060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
51650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"})
52bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static boolean sInitialized;
53bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    native static void _nInit();
5460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
55dba3ba5b5bf6026abceced921b1b0d231b0faefdJason Sams
5660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    static {
5760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        sInitialized = false;
5860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        try {
59e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams            System.loadLibrary("rs_jni");
6060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            _nInit();
6160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            sInitialized = true;
6260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        } catch (UnsatisfiedLinkError e) {
6360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            Log.d(LOG_TAG, "RenderScript JNI library not found!");
6460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
6560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
6660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Non-threadsafe functions.
68ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    native void nInitElements(int a8, int rgba4444, int rgba8888, int rgb565);
6936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nDeviceCreate();
7036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nDeviceDestroy(int dev);
71ebfb436a49673693b98469683451bd9ede797557Jason Sams    native void nDeviceSetConfig(int dev, int param, int value);
721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    native void nContextGetUserMessage(int con, int[] data);
731c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    native String nContextGetErrorMessage(int con);
741c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    native int  nContextPeekMessage(int con, int[] subID, boolean wait);
752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void nContextInitToClient(int con);
762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void nContextDeinitToClient(int con);
772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Methods below are wrapped to protect the non-threadsafe
802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // lockless fifo.
8111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    native int  rsnContextCreateGL(int dev, int ver,
8211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
8311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
8411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
8511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
8611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int samplesMin, int samplesPref, float samplesQ);
8711c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams    synchronized int nContextCreateGL(int dev, int ver,
8811c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int colorMin, int colorPref,
8911c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int alphaMin, int alphaPref,
9011c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int depthMin, int depthPref,
9111c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int stencilMin, int stencilPref,
9211c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                 int samplesMin, int samplesPref, float samplesQ) {
9311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams        return rsnContextCreateGL(dev, ver, colorMin, colorPref,
9411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  alphaMin, alphaPref, depthMin, depthPref,
9511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  stencilMin, stencilPref,
9611c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  samplesMin, samplesPref, samplesQ);
972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnContextCreate(int dev, int ver);
992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nContextCreate(int dev, int ver) {
1002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnContextCreate(dev, ver);
1012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDestroy(int con);
1032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDestroy() {
1042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDestroy(mContext);
1052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetSurface(int con, int w, int h, Surface sur);
1072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetSurface(int w, int h, Surface sur) {
1082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetSurface(mContext, w, h, sur);
1092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetPriority(int con, int p);
1112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetPriority(int p) {
1122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetPriority(mContext, p);
1132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDump(int con, int bits);
1152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDump(int bits) {
1162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDump(mContext, bits);
1172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextFinish(int con);
1192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextFinish() {
1202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextFinish(mContext);
1212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindRootScript(int con, int script);
1242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindRootScript(int script) {
1252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindRootScript(mContext, script);
1262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindSampler(int con, int sampler, int slot);
1282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindSampler(int sampler, int slot) {
1292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindSampler(mContext, sampler, slot);
1302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramStore(int con, int pfs);
1322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramStore(int pfs) {
1332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramStore(mContext, pfs);
1342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramFragment(int con, int pf);
1362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramFragment(int pf) {
1372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramFragment(mContext, pf);
1382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramVertex(int con, int pv);
1402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramVertex(int pv) {
1412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramVertex(mContext, pv);
1422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramRaster(int con, int pr);
1442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramRaster(int pr) {
1452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramRaster(mContext, pr);
1462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextPause(int con);
1482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextPause() {
1492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextPause(mContext);
1502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextResume(int con);
1522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextResume() {
1532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextResume(mContext);
1542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAssignName(int con, int obj, byte[] name);
1572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAssignName(int obj, byte[] name) {
1582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAssignName(mContext, obj, name);
1592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native String rsnGetName(int con, int obj);
1612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized String nGetName(int obj) {
1622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnGetName(mContext, obj);
1632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnObjDestroy(int con, int id);
1652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nObjDestroy(int id) {
1662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnObjDestroy(mContext, id);
1672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
1702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
1712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnElementCreate(mContext, type, kind, norm, vecSize);
1722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
17370d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    native int  rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
17470d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
17570d4e5024298f71edb3b04867e05568f5495b4ceJason Sams        return rsnElementCreate2(mContext, elements, names, arraySizes);
1762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnElementGetNativeData(int con, int id, int[] elementData);
1782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nElementGetNativeData(int id, int[] elementData) {
1792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnElementGetNativeData(mContext, id, elementData);
1802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnElementGetSubElements(int con, int id, int[] IDs, String[] names);
1822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nElementGetSubElements(int id, int[] IDs, String[] names) {
1832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnElementGetSubElements(mContext, id, IDs, names);
1842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
186bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
187bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
188bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
1892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnTypeGetNativeData(int con, int id, int[] typeData);
1912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nTypeGetNativeData(int id, int[] typeData) {
1922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnTypeGetNativeData(mContext, id, typeData);
1932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationCreateTyped(int con, int type);
1962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationCreateTyped(int type) {
1972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationCreateTyped(mContext, type);
1982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
19926ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    native void  rsnAllocationUpdateFromBitmap(int con, int alloc, Bitmap bmp);
20026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    synchronized void nAllocationUpdateFromBitmap(int alloc, Bitmap bmp) {
20126ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk        rsnAllocationUpdateFromBitmap(mContext, alloc, bmp);
20226ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    }
2032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationCreateFromBitmap(int con, int dstFmt, boolean genMips, Bitmap bmp);
2042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationCreateFromBitmap(int dstFmt, boolean genMips, Bitmap bmp) {
2052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationCreateFromBitmap(mContext, dstFmt, genMips, bmp);
2062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
20767f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    native int  rsnAllocationCubeCreateFromBitmap(int con, int dstFmt, boolean genMips, Bitmap bmp);
20867f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    synchronized int nAllocationCubeCreateFromBitmap(int dstFmt, boolean genMips, Bitmap bmp) {
20967f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk        return rsnAllocationCubeCreateFromBitmap(mContext, dstFmt, genMips, bmp);
21067f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    }
2112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
2122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
2132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationCreateBitmapRef(mContext, type, bmp);
2142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationCreateFromAssetStream(int con, int dstFmt, boolean genMips, int assetStream);
2162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationCreateFromAssetStream(int dstFmt, boolean genMips, int assetStream) {
2172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationCreateFromAssetStream(mContext, dstFmt, genMips, assetStream);
2182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationUploadToTexture(int con, int alloc, boolean genMips, int baseMioLevel);
2212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationUploadToTexture(int alloc, boolean genMips, int baseMioLevel) {
2222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationUploadToTexture(mContext, alloc, genMips, baseMioLevel);
2232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationUploadToBufferObject(int con, int alloc);
2252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationUploadToBufferObject(int alloc) {
2262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationUploadToBufferObject(mContext, alloc);
2272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationSubData1D(int con, int id, int off, int count, int[] d, int sizeBytes);
2302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationSubData1D(int id, int off, int count, int[] d, int sizeBytes) {
2312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationSubData1D(mContext, id, off, count, d, sizeBytes);
2322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationSubData1D(int con, int id, int off, int count, short[] d, int sizeBytes);
2342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationSubData1D(int id, int off, int count, short[] d, int sizeBytes) {
2352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationSubData1D(mContext, id, off, count, d, sizeBytes);
2362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationSubData1D(int con, int id, int off, int count, byte[] d, int sizeBytes);
2382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationSubData1D(int id, int off, int count, byte[] d, int sizeBytes) {
2392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationSubData1D(mContext, id, off, count, d, sizeBytes);
2402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
24149bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    native void rsnAllocationSubElementData1D(int con, int id, int xoff, int compIdx, byte[] d, int sizeBytes);
24249bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    synchronized void nAllocationSubElementData1D(int id, int xoff, int compIdx, byte[] d, int sizeBytes) {
24349bdaf0293408159df18a1d8540360f9623c40f7Jason Sams        rsnAllocationSubElementData1D(mContext, id, xoff, compIdx, d, sizeBytes);
24449bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    }
2452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationSubData1D(int con, int id, int off, int count, float[] d, int sizeBytes);
2462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationSubData1D(int id, int off, int count, float[] d, int sizeBytes) {
2472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationSubData1D(mContext, id, off, count, d, sizeBytes);
2482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationSubData2D(int con, int id, int xoff, int yoff, int w, int h, int[] d, int sizeBytes);
2512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, int[] d, int sizeBytes) {
2522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationSubData2D(mContext, id, xoff, yoff, w, h, d, sizeBytes);
2532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationSubData2D(int con, int id, int xoff, int yoff, int w, int h, float[] d, int sizeBytes);
2552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, float[] d, int sizeBytes) {
2562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationSubData2D(mContext, id, xoff, yoff, w, h, d, sizeBytes);
2572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, int[] d);
2592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, int[] d) {
2602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
2612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, float[] d);
2632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, float[] d) {
2642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
2652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationGetType(int con, int id);
2672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationGetType(int id) {
2682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationGetType(mContext, id);
2692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2715edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    native void rsnAllocationResize1D(int con, int id, int dimX);
2725edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    synchronized void nAllocationResize1D(int id, int dimX) {
2735edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams        rsnAllocationResize1D(mContext, id, dimX);
2745edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    }
2755edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
2765edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
2775edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams        rsnAllocationResize2D(mContext, id, dimX, dimY);
2785edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    }
2795edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
2802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DCreateFromAssetStream(int con, int assetStream);
2812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
2822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
2832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
2852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
2862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
2872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
2892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
2902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
2912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
2932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
2942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
2952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFontCreateFromFile(int con, String fileName, int size, int dpi);
2982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFontCreateFromFile(String fileName, int size, int dpi) {
2992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFontCreateFromFile(mContext, fileName, size, dpi);
3002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
3022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAdapter1DBindAllocation(int con, int ad, int alloc);
3032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAdapter1DBindAllocation(int ad, int alloc) {
3042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAdapter1DBindAllocation(mContext, ad, alloc);
3052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAdapter1DSetConstraint(int con, int ad, int dim, int value);
3072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAdapter1DSetConstraint(int ad, int dim, int value) {
3082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAdapter1DSetConstraint(mContext, ad, dim, value);
3092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAdapter1DData(int con, int ad, int[] d);
3112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAdapter1DData(int ad, int[] d) {
3122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAdapter1DData(mContext, ad, d);
3132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAdapter1DData(int con, int ad, float[] d);
3152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAdapter1DData(int ad, float[] d) {
3162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAdapter1DData(mContext, ad, d);
3172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAdapter1DSubData(int con, int ad, int off, int count, int[] d);
3192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAdapter1DSubData(int ad, int off, int count, int[] d) {
3202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAdapter1DSubData(mContext, ad, off, count, d);
3212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAdapter1DSubData(int con, int ad, int off, int count, float[] d);
3232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAdapter1DSubData(int ad, int off, int count, float[] d) {
3242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAdapter1DSubData(mContext, ad, off, count, d);
3252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAdapter1DCreate(int con);
3272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAdapter1DCreate() {
3282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAdapter1DCreate(mContext);
3292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
3312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAdapter2DBindAllocation(int con, int ad, int alloc);
3322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAdapter2DBindAllocation(int ad, int alloc) {
3332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAdapter2DBindAllocation(mContext, ad, alloc);
3342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAdapter2DSetConstraint(int con, int ad, int dim, int value);
3362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAdapter2DSetConstraint(int ad, int dim, int value) {
3372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAdapter2DSetConstraint(mContext, ad, dim, value);
3382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAdapter2DData(int con, int ad, int[] d);
3402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAdapter2DData(int ad, int[] d) {
3412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAdapter2DData(mContext, ad, d);
3422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAdapter2DData(int con, int ad, float[] d);
3442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAdapter2DData(int ad, float[] d) {
3452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAdapter2DData(mContext, ad, d);
3462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAdapter2DSubData(int con, int ad, int xoff, int yoff, int w, int h, int[] d);
3482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAdapter2DSubData(int ad, int xoff, int yoff, int w, int h, int[] d) {
3492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAdapter2DSubData(mContext, ad, xoff, yoff, w, h, d);
3502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAdapter2DSubData(int con, int ad, int xoff, int yoff, int w, int h, float[] d);
3522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAdapter2DSubData(int ad, int xoff, int yoff, int w, int h, float[] d) {
3532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAdapter2DSubData(mContext, ad, xoff, yoff, w, h, d);
3542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAdapter2DCreate(int con);
3562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAdapter2DCreate() {
3572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAdapter2DCreate(mContext);
3582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
3602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
3612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
3622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptBindAllocation(mContext, script, alloc, slot);
3632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
3652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
3662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetTimeZone(mContext, script, timeZone);
3672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvoke(int con, int id, int slot);
3692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvoke(int id, int slot) {
3702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvoke(mContext, id, slot);
3712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
3732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
3742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvokeV(mContext, id, slot, params);
3752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarI(int con, int id, int slot, int val);
3772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarI(int id, int slot, int val) {
3782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarI(mContext, id, slot, val);
3792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
380031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    native void rsnScriptSetVarJ(int con, int id, int slot, long val);
381031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    synchronized void nScriptSetVarJ(int id, int slot, long val) {
382031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines        rsnScriptSetVarJ(mContext, id, slot, val);
383031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    }
3842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarF(int con, int id, int slot, float val);
3852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarF(int id, int slot, float val) {
3862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarF(mContext, id, slot, val);
3872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
388ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    native void rsnScriptSetVarD(int con, int id, int slot, double val);
389ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    synchronized void nScriptSetVarD(int id, int slot, double val) {
390ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines        rsnScriptSetVarD(mContext, id, slot, val);
391ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    }
3922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
3932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
3942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarV(mContext, id, slot, val);
3952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3966f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    native void rsnScriptSetVarObj(int con, int id, int slot, int val);
3976f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    synchronized void nScriptSetVarObj(int id, int slot, int val) {
3986f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams        rsnScriptSetVarObj(mContext, id, slot, val);
3996f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    }
4002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptCBegin(int con);
4022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptCBegin() {
4032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptCBegin(mContext);
4042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptCSetScript(int con, byte[] script, int offset, int length);
4062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptCSetScript(byte[] script, int offset, int length) {
4072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptCSetScript(mContext, script, offset, length);
4082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
409a914f340ae5b267dc3ab36c1156c795b8fa18f5dShih-wei Liao    native int  rsnScriptCCreate(int con, String val);
410a914f340ae5b267dc3ab36c1156c795b8fa18f5dShih-wei Liao    synchronized int nScriptCCreate(String val) {
411a914f340ae5b267dc3ab36c1156c795b8fa18f5dShih-wei Liao        return rsnScriptCCreate(mContext, val);
4122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnSamplerBegin(int con);
4152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nSamplerBegin() {
4162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnSamplerBegin(mContext);
4172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnSamplerSet(int con, int param, int value);
4192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nSamplerSet(int param, int value) {
4202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnSamplerSet(mContext, param, value);
4212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
422f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    native void rsnSamplerSet2(int con, int param, float value);
423f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    synchronized void nSamplerSet2(int param, float value) {
424f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk        rsnSamplerSet2(mContext, param, value);
425f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    }
4262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnSamplerCreate(int con);
4272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nSamplerCreate() {
4282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnSamplerCreate(mContext);
4292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramStoreBegin(int con, int in, int out);
4322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramStoreBegin(int in, int out) {
4332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramStoreBegin(mContext, in, out);
4342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramStoreDepthFunc(int con, int func);
4362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramStoreDepthFunc(int func) {
4372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramStoreDepthFunc(mContext, func);
4382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramStoreDepthMask(int con, boolean enable);
4402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramStoreDepthMask(boolean enable) {
4412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramStoreDepthMask(mContext, enable);
4422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramStoreColorMask(int con, boolean r, boolean g, boolean b, boolean a);
4442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramStoreColorMask(boolean r, boolean g, boolean b, boolean a) {
4452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramStoreColorMask(mContext, r, g, b, a);
4462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramStoreBlendFunc(int con, int src, int dst);
4482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramStoreBlendFunc(int src, int dst) {
4492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramStoreBlendFunc(mContext, src, dst);
4502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramStoreDither(int con, boolean enable);
4522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramStoreDither(boolean enable) {
4532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramStoreDither(mContext, enable);
4542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnProgramStoreCreate(int con);
4562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nProgramStoreCreate() {
4572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnProgramStoreCreate(mContext);
4582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnProgramRasterCreate(int con, boolean pointSmooth, boolean lineSmooth, boolean pointSprite);
4612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nProgramRasterCreate(boolean pointSmooth, boolean lineSmooth, boolean pointSprite) {
4622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnProgramRasterCreate(mContext, pointSmooth, lineSmooth, pointSprite);
4632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramRasterSetLineWidth(int con, int pr, float v);
4652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramRasterSetLineWidth(int pr, float v) {
4662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramRasterSetLineWidth(mContext, pr, v);
4672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramRasterSetCullMode(int con, int pr, int mode);
4692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramRasterSetCullMode(int pr, int mode) {
4702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramRasterSetCullMode(mContext, pr, mode);
4712e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
4742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindConstants(int pv, int slot, int mID) {
4752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindConstants(mContext, pv, slot, mID);
4762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
4782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindTexture(int vpf, int slot, int a) {
4792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindTexture(mContext, vpf, slot, a);
4802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
4822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindSampler(int vpf, int slot, int s) {
4832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindSampler(mContext, vpf, slot, s);
4842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
485b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    native int  rsnProgramFragmentCreate(int con, String shader, int[] params);
486b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    synchronized int nProgramFragmentCreate(String shader, int[] params) {
487b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk        return rsnProgramFragmentCreate(mContext, shader, params);
4882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
489b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    native int  rsnProgramVertexCreate(int con, String shader, int[] params);
490b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    synchronized int nProgramVertexCreate(String shader, int[] params) {
491b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk        return rsnProgramVertexCreate(mContext, shader, params);
4922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshCreate(int con, int vtxCount, int indexCount);
4952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshCreate(int vtxCount, int indexCount) {
4962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshCreate(mContext, vtxCount, indexCount);
4972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshBindVertex(int con, int id, int alloc, int slot);
4992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshBindVertex(int id, int alloc, int slot) {
5002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshBindVertex(mContext, id, alloc, slot);
5012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshBindIndex(int con, int id, int alloc, int prim, int slot);
5032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshBindIndex(int id, int alloc, int prim, int slot) {
5042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshBindIndex(mContext, id, alloc, prim, slot);
5052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5069d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    native void rsnMeshInitVertexAttribs(int con, int id);
5079d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    synchronized void nMeshInitVertexAttribs(int id) {
5089d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk        rsnMeshInitVertexAttribs(mContext, id);
5099d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    }
5102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetVertexBufferCount(int con, int id);
5112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetVertexBufferCount(int id) {
5122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetVertexBufferCount(mContext, id);
5132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetIndexCount(int con, int id);
5152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetIndexCount(int id) {
5162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetIndexCount(mContext, id);
5172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
5192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
5202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
5212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
5232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
5242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
5252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
52760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
528bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mDev;
529bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mContext;
530650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal"})
531bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    MessageThread mMessageThread;
53260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
5338cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U8;
5348cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I8;
5358cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U16;
5368cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I16;
5378cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U32;
5388cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I32;
53952d836332f6aae74ed97fda1b53681f36710af64Stephen Hines    Element mElement_U64;
540ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines    Element mElement_I64;
5418cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_F32;
54202f41705199336f808ece50d81585450e7f8f61fStephen Hines    Element mElement_F64;
543f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams    Element mElement_BOOLEAN;
5448cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams
5458cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ELEMENT;
5468cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_TYPE;
5478cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ALLOCATION;
5488cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SAMPLER;
5498cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SCRIPT;
5508cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_MESH;
5518cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_FRAGMENT;
5528cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_VERTEX;
5538cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_RASTER;
5548cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_STORE;
555a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
5563c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_A_8;
5573c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_565;
5583c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_888;
5593c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_5551;
5603c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_4444;
5613c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_8888;
5623c0dfbab807a459622aeade4940daddf482dec66Jason Sams
5638cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_2;
5648cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_3;
5658cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_4;
5668cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_UCHAR_4;
5677d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
5681d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_4X4;
5691d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_3X3;
5701d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_2X2;
5711d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams
5724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_NEAREST;
5734d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR;
5744d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
5754d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_NEAREST;
5764d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR;
5774d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
5784d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
579d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
580d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
581d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_TEST;
582d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_WRITE;
583d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
584d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
585d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_TEST;
586d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_WRITE;
587d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ADD_DEPTH_TEST;
588d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ADD_DEPTH_NO_DEPTH;
589d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ADD_DEPTH_NO_TEST;
590d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ADD_DEPTH_NO_WRITE;
591d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
592d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_BACK;
593d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_FRONT;
594d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_NONE;
59532e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk
59660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
59743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    //
59860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
59927676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
60027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Base class application should derive from for handling RS messages
60127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * comming from their scripts.  When a script calls sendToClient the data
60227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * fields will be filled in and then the run method called by a message
60327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * handling thread.  This will occur some time after sendToClient completes
60427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * in the script.
60527676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
60627676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
607bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSMessageHandler implements Runnable {
608516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int[] mData;
609516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int mID;
6101c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mLength;
611516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
612516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
613516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
61427676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
61527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * If an application is expecting messages it should set this field to an
61627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSMessage.  This instance will receive all the user messages
61727676fe24be7444a174c15df476e49adc5335d03Jason Sams     * sent from sendToClient by scripts from this context.
61827676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
61927676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
620bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSMessageHandler mMessageCallback = null;
621bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
622bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setMessageHandler(RSMessageHandler msg) {
623bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mMessageCallback = msg;
624bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
625bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSMessageHandler getMessageHandler() {
626bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mMessageCallback;
627bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
628516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
62927676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
63027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Runtime error base class.  An application should derive from this class
63127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * if it wishes to install an error handler.  When errors occur at runtime
63227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the fields in this class will be filled and the run method called.
63327676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
63427676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
635bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSErrorHandler implements Runnable {
6361c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected String mErrorMessage;
6371c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mErrorNum;
6381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        public void run() {
6391c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        }
6401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
64127676fe24be7444a174c15df476e49adc5335d03Jason Sams
64227676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
64327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Application Error handler.  All runtime errors will be dispatched to the
64427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSAsyncError set here.  If this field is null a
64527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * RSRuntimeException will instead be thrown with details about the error.
64627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * This will cause program termaination.
64727676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
64827676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
649bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSErrorHandler mErrorCallback = null;
650bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
651bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setErrorHandler(RSErrorHandler msg) {
652bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mErrorCallback = msg;
653bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
654bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSErrorHandler getErrorHandler() {
655bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mErrorCallback;
656bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
6571c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
65827676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
65927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * RenderScript worker threads priority enumeration.  The default value is
66027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * NORMAL.  Applications wishing to do background processing such as
66127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * wallpapers should set their priority to LOW to avoid starving forground
66227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * processes.
66327676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
6647d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    public enum Priority {
665bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        // Remap these numbers to opaque...
6667d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        LOW (5),     //ANDROID_PRIORITY_BACKGROUND + 5
6677d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        NORMAL (-4);  //ANDROID_PRIORITY_DISPLAY
6687d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
6697d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        int mID;
6707d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        Priority(int id) {
6717d787b4722eaeb79cab42c36060336e092b77b5fJason Sams            mID = id;
6727d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        }
6737d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
6747d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
675771bebb94054d06f97284379c93a2620613513c3Jason Sams    void validate() {
676771bebb94054d06f97284379c93a2620613513c3Jason Sams        if (mContext == 0) {
677c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams            throw new RSInvalidStateException("Calling RS with no Context active.");
678771bebb94054d06f97284379c93a2620613513c3Jason Sams        }
679771bebb94054d06f97284379c93a2620613513c3Jason Sams    }
680771bebb94054d06f97284379c93a2620613513c3Jason Sams
68127676fe24be7444a174c15df476e49adc5335d03Jason Sams
68227676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
68327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Change the priority of the worker threads for this context.
68427676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
68527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @param p New priority to be set.
68627676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
687bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setPriority(Priority p) {
6885dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
6897d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        nContextSetPriority(p.mID);
6907d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
6917d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
692bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static class MessageThread extends Thread {
693516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        RenderScript mRS;
694516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        boolean mRun = true;
695bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        int[] mAuxData = new int[2];
6961c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
697bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
698bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
699bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
700bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
701bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_USER = 4;
702516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
703bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
704add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
705516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        MessageThread(RenderScript rs) {
706516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            super("RSMessageThread");
707516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            mRS = rs;
708516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
709516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
710516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
711516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
712516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // This function is a temporary solution.  The final solution will
713516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // used typed allocations where the message id is the type indicator.
714516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            int[] rbuf = new int[16];
7152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams            mRS.nContextInitToClient(mRS.mContext);
716516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            while(mRun) {
7171d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                rbuf[0] = 0;
718bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData, true);
719bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int size = mAuxData[1];
720bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int subID = mAuxData[0];
7211c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
7221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_USER) {
7231c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if ((size>>2) >= rbuf.length) {
7241c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        rbuf = new int[(size + 3) >> 2];
7251c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
7261c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    mRS.nContextGetUserMessage(mRS.mContext, rbuf);
7271c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
7281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mMessageCallback != null) {
7291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mData = rbuf;
7301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mID = subID;
7311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mLength = size;
7321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.run();
7331d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                    } else {
7341c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
735516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                    }
736ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                    continue;
737516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
7381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
7391c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
7401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    String e = mRS.nContextGetErrorMessage(mRS.mContext);
7411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
742add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    if (subID >= RS_ERROR_FATAL_UNKNOWN) {
743add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                        throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
744add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    }
745add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
7461c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mErrorCallback != null) {
7471c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorMessage = e;
7481c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorNum = subID;
7491c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.run();
7501c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    } else {
7511c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        //throw new RSRuntimeException("Received error num " + subID + ", details: " + e);
7521c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
7531c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    continue;
7541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                }
7551c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
7561c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // 2: teardown.
7571c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // But we want to avoid starving other threads during
7581c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // teardown by yielding until the next line in the destructor
7591c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // can execute to set mRun = false
7601c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                try {
7611c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    sleep(1, 0);
7621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                } catch(InterruptedException e) {
763516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
764516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            }
7653bc47d438171dce294e816366d53bc9eca772c5bJason Sams            Log.d(LOG_TAG, "MessageThread exiting.");
766516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
767516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
768516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
76927676fe24be7444a174c15df476e49adc5335d03Jason Sams    RenderScript() {
77060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
77160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
77227676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
77327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Create a basic RenderScript context.
77427676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
77527676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
77627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @return RenderScript
77727676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
778704ff64b099406bb328898a7443921f22dbffd6dJason Sams    public static RenderScript create() {
779704ff64b099406bb328898a7443921f22dbffd6dJason Sams        RenderScript rs = new RenderScript();
780704ff64b099406bb328898a7443921f22dbffd6dJason Sams
781704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mDev = rs.nDeviceCreate();
782704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mContext = rs.nContextCreate(rs.mDev, 0);
783704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread = new MessageThread(rs);
784704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread.start();
785704ff64b099406bb328898a7443921f22dbffd6dJason Sams        Element.initPredefined(rs);
786704ff64b099406bb328898a7443921f22dbffd6dJason Sams        return rs;
787efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
788efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
78927676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
79027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Print the currently available debugging information about the state of
79127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the RS context to the log.
79227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
79327676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
794bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void contextDump() {
7955dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
796bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        nContextDump(0);
797715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    }
798715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams
79927676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
80027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Wait for any commands in the fifo between the java bindings and native to
80127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * be processed.
80227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
80327676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
80496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    public void finish() {
80596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams        nContextFinish();
80696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    }
80796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
80827676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
80927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Destroy this renderscript context.  Once this function is called its no
81027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * longer legal to use this or any objects created by this context.
81127676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
81227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
813f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    public void destroy() {
8145dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
8152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDeinitToClient(mContext);
816516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        mMessageThread.mRun = false;
817a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        try {
818a8bf9429b29743b3489817feb21bde2416acc465Jason Sams            mMessageThread.join();
819a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        } catch(InterruptedException e) {
820a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        }
821516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
8222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDestroy();
823f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mContext = 0;
824f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams
825f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        nDeviceDestroy(mDev);
826f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mDev = 0;
827f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    }
82802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
829a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    boolean isAlive() {
830a9e7a05b84470257637c97d65f6562aa832c66efJason Sams        return mContext != 0;
831a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    }
832a9e7a05b84470257637c97d65f6562aa832c66efJason Sams
833bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int safeID(BaseObj o) {
8346b9dec00afec359f091ed353f371f08ff150278aJason Sams        if(o != null) {
83506d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams            return o.getID();
836d8e4161f114331343b897cbacea927e7e60e7b17Jason Sams        }
8376b9dec00afec359f091ed353f371f08ff150278aJason Sams        return 0;
83860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
83960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich}
840