RenderScript.java revision 2c74ad9aae29cc64fece926f353825a7925792c2
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
216b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liaoimport android.content.Context;
22b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchoukimport android.content.res.AssetManager;
23b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.Bitmap;
24650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guyimport android.graphics.BitmapFactory;
2536e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Config;
2636e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Log;
2736e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.view.Surface;
2843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
2960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
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
456b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    private Context mApplicationContext;
4660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
476b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    /*
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) {
63fa445b9353972735d8d65e8a936786b1afe9886dJason Sams            Log.e(LOG_TAG, "Error loading RS jni library: " + e);
64fa445b9353972735d8d65e8a936786b1afe9886dJason Sams            throw new RSRuntimeException("Error loading RS jni library: " + e);
6560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
6660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
6760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    // Non-threadsafe functions.
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,
862c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ, int dpi);
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,
922c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                 int samplesMin, int samplesPref, float samplesQ, int dpi) {
9311c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams        return rsnContextCreateGL(dev, ver, colorMin, colorPref,
9411c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  alphaMin, alphaPref, depthMin, depthPref,
9511c8af9ded3a319635b4e91a639a616ec97fc7e3Jason Sams                                  stencilMin, stencilPref,
962c74ad9aae29cc64fece926f353825a7925792c2Alex Sakhartchouk                                  samplesMin, samplesPref, samplesQ, dpi);
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() {
104d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDestroy(mContext);
1062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetSurface(int con, int w, int h, Surface sur);
1082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetSurface(int w, int h, Surface sur) {
109d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetSurface(mContext, w, h, sur);
1112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextSetPriority(int con, int p);
1132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextSetPriority(int p) {
114d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextSetPriority(mContext, p);
1162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextDump(int con, int bits);
1182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextDump(int bits) {
119d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextDump(mContext, bits);
1212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextFinish(int con);
1232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextFinish() {
124d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextFinish(mContext);
1262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindRootScript(int con, int script);
1292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindRootScript(int script) {
130d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindRootScript(mContext, script);
1322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindSampler(int con, int sampler, int slot);
1342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindSampler(int sampler, int slot) {
135d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindSampler(mContext, sampler, slot);
1372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramStore(int con, int pfs);
1392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramStore(int pfs) {
140d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramStore(mContext, pfs);
1422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramFragment(int con, int pf);
1442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramFragment(int pf) {
145d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramFragment(mContext, pf);
1472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramVertex(int con, int pv);
1492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramVertex(int pv) {
150d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramVertex(mContext, pv);
1522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextBindProgramRaster(int con, int pr);
1542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextBindProgramRaster(int pr) {
155d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextBindProgramRaster(mContext, pr);
1572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextPause(int con);
1592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextPause() {
160d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextPause(mContext);
1622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnContextResume(int con);
1642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nContextResume() {
165d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnContextResume(mContext);
1672e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAssignName(int con, int obj, byte[] name);
1702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAssignName(int obj, byte[] name) {
171d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1722e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAssignName(mContext, obj, name);
1732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native String rsnGetName(int con, int obj);
1752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized String nGetName(int obj) {
176d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnGetName(mContext, obj);
1782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnObjDestroy(int con, int id);
1802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nObjDestroy(int id) {
181d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // There is a race condition here.  The calling code may be run
182d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // by the gc while teardown is occuring.  This protects againts
183d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        // deleting dead objects.
184d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        if (mContext != 0) {
185d1ac98149737299513da1357e36f68cbb6d74425Jason Sams            rsnObjDestroy(mContext, id);
186d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        }
1872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
1892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnElementCreate(int con, int type, int kind, boolean norm, int vecSize);
1902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nElementCreate(int type, int kind, boolean norm, int vecSize) {
191d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
1922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnElementCreate(mContext, type, kind, norm, vecSize);
1932e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
19470d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    native int  rsnElementCreate2(int con, int[] elements, String[] names, int[] arraySizes);
19570d4e5024298f71edb3b04867e05568f5495b4ceJason Sams    synchronized int nElementCreate2(int[] elements, String[] names, int[] arraySizes) {
196d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
19770d4e5024298f71edb3b04867e05568f5495b4ceJason Sams        return rsnElementCreate2(mContext, elements, names, arraySizes);
1982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
1992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnElementGetNativeData(int con, int id, int[] elementData);
2002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nElementGetNativeData(int id, int[] elementData) {
201d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnElementGetNativeData(mContext, id, elementData);
2032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnElementGetSubElements(int con, int id, int[] IDs, String[] names);
2052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nElementGetSubElements(int id, int[] IDs, String[] names) {
206d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnElementGetSubElements(mContext, id, IDs, names);
2082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
210bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    native int rsnTypeCreate(int con, int eid, int x, int y, int z, boolean mips, boolean faces);
211bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    synchronized int nTypeCreate(int eid, int x, int y, int z, boolean mips, boolean faces) {
212d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
213bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return rsnTypeCreate(mContext, eid, x, y, z, mips, faces);
2142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnTypeGetNativeData(int con, int id, int[] typeData);
2162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nTypeGetNativeData(int id, int[] typeData) {
217d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnTypeGetNativeData(mContext, id, typeData);
2192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
221d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    native int  rsnAllocationCreateTyped(int con, int type, int mip, int usage);
222d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams    synchronized int nAllocationCreateTyped(int type, int mip, int usage) {
223d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
224d4b23b54445b13dacaafad97d100999abb36ea6fJason Sams        return rsnAllocationCreateTyped(mContext, type, mip, usage);
2252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2265476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
2275476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
228d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2295476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCreateFromBitmap(mContext, type, mip, bmp, usage);
23026ae3904e8050eae655722caf93ee5d3f0ab195aAlex Sakhartchouk    }
2315476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCubeCreateFromBitmap(int con, int type, int mip, Bitmap bmp, int usage);
2325476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCubeCreateFromBitmap(int type, int mip, Bitmap bmp, int usage) {
233d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2345476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCubeCreateFromBitmap(mContext, type, mip, bmp, usage);
23567f2e442a31b8395e3c1951f8e91139ec7f2be99Alex Sakhartchouk    }
2362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationCreateBitmapRef(int con, int type, Bitmap bmp);
2372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationCreateBitmapRef(int type, Bitmap bmp) {
238d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationCreateBitmapRef(mContext, type, bmp);
2402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2415476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native int  rsnAllocationCreateFromAssetStream(int con, int mips, int assetStream, int usage);
2425476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized int nAllocationCreateFromAssetStream(int mips, int assetStream, int usage) {
243d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2445476b450e50939940dcf3f15c92335cee2fc572dJason Sams        return rsnAllocationCreateFromAssetStream(mContext, mips, assetStream, usage);
2455476b450e50939940dcf3f15c92335cee2fc572dJason Sams    }
2465476b450e50939940dcf3f15c92335cee2fc572dJason Sams
2474ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    native void  rsnAllocationCopyToBitmap(int con, int alloc, Bitmap bmp);
2484ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    synchronized void nAllocationCopyToBitmap(int alloc, Bitmap bmp) {
249d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2504ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams        rsnAllocationCopyToBitmap(mContext, alloc, bmp);
2514ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    }
2524ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
2534ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams
2545476b450e50939940dcf3f15c92335cee2fc572dJason Sams    native void rsnAllocationSyncAll(int con, int alloc, int src);
2555476b450e50939940dcf3f15c92335cee2fc572dJason Sams    synchronized void nAllocationSyncAll(int alloc, int src) {
256d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2575476b450e50939940dcf3f15c92335cee2fc572dJason Sams        rsnAllocationSyncAll(mContext, alloc, src);
2585476b450e50939940dcf3f15c92335cee2fc572dJason Sams    }
259f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    native void rsnAllocationGenerateMipmaps(int con, int alloc);
260f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    synchronized void nAllocationGenerateMipmaps(int alloc) {
261d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
262f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams        rsnAllocationGenerateMipmaps(mContext, alloc);
263f7086090cfc8d97b5bd3b4d7801a27af11f7c207Jason Sams    }
2644ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    native void  rsnAllocationCopyFromBitmap(int con, int alloc, Bitmap bmp);
2654ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams    synchronized void nAllocationCopyFromBitmap(int alloc, Bitmap bmp) {
266d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
2674ef6650bd05a39a09958ea1db92f120ea4949cb1Jason Sams        rsnAllocationCopyFromBitmap(mContext, alloc, bmp);
2682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
2702e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
27149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, int[] d, int sizeBytes);
27249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, int[] d, int sizeBytes) {
273d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
27449a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
2752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
27649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, short[] d, int sizeBytes);
27749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, short[] d, int sizeBytes) {
278d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
27949a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
2802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
28149a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, byte[] d, int sizeBytes);
28249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, byte[] d, int sizeBytes) {
283d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
28449a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
2852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
28649a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData1D(int con, int id, int off, int mip, int count, float[] d, int sizeBytes);
28749a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData1D(int id, int off, int mip, int count, float[] d, int sizeBytes) {
288d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
28949a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData1D(mContext, id, off, mip, count, d, sizeBytes);
29049bdaf0293408159df18a1d8540360f9623c40f7Jason Sams    }
29149a05d7b82956009f03acbb92a064eed054eb031Jason Sams
29249a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationElementData1D(int con, int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes);
29349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationElementData1D(int id, int xoff, int mip, int compIdx, byte[] d, int sizeBytes) {
294d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
29549a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationElementData1D(mContext, id, xoff, mip, compIdx, d, sizeBytes);
2962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
2972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
298fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes);
299fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, byte[] d, int sizeBytes) {
300d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
301fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
302fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
303fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes);
304fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, short[] d, int sizeBytes) {
305d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
306fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
307fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
30849a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes);
30949a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, int[] d, int sizeBytes) {
310d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
31149a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
3122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
31349a05d7b82956009f03acbb92a064eed054eb031Jason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes);
31449a05d7b82956009f03acbb92a064eed054eb031Jason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, int w, int h, float[] d, int sizeBytes) {
315d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
31649a05d7b82956009f03acbb92a064eed054eb031Jason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, w, h, d, sizeBytes);
3172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
318fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationData2D(int con, int id, int xoff, int yoff, int mip, int face, Bitmap b);
319fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationData2D(int id, int xoff, int yoff, int mip, int face, Bitmap b) {
320d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
321fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationData2D(mContext, id, xoff, yoff, mip, face, b);
322fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
32349a05d7b82956009f03acbb92a064eed054eb031Jason Sams
324fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationRead(int con, int id, byte[] d);
325fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationRead(int id, byte[] d) {
326d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
327fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationRead(mContext, id, d);
328fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
329fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    native void rsnAllocationRead(int con, int id, short[] d);
330fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    synchronized void nAllocationRead(int id, short[] d) {
331d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
332fa445b9353972735d8d65e8a936786b1afe9886dJason Sams        rsnAllocationRead(mContext, id, d);
333fa445b9353972735d8d65e8a936786b1afe9886dJason Sams    }
3342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, int[] d);
3352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, int[] d) {
336d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
3382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnAllocationRead(int con, int id, float[] d);
3402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nAllocationRead(int id, float[] d) {
341d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnAllocationRead(mContext, id, d);
3432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnAllocationGetType(int con, int id);
3452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nAllocationGetType(int id) {
346d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnAllocationGetType(mContext, id);
3482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
3505edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    native void rsnAllocationResize1D(int con, int id, int dimX);
3515edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    synchronized void nAllocationResize1D(int id, int dimX) {
352d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3535edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams        rsnAllocationResize1D(mContext, id, dimX);
3545edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    }
3555edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    native void rsnAllocationResize2D(int con, int id, int dimX, int dimY);
3565edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    synchronized void nAllocationResize2D(int id, int dimX, int dimY) {
357d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3585edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams        rsnAllocationResize2D(mContext, id, dimX, dimY);
3595edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams    }
3605edc608a0749ed4b7074b5c1243043eb722c3c31Jason Sams
3612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DCreateFromAssetStream(int con, int assetStream);
3622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DCreateFromAssetStream(int assetStream) {
363d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DCreateFromAssetStream(mContext, assetStream);
3652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
366b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFileA3DCreateFromFile(int con, String path);
367b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFileA3DCreateFromFile(String path) {
368d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
369b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFileA3DCreateFromFile(mContext, path);
370b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
371b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFileA3DCreateFromAsset(int con, AssetManager mgr, String path);
372b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFileA3DCreateFromAsset(AssetManager mgr, String path) {
373d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
374b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFileA3DCreateFromAsset(mContext, mgr, path);
375b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
3762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetNumIndexEntries(int con, int fileA3D);
3772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetNumIndexEntries(int fileA3D) {
378d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetNumIndexEntries(mContext, fileA3D);
3802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnFileA3DGetIndexEntries(int con, int fileA3D, int numEntries, int[] IDs, String[] names);
3822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nFileA3DGetIndexEntries(int fileA3D, int numEntries, int[] IDs, String[] names) {
383d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnFileA3DGetIndexEntries(mContext, fileA3D, numEntries, IDs, names);
3852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnFileA3DGetEntryByIndex(int con, int fileA3D, int index);
3872e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nFileA3DGetEntryByIndex(int fileA3D, int index) {
388d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFileA3DGetEntryByIndex(mContext, fileA3D, index);
3902e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
3912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
392e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk    native int  rsnFontCreateFromFile(int con, String fileName, float size, int dpi);
393e27cdeeecba5b445e307d653d9cb7da007adfac3Alex Sakhartchouk    synchronized int nFontCreateFromFile(String fileName, float size, int dpi) {
394d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
3952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnFontCreateFromFile(mContext, fileName, size, dpi);
3962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
397b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFontCreateFromAssetStream(int con, String name, float size, int dpi, int assetStream);
398b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFontCreateFromAssetStream(String name, float size, int dpi, int assetStream) {
399d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
400b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFontCreateFromAssetStream(mContext, name, size, dpi, assetStream);
401b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
402b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    native int  rsnFontCreateFromAsset(int con, AssetManager mgr, String path, float size, int dpi);
403b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    synchronized int nFontCreateFromAsset(AssetManager mgr, String path, float size, int dpi) {
404d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
405b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk        return rsnFontCreateFromAsset(mContext, mgr, path, size, dpi);
406b0253ea6969bdd27bf574e0da7fa91aa6d09f44fAlex Sakhartchouk    }
4072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptBindAllocation(int con, int script, int alloc, int slot);
4102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptBindAllocation(int script, int alloc, int slot) {
411d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptBindAllocation(mContext, script, alloc, slot);
4132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetTimeZone(int con, int script, byte[] timeZone);
4152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetTimeZone(int script, byte[] timeZone) {
416d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetTimeZone(mContext, script, timeZone);
4182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvoke(int con, int id, int slot);
4202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvoke(int id, int slot) {
421d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvoke(mContext, id, slot);
4232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptInvokeV(int con, int id, int slot, byte[] params);
4252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptInvokeV(int id, int slot, byte[] params) {
426d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptInvokeV(mContext, id, slot, params);
4282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarI(int con, int id, int slot, int val);
4302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarI(int id, int slot, int val) {
431d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarI(mContext, id, slot, val);
4332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
434031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    native void rsnScriptSetVarJ(int con, int id, int slot, long val);
435031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    synchronized void nScriptSetVarJ(int id, int slot, long val) {
436d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
437031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines        rsnScriptSetVarJ(mContext, id, slot, val);
438031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines    }
4392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarF(int con, int id, int slot, float val);
4402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarF(int id, int slot, float val) {
441d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarF(mContext, id, slot, val);
4432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
444ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    native void rsnScriptSetVarD(int con, int id, int slot, double val);
445ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    synchronized void nScriptSetVarD(int id, int slot, double val) {
446d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
447ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines        rsnScriptSetVarD(mContext, id, slot, val);
448ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines    }
4492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptSetVarV(int con, int id, int slot, byte[] val);
4502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptSetVarV(int id, int slot, byte[] val) {
451d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptSetVarV(mContext, id, slot, val);
4532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4546f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    native void rsnScriptSetVarObj(int con, int id, int slot, int val);
4556f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    synchronized void nScriptSetVarObj(int id, int slot, int val) {
456d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4576f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams        rsnScriptSetVarObj(mContext, id, slot, val);
4586f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams    }
4592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptCBegin(int con);
4612e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptCBegin() {
462d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptCBegin(mContext);
4642e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4652e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnScriptCSetScript(int con, byte[] script, int offset, int length);
4662e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nScriptCSetScript(byte[] script, int offset, int length) {
467d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnScriptCSetScript(mContext, script, offset, length);
4692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
470eeca435dc6134a285b9bbb832cd6a1a88f34e85fShih-wei Liao    native int  rsnScriptCCreate(int con, String packageName, String resName, String cacheDir);
471eeca435dc6134a285b9bbb832cd6a1a88f34e85fShih-wei Liao    synchronized int nScriptCCreate(String packageName, String resName, String cacheDir) {
472d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
473eeca435dc6134a285b9bbb832cd6a1a88f34e85fShih-wei Liao        return rsnScriptCCreate(mContext, packageName, resName, cacheDir);
4742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnSamplerBegin(int con);
4772e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nSamplerBegin() {
478d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnSamplerBegin(mContext);
4802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnSamplerSet(int con, int param, int value);
4822e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nSamplerSet(int param, int value) {
483d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnSamplerSet(mContext, param, value);
4852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
486f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    native void rsnSamplerSet2(int con, int param, float value);
487f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    synchronized void nSamplerSet2(int param, float value) {
488d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
489f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk        rsnSamplerSet2(mContext, param, value);
490f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk    }
4912e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnSamplerCreate(int con);
4922e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nSamplerCreate() {
493d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
4942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnSamplerCreate(mContext);
4952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
4962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
4972e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramStoreBegin(int con, int in, int out);
4982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramStoreBegin(int in, int out) {
499d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramStoreBegin(mContext, in, out);
5012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5022e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramStoreDepthFunc(int con, int func);
5032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramStoreDepthFunc(int func) {
504d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramStoreDepthFunc(mContext, func);
5062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5072e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramStoreDepthMask(int con, boolean enable);
5082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramStoreDepthMask(boolean enable) {
509d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramStoreDepthMask(mContext, enable);
5112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramStoreColorMask(int con, boolean r, boolean g, boolean b, boolean a);
5132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramStoreColorMask(boolean r, boolean g, boolean b, boolean a) {
514d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramStoreColorMask(mContext, r, g, b, a);
5162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5172e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramStoreBlendFunc(int con, int src, int dst);
5182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramStoreBlendFunc(int src, int dst) {
519d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5202e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramStoreBlendFunc(mContext, src, dst);
5212e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5222e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramStoreDither(int con, boolean enable);
5232e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramStoreDither(boolean enable) {
524d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5252e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramStoreDither(mContext, enable);
5262e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5272e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnProgramStoreCreate(int con);
5282e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nProgramStoreCreate() {
529d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnProgramStoreCreate(mContext);
5312e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5322e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
5332e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnProgramRasterCreate(int con, boolean pointSmooth, boolean lineSmooth, boolean pointSprite);
5342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nProgramRasterCreate(boolean pointSmooth, boolean lineSmooth, boolean pointSprite) {
535d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnProgramRasterCreate(mContext, pointSmooth, lineSmooth, pointSprite);
5372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramRasterSetLineWidth(int con, int pr, float v);
5392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramRasterSetLineWidth(int pr, float v) {
540d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramRasterSetLineWidth(mContext, pr, v);
5422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramRasterSetCullMode(int con, int pr, int mode);
5442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramRasterSetCullMode(int pr, int mode) {
545d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramRasterSetCullMode(mContext, pr, mode);
5472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5482e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
5492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindConstants(int con, int pv, int slot, int mID);
5502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindConstants(int pv, int slot, int mID) {
551d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindConstants(mContext, pv, slot, mID);
5532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindTexture(int con, int vpf, int slot, int a);
5552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindTexture(int vpf, int slot, int a) {
556d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5572e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindTexture(mContext, vpf, slot, a);
5582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnProgramBindSampler(int con, int vpf, int slot, int s);
5602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nProgramBindSampler(int vpf, int slot, int s) {
561d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnProgramBindSampler(mContext, vpf, slot, s);
5632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
564b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    native int  rsnProgramFragmentCreate(int con, String shader, int[] params);
565b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    synchronized int nProgramFragmentCreate(String shader, int[] params) {
566d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
567b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk        return rsnProgramFragmentCreate(mContext, shader, params);
5682e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
569b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    native int  rsnProgramVertexCreate(int con, String shader, int[] params);
570b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk    synchronized int nProgramVertexCreate(String shader, int[] params) {
571d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
572b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk        return rsnProgramVertexCreate(mContext, shader, params);
5732e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5742e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
5752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshCreate(int con, int vtxCount, int indexCount);
5762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshCreate(int vtxCount, int indexCount) {
577d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5782e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshCreate(mContext, vtxCount, indexCount);
5792e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5802e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshBindVertex(int con, int id, int alloc, int slot);
5812e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshBindVertex(int id, int alloc, int slot) {
582d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshBindVertex(mContext, id, alloc, slot);
5842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5852e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshBindIndex(int con, int id, int alloc, int prim, int slot);
5862e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshBindIndex(int id, int alloc, int prim, int slot) {
587d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5882e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshBindIndex(mContext, id, alloc, prim, slot);
5892e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
5909d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    native void rsnMeshInitVertexAttribs(int con, int id);
5919d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    synchronized void nMeshInitVertexAttribs(int id) {
592d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5939d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk        rsnMeshInitVertexAttribs(mContext, id);
5949d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk    }
5952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetVertexBufferCount(int con, int id);
5962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetVertexBufferCount(int id) {
597d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
5982e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetVertexBufferCount(mContext, id);
5992e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6002e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native int  rsnMeshGetIndexCount(int con, int id);
6012e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized int nMeshGetIndexCount(int id) {
602d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        return rsnMeshGetIndexCount(mContext, id);
6042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount);
6062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) {
607d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount);
6092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount);
6112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) {
612d1ac98149737299513da1357e36f68cbb6d74425Jason Sams        validate();
6132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount);
6142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams    }
6152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams
61660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
617bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mDev;
618bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int     mContext;
619650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal"})
620bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    MessageThread mMessageThread;
62160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
6228cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U8;
6238cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I8;
6248cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U16;
6258cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I16;
6268cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_U32;
6278cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_I32;
62852d836332f6aae74ed97fda1b53681f36710af64Stephen Hines    Element mElement_U64;
629ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines    Element mElement_I64;
6308cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_F32;
63102f41705199336f808ece50d81585450e7f8f61fStephen Hines    Element mElement_F64;
632f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams    Element mElement_BOOLEAN;
6338cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams
6348cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ELEMENT;
6358cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_TYPE;
6368cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_ALLOCATION;
6378cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SAMPLER;
6388cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_SCRIPT;
6398cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_MESH;
6408cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_FRAGMENT;
6418cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_VERTEX;
6428cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_RASTER;
6438cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_PROGRAM_STORE;
644a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
6453c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_A_8;
6463c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_565;
6473c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_888;
6483c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_5551;
6493c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_4444;
6503c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_8888;
6513c0dfbab807a459622aeade4940daddf482dec66Jason Sams
6528cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_2;
6538cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_3;
6548cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_FLOAT_4;
6558cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    Element mElement_UCHAR_4;
6567d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
6571d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_4X4;
6581d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_3X3;
6591d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams    Element mElement_MATRIX_2X2;
6601d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams
6614d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_NEAREST;
6624d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR;
6634d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR;
6644d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_NEAREST;
6654d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR;
6664d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    Sampler mSampler_WRAP_LINEAR_MIP_LINEAR;
6674d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
668d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST;
669d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
670d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST;
671d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
672d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk
673d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_BACK;
674d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_FRONT;
675d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    ProgramRaster mProgramRaster_CULL_NONE;
67632e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk
67760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
67843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    //
67960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
68027676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
68127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Base class application should derive from for handling RS messages
6828cecbb5293f73e3f63f2601dda68016762c58a0cStephen Hines     * coming from their scripts.  When a script calls sendToClient the data
68327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * fields will be filled in and then the run method called by a message
68427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * handling thread.  This will occur some time after sendToClient completes
68527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * in the script.
68627676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
68727676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
688bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSMessageHandler implements Runnable {
689516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int[] mData;
690516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        protected int mID;
6911c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mLength;
692516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
693516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
694516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
69527676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
69627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * If an application is expecting messages it should set this field to an
69727676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSMessage.  This instance will receive all the user messages
69827676fe24be7444a174c15df476e49adc5335d03Jason Sams     * sent from sendToClient by scripts from this context.
69927676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
70027676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
701bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSMessageHandler mMessageCallback = null;
702bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
703bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setMessageHandler(RSMessageHandler msg) {
704bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mMessageCallback = msg;
705bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
706bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSMessageHandler getMessageHandler() {
707bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mMessageCallback;
708bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
709516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
71027676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
71127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Runtime error base class.  An application should derive from this class
71227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * if it wishes to install an error handler.  When errors occur at runtime
71327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the fields in this class will be filled and the run method called.
71427676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
71527676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
716bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public static class RSErrorHandler implements Runnable {
7171c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected String mErrorMessage;
7181c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        protected int mErrorNum;
7191c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        public void run() {
7201c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams        }
7211c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams    }
72227676fe24be7444a174c15df476e49adc5335d03Jason Sams
72327676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
72427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Application Error handler.  All runtime errors will be dispatched to the
72527676fe24be7444a174c15df476e49adc5335d03Jason Sams     * instance of RSAsyncError set here.  If this field is null a
72627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * RSRuntimeException will instead be thrown with details about the error.
72727676fe24be7444a174c15df476e49adc5335d03Jason Sams     * This will cause program termaination.
72827676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
72927676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
730bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    RSErrorHandler mErrorCallback = null;
731bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams
732bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setErrorHandler(RSErrorHandler msg) {
733bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        mErrorCallback = msg;
734bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
735bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public RSErrorHandler getErrorHandler() {
736bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        return mErrorCallback;
737bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    }
7381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
73927676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
74027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * RenderScript worker threads priority enumeration.  The default value is
74127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * NORMAL.  Applications wishing to do background processing such as
74227676fe24be7444a174c15df476e49adc5335d03Jason Sams     * wallpapers should set their priority to LOW to avoid starving forground
74327676fe24be7444a174c15df476e49adc5335d03Jason Sams     * processes.
74427676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
7457d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    public enum Priority {
746bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        // Remap these numbers to opaque...
7477d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        LOW (5),     //ANDROID_PRIORITY_BACKGROUND + 5
7487d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        NORMAL (-4);  //ANDROID_PRIORITY_DISPLAY
7497d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
7507d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        int mID;
7517d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        Priority(int id) {
7527d787b4722eaeb79cab42c36060336e092b77b5fJason Sams            mID = id;
7537d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        }
7547d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
7557d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
756771bebb94054d06f97284379c93a2620613513c3Jason Sams    void validate() {
757771bebb94054d06f97284379c93a2620613513c3Jason Sams        if (mContext == 0) {
758c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams            throw new RSInvalidStateException("Calling RS with no Context active.");
759771bebb94054d06f97284379c93a2620613513c3Jason Sams        }
760771bebb94054d06f97284379c93a2620613513c3Jason Sams    }
761771bebb94054d06f97284379c93a2620613513c3Jason Sams
76227676fe24be7444a174c15df476e49adc5335d03Jason Sams
76327676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
76427676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Change the priority of the worker threads for this context.
76527676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
76627676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @param p New priority to be set.
76727676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
768bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void setPriority(Priority p) {
7695dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
7707d787b4722eaeb79cab42c36060336e092b77b5fJason Sams        nContextSetPriority(p.mID);
7717d787b4722eaeb79cab42c36060336e092b77b5fJason Sams    }
7727d787b4722eaeb79cab42c36060336e092b77b5fJason Sams
773bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    static class MessageThread extends Thread {
774516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        RenderScript mRS;
775516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        boolean mRun = true;
776bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        int[] mAuxData = new int[2];
7771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
778bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_NONE = 0;
779bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1;
780bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2;
781bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_ERROR = 3;
782bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_MESSAGE_TO_CLIENT_USER = 4;
783516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
784bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        static final int RS_ERROR_FATAL_UNKNOWN = 0x1000;
785add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
786516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        MessageThread(RenderScript rs) {
787516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            super("RSMessageThread");
788516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            mRS = rs;
789516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
790516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
791516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
792516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        public void run() {
793516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // This function is a temporary solution.  The final solution will
794516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            // used typed allocations where the message id is the type indicator.
795516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            int[] rbuf = new int[16];
7962e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams            mRS.nContextInitToClient(mRS.mContext);
797516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            while(mRun) {
7981d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                rbuf[0] = 0;
799bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData, true);
800bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int size = mAuxData[1];
801bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams                int subID = mAuxData[0];
8021c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
8031c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_USER) {
8041c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if ((size>>2) >= rbuf.length) {
8051c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        rbuf = new int[(size + 3) >> 2];
8061c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
8071c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    mRS.nContextGetUserMessage(mRS.mContext, rbuf);
8081c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
8091c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mMessageCallback != null) {
8101c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mData = rbuf;
8111c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mID = subID;
8121c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.mLength = size;
8131c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mMessageCallback.run();
8141d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams                    } else {
8151c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        throw new RSInvalidStateException("Received a message from the script with no message handler installed.");
816516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                    }
817ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines                    continue;
818516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
8191c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
8201c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                if (msg == RS_MESSAGE_TO_CLIENT_ERROR) {
8211c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    String e = mRS.nContextGetErrorMessage(mRS.mContext);
8221c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
823add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    if (subID >= RS_ERROR_FATAL_UNKNOWN) {
824add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                        throw new RSRuntimeException("Fatal error " + subID + ", details: " + e);
825add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams                    }
826add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams
8271c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    if(mRS.mErrorCallback != null) {
8281c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorMessage = e;
8291c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.mErrorNum = subID;
8301c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        mRS.mErrorCallback.run();
8311c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    } else {
8321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                        //throw new RSRuntimeException("Received error num " + subID + ", details: " + e);
8331c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    }
8341c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    continue;
8351c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                }
8361c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams
8371c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // 2: teardown.
8381c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // But we want to avoid starving other threads during
8391c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // teardown by yielding until the next line in the destructor
8401c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                // can execute to set mRun = false
8411c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                try {
8421c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                    sleep(1, 0);
8431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams                } catch(InterruptedException e) {
844516c31911578db8ce53529483c3ded918ac7dc6bJason Sams                }
845516c31911578db8ce53529483c3ded918ac7dc6bJason Sams            }
8463bc47d438171dce294e816366d53bc9eca772c5bJason Sams            Log.d(LOG_TAG, "MessageThread exiting.");
847516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        }
848516c31911578db8ce53529483c3ded918ac7dc6bJason Sams    }
849516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
8506b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    RenderScript(Context ctx) {
8516b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        mApplicationContext = ctx.getApplicationContext();
85260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
85360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
85427676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
8556b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * Gets the application context associated with the RenderScript context.
85627676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
8576b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @return The application context.
8586b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     */
8596b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public final Context getApplicationContext() {
8606b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        return mApplicationContext;
8616b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    }
8626b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao
8636b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    /**
8646b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * Create a basic RenderScript context.
86527676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
8666b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao     * @param ctx The context.
86727676fe24be7444a174c15df476e49adc5335d03Jason Sams     * @return RenderScript
86827676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
8696b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao    public static RenderScript create(Context ctx) {
8706b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao        RenderScript rs = new RenderScript(ctx);
871704ff64b099406bb328898a7443921f22dbffd6dJason Sams
872704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mDev = rs.nDeviceCreate();
873704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mContext = rs.nContextCreate(rs.mDev, 0);
874704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread = new MessageThread(rs);
875704ff64b099406bb328898a7443921f22dbffd6dJason Sams        rs.mMessageThread.start();
876704ff64b099406bb328898a7443921f22dbffd6dJason Sams        return rs;
877efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams    }
878efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams
87927676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
88027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Print the currently available debugging information about the state of
88127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * the RS context to the log.
88227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
88327676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
884bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    public void contextDump() {
8855dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
886bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams        nContextDump(0);
887715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams    }
888715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams
88927676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
89027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Wait for any commands in the fifo between the java bindings and native to
89127676fe24be7444a174c15df476e49adc5335d03Jason Sams     * be processed.
89227676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
89327676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
89496ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    public void finish() {
89596ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams        nContextFinish();
89696ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams    }
89796ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams
89827676fe24be7444a174c15df476e49adc5335d03Jason Sams    /**
89927676fe24be7444a174c15df476e49adc5335d03Jason Sams     * Destroy this renderscript context.  Once this function is called its no
90027676fe24be7444a174c15df476e49adc5335d03Jason Sams     * longer legal to use this or any objects created by this context.
90127676fe24be7444a174c15df476e49adc5335d03Jason Sams     *
90227676fe24be7444a174c15df476e49adc5335d03Jason Sams     */
903f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    public void destroy() {
9045dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams        validate();
9052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDeinitToClient(mContext);
906516c31911578db8ce53529483c3ded918ac7dc6bJason Sams        mMessageThread.mRun = false;
907a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        try {
908a8bf9429b29743b3489817feb21bde2416acc465Jason Sams            mMessageThread.join();
909a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        } catch(InterruptedException e) {
910a8bf9429b29743b3489817feb21bde2416acc465Jason Sams        }
911516c31911578db8ce53529483c3ded918ac7dc6bJason Sams
9122e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams        nContextDestroy();
913f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mContext = 0;
914f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams
915f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        nDeviceDestroy(mDev);
916f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mDev = 0;
917f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    }
91802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
919a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    boolean isAlive() {
920a9e7a05b84470257637c97d65f6562aa832c66efJason Sams        return mContext != 0;
921a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    }
922a9e7a05b84470257637c97d65f6562aa832c66efJason Sams
923bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams    int safeID(BaseObj o) {
9246b9dec00afec359f091ed353f371f08ff150278aJason Sams        if(o != null) {
92506d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams            return o.getID();
926d8e4161f114331343b897cbacea927e7e60e7b17Jason Sams        }
9276b9dec00afec359f091ed353f371f08ff150278aJason Sams        return 0;
92860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
92960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich}
930