RenderScript.java revision 6b9dec00afec359f091ed353f371f08ff150278a
160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich/* 260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Copyright (C) 2008 The Android Open Source Project 360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * 460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Licensed under the Apache License, Version 2.0 (the "License"); 560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * you may not use this file except in compliance with the License. 660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * You may obtain a copy of the License at 760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * 860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * http://www.apache.org/licenses/LICENSE-2.0 960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * 1060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * Unless required by applicable law or agreed to in writing, software 1160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * distributed under the License is distributed on an "AS IS" BASIS, 1260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * See the License for the specific language governing permissions and 1460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * limitations under the License. 1560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich */ 1660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 1794d8e90ad78ee1dbc0efa315117688abd126ae55Jason Samspackage android.renderscript; 1860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 1943ee06857bb7f99446d1d84f8789016c5d105558Jason Samsimport java.lang.reflect.Field; 2036e612a488511940b61f09803b270aa1c61b68e0Jason Sams 21b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.Bitmap; 22650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guyimport android.graphics.BitmapFactory; 2336e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Config; 2436e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Log; 2536e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.view.Surface; 2643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich 2760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 28e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams/** 29e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams * @hide 30e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams * 31e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams **/ 3260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichpublic class RenderScript { 33f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams static final String LOG_TAG = "libRS_jni"; 3460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich private static final boolean DEBUG = false; 35650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy @SuppressWarnings({"UnusedDeclaration", "deprecation"}) 3660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV; 3760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 3860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 3960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 4002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams /* 4160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * We use a class initializer to allow the native code to cache some 4260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * field offsets. 4360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich */ 44650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) 4560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich private static boolean sInitialized; 4660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich native private static void _nInit(); 4760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 48dba3ba5b5bf6026abceced921b1b0d231b0faefdJason Sams 4960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich static { 5060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich sInitialized = false; 5160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich try { 52e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams System.loadLibrary("rs_jni"); 5360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich _nInit(); 5460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich sInitialized = true; 5560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } catch (UnsatisfiedLinkError e) { 5660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich Log.d(LOG_TAG, "RenderScript JNI library not found!"); 5760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 5860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 5960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 60ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams native void nInitElements(int a8, int rgba4444, int rgba8888, int rgb565); 61ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams 6236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nDeviceCreate(); 6336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nDeviceDestroy(int dev); 64ebfb436a49673693b98469683451bd9ede797557Jason Sams native void nDeviceSetConfig(int dev, int param, int value); 65b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams native int nContextCreate(int dev, Surface sur, int ver, boolean useDepth); 6636e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextDestroy(int con); 6760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 6836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindRootScript(int script); 6936e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindSampler(int sampler, int slot); 7036e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindProgramFragmentStore(int pfs); 7136e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindProgramFragment(int pf); 7236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindProgramVertex(int pf); 73ebfb436a49673693b98469683451bd9ede797557Jason Sams native void nContextBindProgramRaster(int pr); 74d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato native void nContextAddDefineI32(String name, int value); 75d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato native void nContextAddDefineF(String name, float value); 7636e612a488511940b61f09803b270aa1c61b68e0Jason Sams 7736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAssignName(int obj, byte[] name); 787ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams native void nObjDestroy(int id); 79730ee65d4ddb307898053b623120bad1655fadadJason Sams native void nObjDestroyOOB(int id); 8036e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nFileOpen(byte[] name); 8136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 8236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nElementBegin(); 83768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams native void nElementAdd(int kind, int type, boolean norm, int bits, String s); 8436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nElementCreate(); 8536e612a488511940b61f09803b270aa1c61b68e0Jason Sams 8636e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nTypeBegin(int elementID); 8736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nTypeAdd(int dim, int val); 8836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nTypeCreate(); 8943ee06857bb7f99446d1d84f8789016c5d105558Jason Sams native void nTypeFinalDestroy(Type t); 9043ee06857bb7f99446d1d84f8789016c5d105558Jason Sams native void nTypeSetupFields(Type t, int[] types, int[] bits, Field[] IDs); 9136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 9236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nAllocationCreateTyped(int type); 9336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nAllocationCreateFromBitmap(int dstFmt, boolean genMips, Bitmap bmp); 9436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nAllocationCreateFromBitmapBoxed(int dstFmt, boolean genMips, Bitmap bmp); 95650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy native int nAllocationCreateFromAssetStream(int dstFmt, boolean genMips, int assetStream); 9636e612a488511940b61f09803b270aa1c61b68e0Jason Sams 9736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAllocationUploadToTexture(int alloc, int baseMioLevel); 9807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationUploadToBufferObject(int alloc); 99768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 10007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationSubData1D(int id, int off, int count, int[] d, int sizeBytes); 101768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams native void nAllocationSubData1D(int id, int off, int count, short[] d, int sizeBytes); 102768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams native void nAllocationSubData1D(int id, int off, int count, byte[] d, int sizeBytes); 10307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationSubData1D(int id, int off, int count, float[] d, int sizeBytes); 104768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 10507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, int[] d, int sizeBytes); 10607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, float[] d, int sizeBytes); 10740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native void nAllocationRead(int id, int[] d); 10840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native void nAllocationRead(int id, float[] d); 1092525a815220652b37e2e390fe8c62394a6d0e574Jason Sams native void nAllocationSubDataFromObject(int id, Type t, int offset, Object o); 1105f43fd289abbd5380b6068766daf721b555d0053Jason Sams native void nAllocationSubReadFromObject(int id, Type t, int offset, Object o); 11136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 11236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DBindAllocation(int ad, int alloc); 11336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DSetConstraint(int ad, int dim, int value); 11436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DData(int ad, int[] d); 11536e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DData(int ad, float[] d); 116bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter1DSubData(int ad, int off, int count, int[] d); 11736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DSubData(int ad, int off, int count, float[] d); 11836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nAdapter1DCreate(); 11936e612a488511940b61f09803b270aa1c61b68e0Jason Sams 120bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DBindAllocation(int ad, int alloc); 121bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DSetConstraint(int ad, int dim, int value); 122bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DData(int ad, int[] d); 123bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DData(int ad, float[] d); 124bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DSubData(int ad, int xoff, int yoff, int w, int h, int[] d); 125bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DSubData(int ad, int xoff, int yoff, int w, int h, float[] d); 126bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native int nAdapter2DCreate(); 127bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 12822534176fb5c1257130ef4ee589739ca42766a32Jason Sams native void nScriptBindAllocation(int script, int alloc, int slot); 12922534176fb5c1257130ef4ee589739ca42766a32Jason Sams native void nScriptSetClearColor(int script, float r, float g, float b, float a); 13022534176fb5c1257130ef4ee589739ca42766a32Jason Sams native void nScriptSetClearDepth(int script, float depth); 13122534176fb5c1257130ef4ee589739ca42766a32Jason Sams native void nScriptSetClearStencil(int script, int stencil); 13222534176fb5c1257130ef4ee589739ca42766a32Jason Sams native void nScriptSetTimeZone(int script, byte[] timeZone); 133334ea0c98f051b5a6b85bc616c93304651854298Jason Sams native void nScriptSetType(int type, boolean writable, String name, int slot); 134fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams native void nScriptSetRoot(boolean isRoot); 135be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams native void nScriptSetInvokable(String name, int slot); 136be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams native void nScriptInvoke(int id, int slot); 13722534176fb5c1257130ef4ee589739ca42766a32Jason Sams 13836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nScriptCBegin(); 13936e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nScriptCSetScript(byte[] script, int offset, int length); 14036e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nScriptCCreate(); 141d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato native void nScriptCAddDefineI32(String name, int value); 142d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato native void nScriptCAddDefineF(String name, float value); 14336e612a488511940b61f09803b270aa1c61b68e0Jason Sams 14436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nSamplerBegin(); 14536e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nSamplerSet(int param, int value); 14636e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nSamplerCreate(); 14736e612a488511940b61f09803b270aa1c61b68e0Jason Sams 14836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentStoreBegin(int in, int out); 14936e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentStoreDepthFunc(int func); 15036e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentStoreDepthMask(boolean enable); 15136e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentStoreColorMask(boolean r, boolean g, boolean b, boolean a); 15236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentStoreBlendFunc(int src, int dst); 15336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentStoreDither(boolean enable); 15436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nProgramFragmentStoreCreate(); 15536e612a488511940b61f09803b270aa1c61b68e0Jason Sams 156ebfb436a49673693b98469683451bd9ede797557Jason Sams native int nProgramRasterCreate(int in, int out, boolean pointSmooth, boolean lineSmooth, boolean pointSprite); 157ebfb436a49673693b98469683451bd9ede797557Jason Sams native void nProgramRasterSetLineWidth(int pr, float v); 158ebfb436a49673693b98469683451bd9ede797557Jason Sams native void nProgramRasterSetPointSize(int pr, float v); 159ebfb436a49673693b98469683451bd9ede797557Jason Sams 16025ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams native void nProgramFragmentBegin(int in, int out, boolean pointSpriteEnable); 16136e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentBindTexture(int vpf, int slot, int a); 16236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentBindSampler(int vpf, int slot, int s); 16325ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams native void nProgramFragmentSetSlot(int slot, boolean enable, int env, int vt); 16436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nProgramFragmentCreate(); 16536e612a488511940b61f09803b270aa1c61b68e0Jason Sams 1669bee51c42eb8c3daffe7d6fa483edbb1689b94d2Jason Sams native void nProgramVertexBindAllocation(int pv, int mID); 16736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramVertexBegin(int inID, int outID); 16836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramVertexSetTextureMatrixEnable(boolean enable); 16936e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramVertexAddLight(int id); 17036e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nProgramVertexCreate(); 17136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 17236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightBegin(); 17336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightSetIsMono(boolean isMono); 17436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightSetIsLocal(boolean isLocal); 17536e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nLightCreate(); 17636e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightSetColor(int l, float r, float g, float b); 17736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightSetPosition(int l, float x, float y, float z); 178bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams 1791bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams native int nSimpleMeshCreate(int batchID, int idxID, int[] vtxID, int prim); 1801bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams native void nSimpleMeshBindVertex(int id, int alloc, int slot); 1811bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams native void nSimpleMeshBindIndex(int id, int alloc); 1821bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams 18340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native void nAnimationBegin(int attribCount, int keyframeCount); 18440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native void nAnimationAdd(float time, float[] attribs); 18540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native int nAnimationCreate(); 18660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 18760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich private int mDev; 18860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich private int mContext; 189650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy @SuppressWarnings({"FieldCanBeLocal"}) 19060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich private Surface mSurface; 19160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 19236e612a488511940b61f09803b270aa1c61b68e0Jason Sams private static boolean mElementsInitialized = false; 19360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 19460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich /////////////////////////////////////////////////////////////////////////////////// 19543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich // 19660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 197ebfb436a49673693b98469683451bd9ede797557Jason Sams public RenderScript(Surface sur, boolean useDepth, boolean forceSW) { 19860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich mSurface = sur; 19960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich mDev = nDeviceCreate(); 200ebfb436a49673693b98469683451bd9ede797557Jason Sams if(forceSW) { 201ebfb436a49673693b98469683451bd9ede797557Jason Sams nDeviceSetConfig(mDev, 0, 1); 202ebfb436a49673693b98469683451bd9ede797557Jason Sams } 203b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams mContext = nContextCreate(mDev, mSurface, 0, useDepth); 20460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 20536e612a488511940b61f09803b270aa1c61b68e0Jason Sams // TODO: This should be protected by a lock 20636e612a488511940b61f09803b270aa1c61b68e0Jason Sams if(!mElementsInitialized) { 207ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams Element.initPredefined(this); 20836e612a488511940b61f09803b270aa1c61b68e0Jason Sams mElementsInitialized = true; 20960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 21060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 21160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 212f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams public void destroy() { 213f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams nContextDestroy(mContext); 214f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams mContext = 0; 215f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams 216f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams nDeviceDestroy(mDev); 217f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams mDev = 0; 218f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams } 21902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 22060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich ////////////////////////////////////////////////////////////////////////////////// 22164676f3c21a07d650069315572811570cbf8f728Jason Sams // File 22264676f3c21a07d650069315572811570cbf8f728Jason Sams 22364676f3c21a07d650069315572811570cbf8f728Jason Sams public class File extends BaseObj { 22464676f3c21a07d650069315572811570cbf8f728Jason Sams File(int id) { 22536e612a488511940b61f09803b270aa1c61b68e0Jason Sams super(RenderScript.this); 22664676f3c21a07d650069315572811570cbf8f728Jason Sams mID = id; 22764676f3c21a07d650069315572811570cbf8f728Jason Sams } 22864676f3c21a07d650069315572811570cbf8f728Jason Sams } 22964676f3c21a07d650069315572811570cbf8f728Jason Sams 23064676f3c21a07d650069315572811570cbf8f728Jason Sams public File fileOpen(String s) throws IllegalStateException, IllegalArgumentException 23164676f3c21a07d650069315572811570cbf8f728Jason Sams { 23264676f3c21a07d650069315572811570cbf8f728Jason Sams if(s.length() < 1) { 23364676f3c21a07d650069315572811570cbf8f728Jason Sams throw new IllegalArgumentException("fileOpen does not accept a zero length string."); 23464676f3c21a07d650069315572811570cbf8f728Jason Sams } 23564676f3c21a07d650069315572811570cbf8f728Jason Sams 23664676f3c21a07d650069315572811570cbf8f728Jason Sams try { 23764676f3c21a07d650069315572811570cbf8f728Jason Sams byte[] bytes = s.getBytes("UTF-8"); 23864676f3c21a07d650069315572811570cbf8f728Jason Sams int id = nFileOpen(bytes); 23964676f3c21a07d650069315572811570cbf8f728Jason Sams return new File(id); 24064676f3c21a07d650069315572811570cbf8f728Jason Sams } catch (java.io.UnsupportedEncodingException e) { 24164676f3c21a07d650069315572811570cbf8f728Jason Sams throw new RuntimeException(e); 24264676f3c21a07d650069315572811570cbf8f728Jason Sams } 24364676f3c21a07d650069315572811570cbf8f728Jason Sams } 24464676f3c21a07d650069315572811570cbf8f728Jason Sams 24564676f3c21a07d650069315572811570cbf8f728Jason Sams 24660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich /////////////////////////////////////////////////////////////////////////////////// 24760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich // Root state 24860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 2496b9dec00afec359f091ed353f371f08ff150278aJason Sams private int safeID(BaseObj o) { 2506b9dec00afec359f091ed353f371f08ff150278aJason Sams if(o != null) { 2516b9dec00afec359f091ed353f371f08ff150278aJason Sams return o.mID; 252d8e4161f114331343b897cbacea927e7e60e7b17Jason Sams } 2536b9dec00afec359f091ed353f371f08ff150278aJason Sams return 0; 25460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 25560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 2566b9dec00afec359f091ed353f371f08ff150278aJason Sams public void contextBindRootScript(Script s) { 2576b9dec00afec359f091ed353f371f08ff150278aJason Sams nContextBindRootScript(safeID(s)); 2586b9dec00afec359f091ed353f371f08ff150278aJason Sams } 25960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 2606b9dec00afec359f091ed353f371f08ff150278aJason Sams public void contextBindProgramFragmentStore(ProgramStore p) { 2616b9dec00afec359f091ed353f371f08ff150278aJason Sams nContextBindProgramFragmentStore(safeID(p)); 26260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 26360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 2646b9dec00afec359f091ed353f371f08ff150278aJason Sams public void contextBindProgramFragment(ProgramFragment p) { 2656b9dec00afec359f091ed353f371f08ff150278aJason Sams nContextBindProgramFragment(safeID(p)); 26660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 26760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 2686b9dec00afec359f091ed353f371f08ff150278aJason Sams public void contextBindProgramRaster(ProgramRaster p) { 2696b9dec00afec359f091ed353f371f08ff150278aJason Sams nContextBindProgramRaster(safeID(p)); 270ebfb436a49673693b98469683451bd9ede797557Jason Sams } 271ebfb436a49673693b98469683451bd9ede797557Jason Sams 2726b9dec00afec359f091ed353f371f08ff150278aJason Sams public void contextBindProgramVertex(ProgramVertex p) { 2736b9dec00afec359f091ed353f371f08ff150278aJason Sams nContextBindProgramVertex(safeID(p)); 2740826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams } 2750826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams 27660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich} 27760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 27836e612a488511940b61f09803b270aa1c61b68e0Jason Sams 279