RenderScript.java revision 260c77a4f741c3db76057cc4ea2ee54fe335ecf9
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; 25260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kastenimport android.os.Process; 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"}) 4343a17654cf4bfe7f1ec22bd8b7b32daccdf27c09Joe Onorato static final boolean LOG_ENABLED = false; 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); 72edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams native int nContextGetUserMessage(int con, int[] data); 731c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams native String nContextGetErrorMessage(int con); 74edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams native int nContextPeekMessage(int con, int[] subID); 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 } 4246e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams native void rsnScriptForEach(int con, int id, int slot, int ain, int aout, byte[] params); 4256e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams native void rsnScriptForEach(int con, int id, int slot, int ain, int aout); 4266e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams synchronized void nScriptForEach(int id, int slot, int ain, int aout, byte[] params) { 4276e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams validate(); 4286e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams if (params == null) { 4296e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams rsnScriptForEach(mContext, id, slot, ain, aout); 4306e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams } else { 4316e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams rsnScriptForEach(mContext, id, slot, ain, aout, params); 4326e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams } 4336e494d3ab606be8c06f8d4930fbec572bbfa15c2Jason Sams } 4342e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams native void rsnScriptInvokeV(int con, int id, int slot, byte[] params); 4352e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams synchronized void nScriptInvokeV(int id, int slot, byte[] params) { 436d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 4372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams rsnScriptInvokeV(mContext, id, slot, params); 4382e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 4392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams native void rsnScriptSetVarI(int con, int id, int slot, int val); 4402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams synchronized void nScriptSetVarI(int id, int slot, int val) { 441d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 4422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams rsnScriptSetVarI(mContext, id, slot, val); 4432e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 444031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines native void rsnScriptSetVarJ(int con, int id, int slot, long val); 445031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines synchronized void nScriptSetVarJ(int id, int slot, long val) { 446d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 447031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines rsnScriptSetVarJ(mContext, id, slot, val); 448031ec58cfc7a20927302a5300eba3f5fc1709b50Stephen Hines } 4492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams native void rsnScriptSetVarF(int con, int id, int slot, float val); 4502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams synchronized void nScriptSetVarF(int id, int slot, float val) { 451d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 4522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams rsnScriptSetVarF(mContext, id, slot, val); 4532e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 454ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines native void rsnScriptSetVarD(int con, int id, int slot, double val); 455ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines synchronized void nScriptSetVarD(int id, int slot, double val) { 456d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 457ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines rsnScriptSetVarD(mContext, id, slot, val); 458ca54ec302f5bddd1674ea1f36cd3b7c540b2fbcaStephen Hines } 4592e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams native void rsnScriptSetVarV(int con, int id, int slot, byte[] val); 4602e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams synchronized void nScriptSetVarV(int id, int slot, byte[] val) { 461d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 4622e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams rsnScriptSetVarV(mContext, id, slot, val); 4632e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 4646f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams native void rsnScriptSetVarObj(int con, int id, int slot, int val); 4656f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams synchronized void nScriptSetVarObj(int id, int slot, int val) { 466d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 4676f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams rsnScriptSetVarObj(mContext, id, slot, val); 4686f4cf0b8885403ead157ae00fd43cf1282331c23Jason Sams } 4692e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 470e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams native int rsnScriptCCreate(int con, String resName, String cacheDir, 471e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams byte[] script, int length); 472e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams synchronized int nScriptCCreate(String resName, String cacheDir, byte[] script, int length) { 473d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 474e4a06c5fc738bf219f2a495e12a637b2d0871651Jason Sams return rsnScriptCCreate(mContext, resName, cacheDir, script, length); 4752e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 4762e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 477a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk native int rsnSamplerCreate(int con, int magFilter, int minFilter, 478a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk int wrapS, int wrapT, int wrapR, float aniso); 479a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk synchronized int nSamplerCreate(int magFilter, int minFilter, 480a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk int wrapS, int wrapT, int wrapR, float aniso) { 481d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 482a89094aa3bc059c6e03b20b4c5b1ede4582f3da9Alex Sakhartchouk return rsnSamplerCreate(mContext, magFilter, minFilter, wrapS, wrapT, wrapR, aniso); 4832e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 4842e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 485331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams native int rsnProgramStoreCreate(int con, boolean r, boolean g, boolean b, boolean a, 486331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams boolean depthMask, boolean dither, 487331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams int srcMode, int dstMode, int depthFunc); 488331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams synchronized int nProgramStoreCreate(boolean r, boolean g, boolean b, boolean a, 489331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams boolean depthMask, boolean dither, 490331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams int srcMode, int dstMode, int depthFunc) { 491d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 492bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams return rsnProgramStoreCreate(mContext, r, g, b, a, depthMask, dither, srcMode, 493bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams dstMode, depthFunc); 4942e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 4952e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 496331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams native int rsnProgramRasterCreate(int con, boolean pointSmooth, boolean lineSmooth, 497331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams boolean pointSprite, float lineWidth, int cullMode); 498331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams synchronized int nProgramRasterCreate(boolean pointSmooth, boolean lineSmooth, 499331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams boolean pointSprite, float lineWidth, int cullMode) { 500d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 501bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams return rsnProgramRasterCreate(mContext, pointSmooth, lineSmooth, pointSprite, lineWidth, 502bd184c55850997a5c5e285357998dadbe95b7b5dJason Sams cullMode); 5032e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 5042e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 5052e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams native void rsnProgramBindConstants(int con, int pv, int slot, int mID); 5062e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams synchronized void nProgramBindConstants(int pv, int slot, int mID) { 507d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 5082e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams rsnProgramBindConstants(mContext, pv, slot, mID); 5092e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 5102e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams native void rsnProgramBindTexture(int con, int vpf, int slot, int a); 5112e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams synchronized void nProgramBindTexture(int vpf, int slot, int a) { 512d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 5132e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams rsnProgramBindTexture(mContext, vpf, slot, a); 5142e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 5152e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams native void rsnProgramBindSampler(int con, int vpf, int slot, int s); 5162e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams synchronized void nProgramBindSampler(int vpf, int slot, int s) { 517d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 5182e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams rsnProgramBindSampler(mContext, vpf, slot, s); 5192e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 520b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk native int rsnProgramFragmentCreate(int con, String shader, int[] params); 521b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk synchronized int nProgramFragmentCreate(String shader, int[] params) { 522d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 523b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk return rsnProgramFragmentCreate(mContext, shader, params); 5242e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 525b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk native int rsnProgramVertexCreate(int con, String shader, int[] params); 526b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk synchronized int nProgramVertexCreate(String shader, int[] params) { 527d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 528b89aaacb2ca9d062e0a17a32e3d4dbf3f6948a17Alex Sakhartchouk return rsnProgramVertexCreate(mContext, shader, params); 5292e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 5302e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 53125999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk native int rsnMeshCreate(int con, int[] vtx, int[] idx, int[] prim); 53225999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk synchronized int nMeshCreate(int[] vtx, int[] idx, int[] prim) { 533d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 53425999a08a6652ff5d7d0973f279f1e92e04b3506Alex Sakhartchouk return rsnMeshCreate(mContext, vtx, idx, prim); 5359d71e2180062931416092f26276a07e55b318f62Alex Sakhartchouk } 5362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams native int rsnMeshGetVertexBufferCount(int con, int id); 5372e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams synchronized int nMeshGetVertexBufferCount(int id) { 538d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 5392e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams return rsnMeshGetVertexBufferCount(mContext, id); 5402e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 5412e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams native int rsnMeshGetIndexCount(int con, int id); 5422e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams synchronized int nMeshGetIndexCount(int id) { 543d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 5442e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams return rsnMeshGetIndexCount(mContext, id); 5452e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 5462e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams native void rsnMeshGetVertices(int con, int id, int[] vtxIds, int vtxIdCount); 5472e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams synchronized void nMeshGetVertices(int id, int[] vtxIds, int vtxIdCount) { 548d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 5492e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams rsnMeshGetVertices(mContext, id, vtxIds, vtxIdCount); 5502e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 5512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams native void rsnMeshGetIndices(int con, int id, int[] idxIds, int[] primitives, int vtxIdCount); 5522e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams synchronized void nMeshGetIndices(int id, int[] idxIds, int[] primitives, int vtxIdCount) { 553d1ac98149737299513da1357e36f68cbb6d74425Jason Sams validate(); 5542e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams rsnMeshGetIndices(mContext, id, idxIds, primitives, vtxIdCount); 5552e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams } 5562e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams 55760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 558bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDev; 559bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mContext; 560650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy @SuppressWarnings({"FieldCanBeLocal"}) 561bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams MessageThread mMessageThread; 56260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 5638cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_U8; 5648cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_I8; 5658cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_U16; 5668cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_I16; 5678cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_U32; 5688cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_I32; 56952d836332f6aae74ed97fda1b53681f36710af64Stephen Hines Element mElement_U64; 570ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines Element mElement_I64; 5718cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_F32; 57202f41705199336f808ece50d81585450e7f8f61fStephen Hines Element mElement_F64; 573f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams Element mElement_BOOLEAN; 5748cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams 5758cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_ELEMENT; 5768cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_TYPE; 5778cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_ALLOCATION; 5788cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_SAMPLER; 5798cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_SCRIPT; 5808cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_MESH; 5818cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_PROGRAM_FRAGMENT; 5828cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_PROGRAM_VERTEX; 5838cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_PROGRAM_RASTER; 5848cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_PROGRAM_STORE; 585a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 5863c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_A_8; 5873c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGB_565; 5883c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGB_888; 5893c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGBA_5551; 5903c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGBA_4444; 5913c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGBA_8888; 5923c0dfbab807a459622aeade4940daddf482dec66Jason Sams 5938cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_FLOAT_2; 5948cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_FLOAT_3; 5958cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_FLOAT_4; 5968cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams Element mElement_UCHAR_4; 5977d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 5981d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams Element mElement_MATRIX_4X4; 5991d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams Element mElement_MATRIX_3X3; 6001d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams Element mElement_MATRIX_2X2; 6011d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams 6024d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Sampler mSampler_CLAMP_NEAREST; 6034d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Sampler mSampler_CLAMP_LINEAR; 6044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Sampler mSampler_CLAMP_LINEAR_MIP_LINEAR; 6054d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Sampler mSampler_WRAP_NEAREST; 6064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Sampler mSampler_WRAP_LINEAR; 6074d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Sampler mSampler_WRAP_LINEAR_MIP_LINEAR; 6084d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 609d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk ProgramStore mProgramStore_BLEND_NONE_DEPTH_TEST; 610d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk ProgramStore mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH; 611d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_TEST; 612d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk ProgramStore mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH; 613d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk 614d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk ProgramRaster mProgramRaster_CULL_BACK; 615d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk ProgramRaster mProgramRaster_CULL_FRONT; 616d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk ProgramRaster mProgramRaster_CULL_NONE; 61732e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk 61860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich /////////////////////////////////////////////////////////////////////////////////// 61943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich // 62060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 62127676fe24be7444a174c15df476e49adc5335d03Jason Sams /** 62227676fe24be7444a174c15df476e49adc5335d03Jason Sams * Base class application should derive from for handling RS messages 6238cecbb5293f73e3f63f2601dda68016762c58a0cStephen Hines * coming from their scripts. When a script calls sendToClient the data 62427676fe24be7444a174c15df476e49adc5335d03Jason Sams * fields will be filled in and then the run method called by a message 62527676fe24be7444a174c15df476e49adc5335d03Jason Sams * handling thread. This will occur some time after sendToClient completes 62627676fe24be7444a174c15df476e49adc5335d03Jason Sams * in the script. 62727676fe24be7444a174c15df476e49adc5335d03Jason Sams * 62827676fe24be7444a174c15df476e49adc5335d03Jason Sams */ 629bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public static class RSMessageHandler implements Runnable { 630516c31911578db8ce53529483c3ded918ac7dc6bJason Sams protected int[] mData; 631516c31911578db8ce53529483c3ded918ac7dc6bJason Sams protected int mID; 6321c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams protected int mLength; 633516c31911578db8ce53529483c3ded918ac7dc6bJason Sams public void run() { 634516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 635516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 63627676fe24be7444a174c15df476e49adc5335d03Jason Sams /** 63727676fe24be7444a174c15df476e49adc5335d03Jason Sams * If an application is expecting messages it should set this field to an 63827676fe24be7444a174c15df476e49adc5335d03Jason Sams * instance of RSMessage. This instance will receive all the user messages 63927676fe24be7444a174c15df476e49adc5335d03Jason Sams * sent from sendToClient by scripts from this context. 64027676fe24be7444a174c15df476e49adc5335d03Jason Sams * 64127676fe24be7444a174c15df476e49adc5335d03Jason Sams */ 642bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams RSMessageHandler mMessageCallback = null; 643bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 644bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public void setMessageHandler(RSMessageHandler msg) { 645bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mMessageCallback = msg; 646bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 647bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public RSMessageHandler getMessageHandler() { 648bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return mMessageCallback; 649bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 650516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 65127676fe24be7444a174c15df476e49adc5335d03Jason Sams /** 65227676fe24be7444a174c15df476e49adc5335d03Jason Sams * Runtime error base class. An application should derive from this class 65327676fe24be7444a174c15df476e49adc5335d03Jason Sams * if it wishes to install an error handler. When errors occur at runtime 65427676fe24be7444a174c15df476e49adc5335d03Jason Sams * the fields in this class will be filled and the run method called. 65527676fe24be7444a174c15df476e49adc5335d03Jason Sams * 65627676fe24be7444a174c15df476e49adc5335d03Jason Sams */ 657bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public static class RSErrorHandler implements Runnable { 6581c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams protected String mErrorMessage; 6591c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams protected int mErrorNum; 6601c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams public void run() { 6611c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } 6621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } 66327676fe24be7444a174c15df476e49adc5335d03Jason Sams 66427676fe24be7444a174c15df476e49adc5335d03Jason Sams /** 66527676fe24be7444a174c15df476e49adc5335d03Jason Sams * Application Error handler. All runtime errors will be dispatched to the 66627676fe24be7444a174c15df476e49adc5335d03Jason Sams * instance of RSAsyncError set here. If this field is null a 66727676fe24be7444a174c15df476e49adc5335d03Jason Sams * RSRuntimeException will instead be thrown with details about the error. 66827676fe24be7444a174c15df476e49adc5335d03Jason Sams * This will cause program termaination. 66927676fe24be7444a174c15df476e49adc5335d03Jason Sams * 67027676fe24be7444a174c15df476e49adc5335d03Jason Sams */ 671bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams RSErrorHandler mErrorCallback = null; 672bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 673bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public void setErrorHandler(RSErrorHandler msg) { 674bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mErrorCallback = msg; 675bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 676bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public RSErrorHandler getErrorHandler() { 677bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return mErrorCallback; 678bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 6791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 68027676fe24be7444a174c15df476e49adc5335d03Jason Sams /** 68127676fe24be7444a174c15df476e49adc5335d03Jason Sams * RenderScript worker threads priority enumeration. The default value is 68227676fe24be7444a174c15df476e49adc5335d03Jason Sams * NORMAL. Applications wishing to do background processing such as 68327676fe24be7444a174c15df476e49adc5335d03Jason Sams * wallpapers should set their priority to LOW to avoid starving forground 68427676fe24be7444a174c15df476e49adc5335d03Jason Sams * processes. 68527676fe24be7444a174c15df476e49adc5335d03Jason Sams */ 6867d787b4722eaeb79cab42c36060336e092b77b5fJason Sams public enum Priority { 687260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kasten LOW (Process.THREAD_PRIORITY_BACKGROUND + (5 * Process.THREAD_PRIORITY_LESS_FAVORABLE)), 688260c77a4f741c3db76057cc4ea2ee54fe335ecf9Glenn Kasten NORMAL (Process.THREAD_PRIORITY_DISPLAY); 6897d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 6907d787b4722eaeb79cab42c36060336e092b77b5fJason Sams int mID; 6917d787b4722eaeb79cab42c36060336e092b77b5fJason Sams Priority(int id) { 6927d787b4722eaeb79cab42c36060336e092b77b5fJason Sams mID = id; 6937d787b4722eaeb79cab42c36060336e092b77b5fJason Sams } 6947d787b4722eaeb79cab42c36060336e092b77b5fJason Sams } 6957d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 696771bebb94054d06f97284379c93a2620613513c3Jason Sams void validate() { 697771bebb94054d06f97284379c93a2620613513c3Jason Sams if (mContext == 0) { 698c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSInvalidStateException("Calling RS with no Context active."); 699771bebb94054d06f97284379c93a2620613513c3Jason Sams } 700771bebb94054d06f97284379c93a2620613513c3Jason Sams } 701771bebb94054d06f97284379c93a2620613513c3Jason Sams 70227676fe24be7444a174c15df476e49adc5335d03Jason Sams 70327676fe24be7444a174c15df476e49adc5335d03Jason Sams /** 70427676fe24be7444a174c15df476e49adc5335d03Jason Sams * Change the priority of the worker threads for this context. 70527676fe24be7444a174c15df476e49adc5335d03Jason Sams * 70627676fe24be7444a174c15df476e49adc5335d03Jason Sams * @param p New priority to be set. 70727676fe24be7444a174c15df476e49adc5335d03Jason Sams */ 708bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public void setPriority(Priority p) { 7095dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams validate(); 7107d787b4722eaeb79cab42c36060336e092b77b5fJason Sams nContextSetPriority(p.mID); 7117d787b4722eaeb79cab42c36060336e092b77b5fJason Sams } 7127d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 713bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams static class MessageThread extends Thread { 714516c31911578db8ce53529483c3ded918ac7dc6bJason Sams RenderScript mRS; 715516c31911578db8ce53529483c3ded918ac7dc6bJason Sams boolean mRun = true; 716bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int[] mAuxData = new int[2]; 7171c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 718bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams static final int RS_MESSAGE_TO_CLIENT_NONE = 0; 719bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams static final int RS_MESSAGE_TO_CLIENT_EXCEPTION = 1; 720bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams static final int RS_MESSAGE_TO_CLIENT_RESIZE = 2; 721bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams static final int RS_MESSAGE_TO_CLIENT_ERROR = 3; 722bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams static final int RS_MESSAGE_TO_CLIENT_USER = 4; 723516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 724bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams static final int RS_ERROR_FATAL_UNKNOWN = 0x1000; 725add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams 726516c31911578db8ce53529483c3ded918ac7dc6bJason Sams MessageThread(RenderScript rs) { 727516c31911578db8ce53529483c3ded918ac7dc6bJason Sams super("RSMessageThread"); 728516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mRS = rs; 729516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 730516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 731516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 732516c31911578db8ce53529483c3ded918ac7dc6bJason Sams public void run() { 733516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // This function is a temporary solution. The final solution will 734516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // used typed allocations where the message id is the type indicator. 735516c31911578db8ce53529483c3ded918ac7dc6bJason Sams int[] rbuf = new int[16]; 7362e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams mRS.nContextInitToClient(mRS.mContext); 737516c31911578db8ce53529483c3ded918ac7dc6bJason Sams while(mRun) { 7381d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams rbuf[0] = 0; 739edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams int msg = mRS.nContextPeekMessage(mRS.mContext, mAuxData); 740bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int size = mAuxData[1]; 741bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int subID = mAuxData[0]; 7421c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 7431c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams if (msg == RS_MESSAGE_TO_CLIENT_USER) { 7441c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams if ((size>>2) >= rbuf.length) { 7451c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams rbuf = new int[(size + 3) >> 2]; 7461c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } 747edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams if (mRS.nContextGetUserMessage(mRS.mContext, rbuf) != 748edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams RS_MESSAGE_TO_CLIENT_USER) { 749edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams throw new RSDriverException("Error processing message from Renderscript."); 750edbfabdb98a2974f973d6c042e6efd547dc02fc5Jason Sams } 7511c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 7521c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams if(mRS.mMessageCallback != null) { 7531c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams mRS.mMessageCallback.mData = rbuf; 7541c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams mRS.mMessageCallback.mID = subID; 7551c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams mRS.mMessageCallback.mLength = size; 7561c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams mRS.mMessageCallback.run(); 7571d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } else { 7581c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams throw new RSInvalidStateException("Received a message from the script with no message handler installed."); 759516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 760ab98bb6e8b95bef7415c1ad239be71f93322fbadStephen Hines continue; 761516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 7621c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 7631c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams if (msg == RS_MESSAGE_TO_CLIENT_ERROR) { 7641c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams String e = mRS.nContextGetErrorMessage(mRS.mContext); 7651c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 766add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams if (subID >= RS_ERROR_FATAL_UNKNOWN) { 767add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams throw new RSRuntimeException("Fatal error " + subID + ", details: " + e); 768add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams } 769add9d9633205f76cc34f04368b8482c2c369ba63Jason Sams 7701c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams if(mRS.mErrorCallback != null) { 7711c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams mRS.mErrorCallback.mErrorMessage = e; 7721c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams mRS.mErrorCallback.mErrorNum = subID; 7731c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams mRS.mErrorCallback.run(); 7741c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } else { 7751c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams //throw new RSRuntimeException("Received error num " + subID + ", details: " + e); 7761c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } 7771c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams continue; 7781c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } 7791c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams 7801c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams // 2: teardown. 7811c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams // But we want to avoid starving other threads during 7821c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams // teardown by yielding until the next line in the destructor 7831c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams // can execute to set mRun = false 7841c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams try { 7851c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams sleep(1, 0); 7861c41517124a90fcfdb95dc069fc492c6fcf1ff25Jason Sams } catch(InterruptedException e) { 787516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 788516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 7893bc47d438171dce294e816366d53bc9eca772c5bJason Sams Log.d(LOG_TAG, "MessageThread exiting."); 790516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 791516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 792516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 7936b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao RenderScript(Context ctx) { 7946b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao mApplicationContext = ctx.getApplicationContext(); 79560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 79660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 79727676fe24be7444a174c15df476e49adc5335d03Jason Sams /** 7986b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao * Gets the application context associated with the RenderScript context. 79927676fe24be7444a174c15df476e49adc5335d03Jason Sams * 8006b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao * @return The application context. 8016b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao */ 8026b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao public final Context getApplicationContext() { 8036b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao return mApplicationContext; 8046b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao } 8056b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao 8066b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao /** 8076b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao * Create a basic RenderScript context. 80827676fe24be7444a174c15df476e49adc5335d03Jason Sams * 8096b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao * @param ctx The context. 81027676fe24be7444a174c15df476e49adc5335d03Jason Sams * @return RenderScript 81127676fe24be7444a174c15df476e49adc5335d03Jason Sams */ 8126b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao public static RenderScript create(Context ctx) { 8136b32fab1dbfd8bc1cc176557fe0a7b2ebd4966bdShih-wei Liao RenderScript rs = new RenderScript(ctx); 814704ff64b099406bb328898a7443921f22dbffd6dJason Sams 815704ff64b099406bb328898a7443921f22dbffd6dJason Sams rs.mDev = rs.nDeviceCreate(); 816704ff64b099406bb328898a7443921f22dbffd6dJason Sams rs.mContext = rs.nContextCreate(rs.mDev, 0); 8172698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams if (rs.mContext == 0) { 8182698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams throw new RSDriverException("Failed to create RS context."); 8192698536b3ff60bfee85e47e4a8d4b25fdfdf4db5Jason Sams } 820704ff64b099406bb328898a7443921f22dbffd6dJason Sams rs.mMessageThread = new MessageThread(rs); 821704ff64b099406bb328898a7443921f22dbffd6dJason Sams rs.mMessageThread.start(); 822704ff64b099406bb328898a7443921f22dbffd6dJason Sams return rs; 823efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } 824efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 82527676fe24be7444a174c15df476e49adc5335d03Jason Sams /** 82627676fe24be7444a174c15df476e49adc5335d03Jason Sams * Print the currently available debugging information about the state of 82727676fe24be7444a174c15df476e49adc5335d03Jason Sams * the RS context to the log. 82827676fe24be7444a174c15df476e49adc5335d03Jason Sams * 82927676fe24be7444a174c15df476e49adc5335d03Jason Sams */ 830bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public void contextDump() { 8315dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams validate(); 832bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams nContextDump(0); 833715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams } 834715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams 83527676fe24be7444a174c15df476e49adc5335d03Jason Sams /** 83627676fe24be7444a174c15df476e49adc5335d03Jason Sams * Wait for any commands in the fifo between the java bindings and native to 83727676fe24be7444a174c15df476e49adc5335d03Jason Sams * be processed. 83827676fe24be7444a174c15df476e49adc5335d03Jason Sams * 83927676fe24be7444a174c15df476e49adc5335d03Jason Sams */ 84096ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams public void finish() { 84196ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams nContextFinish(); 84296ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams } 84396ed4cfa62dd09aafb3f9da01e047661b4fe3c95Jason Sams 84427676fe24be7444a174c15df476e49adc5335d03Jason Sams /** 84527676fe24be7444a174c15df476e49adc5335d03Jason Sams * Destroy this renderscript context. Once this function is called its no 84627676fe24be7444a174c15df476e49adc5335d03Jason Sams * longer legal to use this or any objects created by this context. 84727676fe24be7444a174c15df476e49adc5335d03Jason Sams * 84827676fe24be7444a174c15df476e49adc5335d03Jason Sams */ 849f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams public void destroy() { 8505dbfe93b3f15f3a837836d024958635fd8f9ad14Jason Sams validate(); 8512e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams nContextDeinitToClient(mContext); 852516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mMessageThread.mRun = false; 853a8bf9429b29743b3489817feb21bde2416acc465Jason Sams try { 854a8bf9429b29743b3489817feb21bde2416acc465Jason Sams mMessageThread.join(); 855a8bf9429b29743b3489817feb21bde2416acc465Jason Sams } catch(InterruptedException e) { 856a8bf9429b29743b3489817feb21bde2416acc465Jason Sams } 857516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 8582e1872fe07cf8952812a417985e6e1f61bdeab5dJason Sams nContextDestroy(); 859f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams mContext = 0; 860f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams 861f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams nDeviceDestroy(mDev); 862f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams mDev = 0; 863f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams } 86402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 865a9e7a05b84470257637c97d65f6562aa832c66efJason Sams boolean isAlive() { 866a9e7a05b84470257637c97d65f6562aa832c66efJason Sams return mContext != 0; 867a9e7a05b84470257637c97d65f6562aa832c66efJason Sams } 868a9e7a05b84470257637c97d65f6562aa832c66efJason Sams 869bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int safeID(BaseObj o) { 8706b9dec00afec359f091ed353f371f08ff150278aJason Sams if(o != null) { 87106d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams return o.getID(); 872d8e4161f114331343b897cbacea927e7e60e7b17Jason Sams } 8736b9dec00afec359f091ed353f371f08ff150278aJason Sams return 0; 87460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 87560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich} 876