RenderScript.java revision 3c0dfbab807a459622aeade4940daddf482dec66
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);
7665e7aa56f56097418d617663683544c25b3988eaJason Sams    native void nContextPause();
7765e7aa56f56097418d617663683544c25b3988eaJason Sams    native void nContextResume();
7836e612a488511940b61f09803b270aa1c61b68e0Jason Sams
7936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAssignName(int obj, byte[] name);
807ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams    native void nObjDestroy(int id);
81730ee65d4ddb307898053b623120bad1655fadadJason Sams    native void nObjDestroyOOB(int id);
8236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nFileOpen(byte[] name);
8336e612a488511940b61f09803b270aa1c61b68e0Jason Sams
8436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nElementBegin();
85768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    native void nElementAdd(int kind, int type, boolean norm, int bits, String s);
8636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nElementCreate();
8736e612a488511940b61f09803b270aa1c61b68e0Jason Sams
8836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTypeBegin(int elementID);
8936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTypeAdd(int dim, int val);
9036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nTypeCreate();
9143ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    native void nTypeFinalDestroy(Type t);
9243ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    native void nTypeSetupFields(Type t, int[] types, int[] bits, Field[] IDs);
9336e612a488511940b61f09803b270aa1c61b68e0Jason Sams
9436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nAllocationCreateTyped(int type);
9536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nAllocationCreateFromBitmap(int dstFmt, boolean genMips, Bitmap bmp);
9636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nAllocationCreateFromBitmapBoxed(int dstFmt, boolean genMips, Bitmap bmp);
97650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    native int  nAllocationCreateFromAssetStream(int dstFmt, boolean genMips, int assetStream);
9836e612a488511940b61f09803b270aa1c61b68e0Jason Sams
9936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAllocationUploadToTexture(int alloc, int baseMioLevel);
10007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    native void nAllocationUploadToBufferObject(int alloc);
101768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams
10207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    native void nAllocationSubData1D(int id, int off, int count, int[] d, int sizeBytes);
103768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    native void nAllocationSubData1D(int id, int off, int count, short[] d, int sizeBytes);
104768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    native void nAllocationSubData1D(int id, int off, int count, byte[] d, int sizeBytes);
10507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    native void nAllocationSubData1D(int id, int off, int count, float[] d, int sizeBytes);
106768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams
10707ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    native void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, int[] d, int sizeBytes);
10807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams    native void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, float[] d, int sizeBytes);
10940a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    native void nAllocationRead(int id, int[] d);
11040a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    native void nAllocationRead(int id, float[] d);
1112525a815220652b37e2e390fe8c62394a6d0e574Jason Sams    native void nAllocationSubDataFromObject(int id, Type t, int offset, Object o);
1125f43fd289abbd5380b6068766daf721b555d0053Jason Sams    native void nAllocationSubReadFromObject(int id, Type t, int offset, Object o);
11336e612a488511940b61f09803b270aa1c61b68e0Jason Sams
11436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAdapter1DBindAllocation(int ad, int alloc);
11536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAdapter1DSetConstraint(int ad, int dim, int value);
11636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAdapter1DData(int ad, int[] d);
11736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAdapter1DData(int ad, float[] d);
118bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    native void nAdapter1DSubData(int ad, int off, int count, int[] d);
11936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAdapter1DSubData(int ad, int off, int count, float[] d);
12036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nAdapter1DCreate();
12136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
122bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    native void nAdapter2DBindAllocation(int ad, int alloc);
123bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    native void nAdapter2DSetConstraint(int ad, int dim, int value);
124bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    native void nAdapter2DData(int ad, int[] d);
125bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    native void nAdapter2DData(int ad, float[] d);
126bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    native void nAdapter2DSubData(int ad, int xoff, int yoff, int w, int h, int[] d);
127bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    native void nAdapter2DSubData(int ad, int xoff, int yoff, int w, int h, float[] d);
128bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    native int  nAdapter2DCreate();
129bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams
13022534176fb5c1257130ef4ee589739ca42766a32Jason Sams    native void nScriptBindAllocation(int script, int alloc, int slot);
13122534176fb5c1257130ef4ee589739ca42766a32Jason Sams    native void nScriptSetClearColor(int script, float r, float g, float b, float a);
13222534176fb5c1257130ef4ee589739ca42766a32Jason Sams    native void nScriptSetClearDepth(int script, float depth);
13322534176fb5c1257130ef4ee589739ca42766a32Jason Sams    native void nScriptSetClearStencil(int script, int stencil);
13422534176fb5c1257130ef4ee589739ca42766a32Jason Sams    native void nScriptSetTimeZone(int script, byte[] timeZone);
135334ea0c98f051b5a6b85bc616c93304651854298Jason Sams    native void nScriptSetType(int type, boolean writable, String name, int slot);
136fbf0b9ecda03fbdbd4ebabfd18da09a789686249Jason Sams    native void nScriptSetRoot(boolean isRoot);
137be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams    native void nScriptSetInvokable(String name, int slot);
138be2e84193f709419634de4cc3ba0e67acf6976f3Jason Sams    native void nScriptInvoke(int id, int slot);
13922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
14036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCBegin();
14136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCSetScript(byte[] script, int offset, int length);
14236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nScriptCCreate();
143d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato    native void nScriptCAddDefineI32(String name, int value);
144d7b3774da62d3c70cc7e8cf549967a1c823501e6Joe Onorato    native void nScriptCAddDefineF(String name, float value);
14536e612a488511940b61f09803b270aa1c61b68e0Jason Sams
14636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nSamplerBegin();
14736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nSamplerSet(int param, int value);
14836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nSamplerCreate();
14936e612a488511940b61f09803b270aa1c61b68e0Jason Sams
15036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreBegin(int in, int out);
15136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreDepthFunc(int func);
15236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreDepthMask(boolean enable);
15336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreColorMask(boolean r, boolean g, boolean b, boolean a);
15436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreBlendFunc(int src, int dst);
15536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreDither(boolean enable);
15636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nProgramFragmentStoreCreate();
15736e612a488511940b61f09803b270aa1c61b68e0Jason Sams
158ebfb436a49673693b98469683451bd9ede797557Jason Sams    native int  nProgramRasterCreate(int in, int out, boolean pointSmooth, boolean lineSmooth, boolean pointSprite);
159ebfb436a49673693b98469683451bd9ede797557Jason Sams    native void nProgramRasterSetLineWidth(int pr, float v);
160ebfb436a49673693b98469683451bd9ede797557Jason Sams    native void nProgramRasterSetPointSize(int pr, float v);
161ebfb436a49673693b98469683451bd9ede797557Jason Sams
16225ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams    native void nProgramFragmentBegin(int in, int out, boolean pointSpriteEnable);
16336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentBindTexture(int vpf, int slot, int a);
16436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentBindSampler(int vpf, int slot, int s);
16525ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams    native void nProgramFragmentSetSlot(int slot, boolean enable, int env, int vt);
16636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nProgramFragmentCreate();
16736e612a488511940b61f09803b270aa1c61b68e0Jason Sams
1689bee51c42eb8c3daffe7d6fa483edbb1689b94d2Jason Sams    native void nProgramVertexBindAllocation(int pv, int mID);
16936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramVertexBegin(int inID, int outID);
17036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramVertexSetTextureMatrixEnable(boolean enable);
17136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramVertexAddLight(int id);
17236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nProgramVertexCreate();
17336e612a488511940b61f09803b270aa1c61b68e0Jason Sams
17436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nLightBegin();
17536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nLightSetIsMono(boolean isMono);
17636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nLightSetIsLocal(boolean isLocal);
17736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nLightCreate();
17836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nLightSetColor(int l, float r, float g, float b);
17936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nLightSetPosition(int l, float x, float y, float z);
180bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
1811bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams    native int  nSimpleMeshCreate(int batchID, int idxID, int[] vtxID, int prim);
1821bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams    native void nSimpleMeshBindVertex(int id, int alloc, int slot);
1831bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams    native void nSimpleMeshBindIndex(int id, int alloc);
1841bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams
18540a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    native void nAnimationBegin(int attribCount, int keyframeCount);
18640a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    native void nAnimationAdd(float time, float[] attribs);
18740a29e8e28772b37ab0f9fe9708ecdcba24abb84Jason Sams    native int  nAnimationCreate();
18860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
18960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private int     mDev;
19060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private int     mContext;
191650a3eb7d621dc8e81573142a4498bbd07bcde27Romain Guy    @SuppressWarnings({"FieldCanBeLocal"})
19260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private Surface mSurface;
19360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
1943c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1953c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_USER_U8;
1963c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_USER_I8;
1973c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_USER_U16;
1983c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_USER_I16;
1993c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_USER_U32;
2003c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_USER_I32;
2013c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_USER_FLOAT;
2023c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2033c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_A_8;
2043c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_565;
2053c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGB_888;
2063c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_5551;
2073c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_4444;
2083c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_RGBA_8888;
2093c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2103c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_INDEX_16;
2113c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_XY_F32;
2123c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element mElement_XYZ_F32;
21360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
21460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
21543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    //
21660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
217ebfb436a49673693b98469683451bd9ede797557Jason Sams    public RenderScript(Surface sur, boolean useDepth, boolean forceSW) {
21860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        mSurface = sur;
21960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        mDev = nDeviceCreate();
220ebfb436a49673693b98469683451bd9ede797557Jason Sams        if(forceSW) {
221ebfb436a49673693b98469683451bd9ede797557Jason Sams            nDeviceSetConfig(mDev, 0, 1);
222ebfb436a49673693b98469683451bd9ede797557Jason Sams        }
223b13ada5071f55c96054c47bbd88d8801cd2c0f15Jason Sams        mContext = nContextCreate(mDev, mSurface, 0, useDepth);
2243c0dfbab807a459622aeade4940daddf482dec66Jason Sams        Element.initPredefined(this);
22560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
22660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
227f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    public void destroy() {
228f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        nContextDestroy(mContext);
229f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mContext = 0;
230f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams
231f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        nDeviceDestroy(mDev);
232f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams        mDev = 0;
233f5b4596a383b6ab83f92edecfe054e80b555c2d0Jason Sams    }
23402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
235a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    boolean isAlive() {
236a9e7a05b84470257637c97d65f6562aa832c66efJason Sams        return mContext != 0;
237a9e7a05b84470257637c97d65f6562aa832c66efJason Sams    }
238a9e7a05b84470257637c97d65f6562aa832c66efJason Sams
23965e7aa56f56097418d617663683544c25b3988eaJason Sams    void pause() {
24065e7aa56f56097418d617663683544c25b3988eaJason Sams        nContextPause();
24165e7aa56f56097418d617663683544c25b3988eaJason Sams    }
24265e7aa56f56097418d617663683544c25b3988eaJason Sams
24365e7aa56f56097418d617663683544c25b3988eaJason Sams    void resume() {
24465e7aa56f56097418d617663683544c25b3988eaJason Sams        nContextResume();
24565e7aa56f56097418d617663683544c25b3988eaJason Sams    }
24665e7aa56f56097418d617663683544c25b3988eaJason Sams
24760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
24864676f3c21a07d650069315572811570cbf8f728Jason Sams    // File
24964676f3c21a07d650069315572811570cbf8f728Jason Sams
25064676f3c21a07d650069315572811570cbf8f728Jason Sams    public class File extends BaseObj {
25164676f3c21a07d650069315572811570cbf8f728Jason Sams        File(int id) {
25236e612a488511940b61f09803b270aa1c61b68e0Jason Sams            super(RenderScript.this);
25364676f3c21a07d650069315572811570cbf8f728Jason Sams            mID = id;
25464676f3c21a07d650069315572811570cbf8f728Jason Sams        }
25564676f3c21a07d650069315572811570cbf8f728Jason Sams    }
25664676f3c21a07d650069315572811570cbf8f728Jason Sams
25764676f3c21a07d650069315572811570cbf8f728Jason Sams    public File fileOpen(String s) throws IllegalStateException, IllegalArgumentException
25864676f3c21a07d650069315572811570cbf8f728Jason Sams    {
25964676f3c21a07d650069315572811570cbf8f728Jason Sams        if(s.length() < 1) {
26064676f3c21a07d650069315572811570cbf8f728Jason Sams            throw new IllegalArgumentException("fileOpen does not accept a zero length string.");
26164676f3c21a07d650069315572811570cbf8f728Jason Sams        }
26264676f3c21a07d650069315572811570cbf8f728Jason Sams
26364676f3c21a07d650069315572811570cbf8f728Jason Sams        try {
26464676f3c21a07d650069315572811570cbf8f728Jason Sams            byte[] bytes = s.getBytes("UTF-8");
26564676f3c21a07d650069315572811570cbf8f728Jason Sams            int id = nFileOpen(bytes);
26664676f3c21a07d650069315572811570cbf8f728Jason Sams            return new File(id);
26764676f3c21a07d650069315572811570cbf8f728Jason Sams        } catch (java.io.UnsupportedEncodingException e) {
26864676f3c21a07d650069315572811570cbf8f728Jason Sams            throw new RuntimeException(e);
26964676f3c21a07d650069315572811570cbf8f728Jason Sams        }
27064676f3c21a07d650069315572811570cbf8f728Jason Sams    }
27164676f3c21a07d650069315572811570cbf8f728Jason Sams
27264676f3c21a07d650069315572811570cbf8f728Jason Sams
27360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
27460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Root state
27560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
2766b9dec00afec359f091ed353f371f08ff150278aJason Sams    private int safeID(BaseObj o) {
2776b9dec00afec359f091ed353f371f08ff150278aJason Sams        if(o != null) {
2786b9dec00afec359f091ed353f371f08ff150278aJason Sams            return o.mID;
279d8e4161f114331343b897cbacea927e7e60e7b17Jason Sams        }
2806b9dec00afec359f091ed353f371f08ff150278aJason Sams        return 0;
28160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
28260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
2836b9dec00afec359f091ed353f371f08ff150278aJason Sams    public void contextBindRootScript(Script s) {
2846b9dec00afec359f091ed353f371f08ff150278aJason Sams        nContextBindRootScript(safeID(s));
2856b9dec00afec359f091ed353f371f08ff150278aJason Sams    }
28660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
2876b9dec00afec359f091ed353f371f08ff150278aJason Sams    public void contextBindProgramFragmentStore(ProgramStore p) {
2886b9dec00afec359f091ed353f371f08ff150278aJason Sams        nContextBindProgramFragmentStore(safeID(p));
28960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
29060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
2916b9dec00afec359f091ed353f371f08ff150278aJason Sams    public void contextBindProgramFragment(ProgramFragment p) {
2926b9dec00afec359f091ed353f371f08ff150278aJason Sams        nContextBindProgramFragment(safeID(p));
29360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
29460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
2956b9dec00afec359f091ed353f371f08ff150278aJason Sams    public void contextBindProgramRaster(ProgramRaster p) {
2966b9dec00afec359f091ed353f371f08ff150278aJason Sams        nContextBindProgramRaster(safeID(p));
297ebfb436a49673693b98469683451bd9ede797557Jason Sams    }
298ebfb436a49673693b98469683451bd9ede797557Jason Sams
2996b9dec00afec359f091ed353f371f08ff150278aJason Sams    public void contextBindProgramVertex(ProgramVertex p) {
3006b9dec00afec359f091ed353f371f08ff150278aJason Sams        nContextBindProgramVertex(safeID(p));
3010826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    }
3020826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
30360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich}
30460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
30536e612a488511940b61f09803b270aa1c61b68e0Jason Sams
306