RenderScript.java revision 0011bcf57ff711a221a3a4c73f2a79125111647d
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 { 333bc47d438171dce294e816366d53bc9eca772c5bJason Sams static final String LOG_TAG = "RenderScript_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; 373bc47d438171dce294e816366d53bc9eca772c5bJason Sams int mWidth; 383bc47d438171dce294e816366d53bc9eca772c5bJason Sams int mHeight; 3960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 4060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 4160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 4202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams /* 4360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * We use a class initializer to allow the native code to cache some 4460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich * field offsets. 4560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich */ 46650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy @SuppressWarnings({"FieldCanBeLocal", "UnusedDeclaration"}) 4760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich private static boolean sInitialized; 4860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich native private static void _nInit(); 4960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 50dba3ba5b5bf6026abceced921b1b0d231b0faefdJason Sams 5160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich static { 5260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich sInitialized = false; 5360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich try { 54e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams System.loadLibrary("rs_jni"); 5560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich _nInit(); 5660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich sInitialized = true; 5760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } catch (UnsatisfiedLinkError e) { 5860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich Log.d(LOG_TAG, "RenderScript JNI library not found!"); 5960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 6060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 6160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 62ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams native void nInitElements(int a8, int rgba4444, int rgba8888, int rgb565); 63ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams 6436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nDeviceCreate(); 6536e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nDeviceDestroy(int dev); 66ebfb436a49673693b98469683451bd9ede797557Jason Sams native void nDeviceSetConfig(int dev, int param, int value); 673bc47d438171dce294e816366d53bc9eca772c5bJason Sams native int nContextCreate(int dev, int ver, boolean useDepth); 6836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextDestroy(int con); 693bc47d438171dce294e816366d53bc9eca772c5bJason Sams native void nContextSetSurface(int w, int h, Surface sur); 707d787b4722eaeb79cab42c36060336e092b77b5fJason Sams native void nContextSetPriority(int p); 71715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams native void nContextDump(int bits); 7260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 7336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindRootScript(int script); 7436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindSampler(int sampler, int slot); 7536e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindProgramFragmentStore(int pfs); 7636e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindProgramFragment(int pf); 7736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nContextBindProgramVertex(int pf); 78ebfb436a49673693b98469683451bd9ede797557Jason Sams native void nContextBindProgramRaster(int pr); 79d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato native void nContextAddDefineI32(String name, int value); 80d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato native void nContextAddDefineF(String name, float value); 8165e7aa56f56097418d617663683544c25b3988eaJason Sams native void nContextPause(); 8265e7aa56f56097418d617663683544c25b3988eaJason Sams native void nContextResume(); 83516c31911578db8ce53529483c3ded918ac7dc6bJason Sams native int nContextGetMessage(int[] data, boolean wait); 84516c31911578db8ce53529483c3ded918ac7dc6bJason Sams native void nContextInitToClient(); 85516c31911578db8ce53529483c3ded918ac7dc6bJason Sams native void nContextDeinitToClient(); 8636e612a488511940b61f09803b270aa1c61b68e0Jason Sams 8736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAssignName(int obj, byte[] name); 887ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams native void nObjDestroy(int id); 89730ee65d4ddb307898053b623120bad1655fadadJason Sams native void nObjDestroyOOB(int id); 9036e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nFileOpen(byte[] name); 9136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 9236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nElementBegin(); 93768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams native void nElementAdd(int kind, int type, boolean norm, int bits, String s); 9436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nElementCreate(); 9536e612a488511940b61f09803b270aa1c61b68e0Jason Sams 9636e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nTypeBegin(int elementID); 9736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nTypeAdd(int dim, int val); 9836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nTypeCreate(); 9943ee06857bb7f99446d1d84f8789016c5d105558Jason Sams native void nTypeFinalDestroy(Type t); 10043ee06857bb7f99446d1d84f8789016c5d105558Jason Sams native void nTypeSetupFields(Type t, int[] types, int[] bits, Field[] IDs); 10136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 10236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nAllocationCreateTyped(int type); 10336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nAllocationCreateFromBitmap(int dstFmt, boolean genMips, Bitmap bmp); 10436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nAllocationCreateFromBitmapBoxed(int dstFmt, boolean genMips, Bitmap bmp); 105650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy native int nAllocationCreateFromAssetStream(int dstFmt, boolean genMips, int assetStream); 10636e612a488511940b61f09803b270aa1c61b68e0Jason Sams 10736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAllocationUploadToTexture(int alloc, int baseMioLevel); 10807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationUploadToBufferObject(int alloc); 109768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 11007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationSubData1D(int id, int off, int count, int[] d, int sizeBytes); 111768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams native void nAllocationSubData1D(int id, int off, int count, short[] d, int sizeBytes); 112768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams native void nAllocationSubData1D(int id, int off, int count, byte[] d, int sizeBytes); 11307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationSubData1D(int id, int off, int count, float[] d, int sizeBytes); 114768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 11507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, int[] d, int sizeBytes); 11607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams native void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, float[] d, int sizeBytes); 11740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native void nAllocationRead(int id, int[] d); 11840a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native void nAllocationRead(int id, float[] d); 1192525a815220652b37e2e390fe8c62394a6d0e574Jason Sams native void nAllocationSubDataFromObject(int id, Type t, int offset, Object o); 1205f43fd289abbd5380b6068766daf721b555d0053Jason Sams native void nAllocationSubReadFromObject(int id, Type t, int offset, Object o); 12136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 12236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DBindAllocation(int ad, int alloc); 12336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DSetConstraint(int ad, int dim, int value); 12436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DData(int ad, int[] d); 12536e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DData(int ad, float[] d); 126bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter1DSubData(int ad, int off, int count, int[] d); 12736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nAdapter1DSubData(int ad, int off, int count, float[] d); 12836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nAdapter1DCreate(); 12936e612a488511940b61f09803b270aa1c61b68e0Jason Sams 130bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DBindAllocation(int ad, int alloc); 131bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DSetConstraint(int ad, int dim, int value); 132bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DData(int ad, int[] d); 133bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DData(int ad, float[] d); 134bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DSubData(int ad, int xoff, int yoff, int w, int h, int[] d); 135bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native void nAdapter2DSubData(int ad, int xoff, int yoff, int w, int h, float[] d); 136bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams native int nAdapter2DCreate(); 137bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams 13822534176fb5c1257130ef4ee589739ca42766a32Jason Sams native void nScriptBindAllocation(int script, int alloc, int slot); 13922534176fb5c1257130ef4ee589739ca42766a32Jason Sams native void nScriptSetClearColor(int script, float r, float g, float b, float a); 14022534176fb5c1257130ef4ee589739ca42766a32Jason Sams native void nScriptSetClearDepth(int script, float depth); 14122534176fb5c1257130ef4ee589739ca42766a32Jason Sams native void nScriptSetClearStencil(int script, int stencil); 14222534176fb5c1257130ef4ee589739ca42766a32Jason Sams native void nScriptSetTimeZone(int script, byte[] timeZone); 143334ea0c98f051b5a6b85bc616c93304651854298Jason Sams native void nScriptSetType(int type, boolean writable, String name, int slot); 144fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams native void nScriptSetRoot(boolean isRoot); 145be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams native void nScriptSetInvokable(String name, int slot); 146be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams native void nScriptInvoke(int id, int slot); 14722534176fb5c1257130ef4ee589739ca42766a32Jason Sams 14836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nScriptCBegin(); 14936e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nScriptCSetScript(byte[] script, int offset, int length); 15036e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nScriptCCreate(); 151d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato native void nScriptCAddDefineI32(String name, int value); 152d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato native void nScriptCAddDefineF(String name, float value); 15336e612a488511940b61f09803b270aa1c61b68e0Jason Sams 15436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nSamplerBegin(); 15536e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nSamplerSet(int param, int value); 15636e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nSamplerCreate(); 15736e612a488511940b61f09803b270aa1c61b68e0Jason Sams 15836e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentStoreBegin(int in, int out); 15936e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentStoreDepthFunc(int func); 16036e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentStoreDepthMask(boolean enable); 16136e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentStoreColorMask(boolean r, boolean g, boolean b, boolean a); 16236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentStoreBlendFunc(int src, int dst); 16336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentStoreDither(boolean enable); 16436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nProgramFragmentStoreCreate(); 16536e612a488511940b61f09803b270aa1c61b68e0Jason Sams 166ebfb436a49673693b98469683451bd9ede797557Jason Sams native int nProgramRasterCreate(int in, int out, boolean pointSmooth, boolean lineSmooth, boolean pointSprite); 167ebfb436a49673693b98469683451bd9ede797557Jason Sams native void nProgramRasterSetLineWidth(int pr, float v); 168ebfb436a49673693b98469683451bd9ede797557Jason Sams native void nProgramRasterSetPointSize(int pr, float v); 169ebfb436a49673693b98469683451bd9ede797557Jason Sams 1700011bcf57ff711a221a3a4c73f2a79125111647dJason Sams native void nProgramBindConstants(int pv, int slot, int mID); 1710011bcf57ff711a221a3a4c73f2a79125111647dJason Sams 17225ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams native void nProgramFragmentBegin(int in, int out, boolean pointSpriteEnable); 17336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentBindTexture(int vpf, int slot, int a); 17436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nProgramFragmentBindSampler(int vpf, int slot, int s); 17525ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams native void nProgramFragmentSetSlot(int slot, boolean enable, int env, int vt); 17654c0ec14e016e4a1bf3ceab40ed6ca5447da4725Jason Sams native void nProgramFragmentSetShader(String txt); 17736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nProgramFragmentCreate(); 17836e612a488511940b61f09803b270aa1c61b68e0Jason Sams 1790011bcf57ff711a221a3a4c73f2a79125111647dJason Sams native int nProgramVertexCreate(boolean texMat); 1800011bcf57ff711a221a3a4c73f2a79125111647dJason Sams native int nProgramVertexCreate2(String shader, int[] params); 18136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 18236e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightBegin(); 18336e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightSetIsMono(boolean isMono); 18436e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightSetIsLocal(boolean isLocal); 18536e612a488511940b61f09803b270aa1c61b68e0Jason Sams native int nLightCreate(); 18636e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightSetColor(int l, float r, float g, float b); 18736e612a488511940b61f09803b270aa1c61b68e0Jason Sams native void nLightSetPosition(int l, float x, float y, float z); 188bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams 1891bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams native int nSimpleMeshCreate(int batchID, int idxID, int[] vtxID, int prim); 1901bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams native void nSimpleMeshBindVertex(int id, int alloc, int slot); 1911bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams native void nSimpleMeshBindIndex(int id, int alloc); 1921bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams 19340a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native void nAnimationBegin(int attribCount, int keyframeCount); 19440a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native void nAnimationAdd(float time, float[] attribs); 19540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams native int nAnimationCreate(); 19660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 19760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich private int mDev; 19860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich private int mContext; 199650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy @SuppressWarnings({"FieldCanBeLocal"}) 20060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich private Surface mSurface; 201516c31911578db8ce53529483c3ded918ac7dc6bJason Sams private MessageThread mMessageThread; 20260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 2033c0dfbab807a459622aeade4940daddf482dec66Jason Sams 2043c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_USER_U8; 2053c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_USER_I8; 2063c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_USER_U16; 2073c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_USER_I16; 2083c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_USER_U32; 2093c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_USER_I32; 2103c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_USER_FLOAT; 2113c0dfbab807a459622aeade4940daddf482dec66Jason Sams 2123c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_A_8; 2133c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGB_565; 2143c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGB_888; 2153c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGBA_5551; 2163c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGBA_4444; 2173c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_RGBA_8888; 2183c0dfbab807a459622aeade4940daddf482dec66Jason Sams 2193c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_INDEX_16; 2203c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_XY_F32; 2213c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element mElement_XYZ_F32; 22260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 2237d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 22460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich /////////////////////////////////////////////////////////////////////////////////// 22543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich // 22660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 227516c31911578db8ce53529483c3ded918ac7dc6bJason Sams public static class RSMessage implements Runnable { 228516c31911578db8ce53529483c3ded918ac7dc6bJason Sams protected int[] mData; 229516c31911578db8ce53529483c3ded918ac7dc6bJason Sams protected int mID; 230516c31911578db8ce53529483c3ded918ac7dc6bJason Sams public void run() { 231516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 232516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 233516c31911578db8ce53529483c3ded918ac7dc6bJason Sams public RSMessage mMessageCallback = null; 234516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 2357d787b4722eaeb79cab42c36060336e092b77b5fJason Sams public enum Priority { 2367d787b4722eaeb79cab42c36060336e092b77b5fJason Sams LOW (5), //ANDROID_PRIORITY_BACKGROUND + 5 2377d787b4722eaeb79cab42c36060336e092b77b5fJason Sams NORMAL (-4); //ANDROID_PRIORITY_DISPLAY 2387d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 2397d787b4722eaeb79cab42c36060336e092b77b5fJason Sams int mID; 2407d787b4722eaeb79cab42c36060336e092b77b5fJason Sams Priority(int id) { 2417d787b4722eaeb79cab42c36060336e092b77b5fJason Sams mID = id; 2427d787b4722eaeb79cab42c36060336e092b77b5fJason Sams } 2437d787b4722eaeb79cab42c36060336e092b77b5fJason Sams } 2447d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 245771bebb94054d06f97284379c93a2620613513c3Jason Sams void validate() { 246771bebb94054d06f97284379c93a2620613513c3Jason Sams if (mContext == 0) { 247771bebb94054d06f97284379c93a2620613513c3Jason Sams throw new IllegalStateException("Calling RS with no Context active."); 248771bebb94054d06f97284379c93a2620613513c3Jason Sams } 249771bebb94054d06f97284379c93a2620613513c3Jason Sams } 250771bebb94054d06f97284379c93a2620613513c3Jason Sams 251771bebb94054d06f97284379c93a2620613513c3Jason Sams void validateSurface() { 25211fbdf50206abc9d21fd72ce7536648f083b9148Jason Sams //if (mSurface == null) { 25311fbdf50206abc9d21fd72ce7536648f083b9148Jason Sams //throw new IllegalStateException("Uploading data to GL with no surface."); 25411fbdf50206abc9d21fd72ce7536648f083b9148Jason Sams //} 255771bebb94054d06f97284379c93a2620613513c3Jason Sams } 256771bebb94054d06f97284379c93a2620613513c3Jason Sams 2577d787b4722eaeb79cab42c36060336e092b77b5fJason Sams public void contextSetPriority(Priority p) { 2587d787b4722eaeb79cab42c36060336e092b77b5fJason Sams nContextSetPriority(p.mID); 2597d787b4722eaeb79cab42c36060336e092b77b5fJason Sams } 2607d787b4722eaeb79cab42c36060336e092b77b5fJason Sams 261516c31911578db8ce53529483c3ded918ac7dc6bJason Sams private static class MessageThread extends Thread { 262516c31911578db8ce53529483c3ded918ac7dc6bJason Sams RenderScript mRS; 263516c31911578db8ce53529483c3ded918ac7dc6bJason Sams boolean mRun = true; 264516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 265516c31911578db8ce53529483c3ded918ac7dc6bJason Sams MessageThread(RenderScript rs) { 266516c31911578db8ce53529483c3ded918ac7dc6bJason Sams super("RSMessageThread"); 267516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mRS = rs; 268516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 269516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 270516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 271516c31911578db8ce53529483c3ded918ac7dc6bJason Sams public void run() { 272516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // This function is a temporary solution. The final solution will 273516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // used typed allocations where the message id is the type indicator. 274516c31911578db8ce53529483c3ded918ac7dc6bJason Sams int[] rbuf = new int[16]; 275516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mRS.nContextInitToClient(); 276516c31911578db8ce53529483c3ded918ac7dc6bJason Sams while(mRun) { 277516c31911578db8ce53529483c3ded918ac7dc6bJason Sams int msg = mRS.nContextGetMessage(rbuf, true); 278516c31911578db8ce53529483c3ded918ac7dc6bJason Sams if (msg == 0) { 279516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // Should only happen during teardown. 280516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // But we want to avoid starving other threads during 281516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // teardown by yielding until the next line in the destructor 282516c31911578db8ce53529483c3ded918ac7dc6bJason Sams // can execute to set mRun = false 283516c31911578db8ce53529483c3ded918ac7dc6bJason Sams try { 284516c31911578db8ce53529483c3ded918ac7dc6bJason Sams sleep(1, 0); 285516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } catch(InterruptedException e) { 286516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 287516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 288516c31911578db8ce53529483c3ded918ac7dc6bJason Sams if(mRS.mMessageCallback != null) { 289516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mRS.mMessageCallback.mData = rbuf; 290516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mRS.mMessageCallback.mID = msg; 291516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mRS.mMessageCallback.run(); 292516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 2933bc47d438171dce294e816366d53bc9eca772c5bJason Sams //Log.d(LOG_TAG, "MessageThread msg " + msg + " v1 " + rbuf[0] + " v2 " + rbuf[1] + " v3 " +rbuf[2]); 294516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 2953bc47d438171dce294e816366d53bc9eca772c5bJason Sams Log.d(LOG_TAG, "MessageThread exiting."); 296516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 297516c31911578db8ce53529483c3ded918ac7dc6bJason Sams } 298516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 2993bc47d438171dce294e816366d53bc9eca772c5bJason Sams public RenderScript(boolean useDepth, boolean forceSW) { 3003bc47d438171dce294e816366d53bc9eca772c5bJason Sams mSurface = null; 3013bc47d438171dce294e816366d53bc9eca772c5bJason Sams mWidth = 0; 3023bc47d438171dce294e816366d53bc9eca772c5bJason Sams mHeight = 0; 30360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich mDev = nDeviceCreate(); 304ebfb436a49673693b98469683451bd9ede797557Jason Sams if(forceSW) { 305ebfb436a49673693b98469683451bd9ede797557Jason Sams nDeviceSetConfig(mDev, 0, 1); 306ebfb436a49673693b98469683451bd9ede797557Jason Sams } 3073bc47d438171dce294e816366d53bc9eca772c5bJason Sams mContext = nContextCreate(mDev, 0, useDepth); 3083c0dfbab807a459622aeade4940daddf482dec66Jason Sams Element.initPredefined(this); 309516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mMessageThread = new MessageThread(this); 310516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mMessageThread.start(); 31160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 31260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 3133bc47d438171dce294e816366d53bc9eca772c5bJason Sams public void contextSetSurface(int w, int h, Surface sur) { 314efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams mSurface = sur; 3153bc47d438171dce294e816366d53bc9eca772c5bJason Sams mWidth = w; 3163bc47d438171dce294e816366d53bc9eca772c5bJason Sams mHeight = h; 3173bc47d438171dce294e816366d53bc9eca772c5bJason Sams nContextSetSurface(w, h, mSurface); 318efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams } 319efd9b6fb2e0f31b50db089352118e5daeb268879Jason Sams 320715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams public void contextDump(int bits) { 321715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams nContextDump(bits); 322715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams } 323715333b832fb448c32165c7d97d408a3fa43f7cbJason Sams 324f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams public void destroy() { 325516c31911578db8ce53529483c3ded918ac7dc6bJason Sams nContextDeinitToClient(); 326516c31911578db8ce53529483c3ded918ac7dc6bJason Sams mMessageThread.mRun = false; 327516c31911578db8ce53529483c3ded918ac7dc6bJason Sams 328f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams nContextDestroy(mContext); 329f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams mContext = 0; 330f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams 331f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams nDeviceDestroy(mDev); 332f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams mDev = 0; 333f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams } 33402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams 335a9e7a05b84470257637c97d65f6562aa832c66efJason Sams boolean isAlive() { 336a9e7a05b84470257637c97d65f6562aa832c66efJason Sams return mContext != 0; 337a9e7a05b84470257637c97d65f6562aa832c66efJason Sams } 338a9e7a05b84470257637c97d65f6562aa832c66efJason Sams 33965e7aa56f56097418d617663683544c25b3988eaJason Sams void pause() { 34065e7aa56f56097418d617663683544c25b3988eaJason Sams nContextPause(); 34165e7aa56f56097418d617663683544c25b3988eaJason Sams } 34265e7aa56f56097418d617663683544c25b3988eaJason Sams 34365e7aa56f56097418d617663683544c25b3988eaJason Sams void resume() { 34465e7aa56f56097418d617663683544c25b3988eaJason Sams nContextResume(); 34565e7aa56f56097418d617663683544c25b3988eaJason Sams } 34665e7aa56f56097418d617663683544c25b3988eaJason Sams 34760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich ////////////////////////////////////////////////////////////////////////////////// 34864676f3c21a07d650069315572811570cbf8f728Jason Sams // File 34964676f3c21a07d650069315572811570cbf8f728Jason Sams 35064676f3c21a07d650069315572811570cbf8f728Jason Sams public class File extends BaseObj { 35164676f3c21a07d650069315572811570cbf8f728Jason Sams File(int id) { 35236e612a488511940b61f09803b270aa1c61b68e0Jason Sams super(RenderScript.this); 35364676f3c21a07d650069315572811570cbf8f728Jason Sams mID = id; 35464676f3c21a07d650069315572811570cbf8f728Jason Sams } 35564676f3c21a07d650069315572811570cbf8f728Jason Sams } 35664676f3c21a07d650069315572811570cbf8f728Jason Sams 35764676f3c21a07d650069315572811570cbf8f728Jason Sams public File fileOpen(String s) throws IllegalStateException, IllegalArgumentException 35864676f3c21a07d650069315572811570cbf8f728Jason Sams { 35964676f3c21a07d650069315572811570cbf8f728Jason Sams if(s.length() < 1) { 36064676f3c21a07d650069315572811570cbf8f728Jason Sams throw new IllegalArgumentException("fileOpen does not accept a zero length string."); 36164676f3c21a07d650069315572811570cbf8f728Jason Sams } 36264676f3c21a07d650069315572811570cbf8f728Jason Sams 36364676f3c21a07d650069315572811570cbf8f728Jason Sams try { 36464676f3c21a07d650069315572811570cbf8f728Jason Sams byte[] bytes = s.getBytes("UTF-8"); 36564676f3c21a07d650069315572811570cbf8f728Jason Sams int id = nFileOpen(bytes); 36664676f3c21a07d650069315572811570cbf8f728Jason Sams return new File(id); 36764676f3c21a07d650069315572811570cbf8f728Jason Sams } catch (java.io.UnsupportedEncodingException e) { 36864676f3c21a07d650069315572811570cbf8f728Jason Sams throw new RuntimeException(e); 36964676f3c21a07d650069315572811570cbf8f728Jason Sams } 37064676f3c21a07d650069315572811570cbf8f728Jason Sams } 37164676f3c21a07d650069315572811570cbf8f728Jason Sams 37264676f3c21a07d650069315572811570cbf8f728Jason Sams 37360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich /////////////////////////////////////////////////////////////////////////////////// 37460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich // Root state 37560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 3766b9dec00afec359f091ed353f371f08ff150278aJason Sams private int safeID(BaseObj o) { 3776b9dec00afec359f091ed353f371f08ff150278aJason Sams if(o != null) { 3786b9dec00afec359f091ed353f371f08ff150278aJason Sams return o.mID; 379d8e4161f114331343b897cbacea927e7e60e7b17Jason Sams } 3806b9dec00afec359f091ed353f371f08ff150278aJason Sams return 0; 38160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 38260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 3836b9dec00afec359f091ed353f371f08ff150278aJason Sams public void contextBindRootScript(Script s) { 3846b9dec00afec359f091ed353f371f08ff150278aJason Sams nContextBindRootScript(safeID(s)); 3856b9dec00afec359f091ed353f371f08ff150278aJason Sams } 38660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 3876b9dec00afec359f091ed353f371f08ff150278aJason Sams public void contextBindProgramFragmentStore(ProgramStore p) { 3886b9dec00afec359f091ed353f371f08ff150278aJason Sams nContextBindProgramFragmentStore(safeID(p)); 38960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 39060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 3916b9dec00afec359f091ed353f371f08ff150278aJason Sams public void contextBindProgramFragment(ProgramFragment p) { 3926b9dec00afec359f091ed353f371f08ff150278aJason Sams nContextBindProgramFragment(safeID(p)); 39360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich } 39460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 3956b9dec00afec359f091ed353f371f08ff150278aJason Sams public void contextBindProgramRaster(ProgramRaster p) { 3966b9dec00afec359f091ed353f371f08ff150278aJason Sams nContextBindProgramRaster(safeID(p)); 397ebfb436a49673693b98469683451bd9ede797557Jason Sams } 398ebfb436a49673693b98469683451bd9ede797557Jason Sams 3996b9dec00afec359f091ed353f371f08ff150278aJason Sams public void contextBindProgramVertex(ProgramVertex p) { 4006b9dec00afec359f091ed353f371f08ff150278aJason Sams nContextBindProgramVertex(safeID(p)); 4010826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams } 4020826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams 40360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich} 40460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich 40536e612a488511940b61f09803b270aa1c61b68e0Jason Sams 406