RenderScript.java revision 1bada8cd6e4f340de93cff4a2439835fc3b1456c
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
1943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichimport java.io.IOException;
2036e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport java.io.InputStream;
2136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
2236e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.content.res.Resources;
23b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samsimport android.graphics.Bitmap;
2436e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Config;
2536e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.util.Log;
2636e612a488511940b61f09803b270aa1c61b68e0Jason Samsimport android.view.Surface;
2743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
2860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
29e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams/**
30e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams * @hide
31e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams *
32e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams **/
3360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichpublic class RenderScript {
34f29ca50d80e3dc379de1642e85b7963175b2ca38Jason Sams    static final String LOG_TAG = "libRS_jni";
3560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private static final boolean DEBUG  = false;
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     */
4460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private static boolean sInitialized;
4560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private static void _nInit();
4660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
47dba3ba5b5bf6026abceced921b1b0d231b0faefdJason Sams
4860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    static {
4960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        sInitialized = false;
5060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        try {
51e29d471e5ca9781d8772d445ec7832e94856fd14Jason Sams            System.loadLibrary("rs_jni");
5260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            _nInit();
5360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            sInitialized = true;
5460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        } catch (UnsatisfiedLinkError e) {
5560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            Log.d(LOG_TAG, "RenderScript JNI library not found!");
5660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
5760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
5860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
5936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nDeviceCreate();
6036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nDeviceDestroy(int dev);
6136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nContextCreate(int dev, Surface sur, int ver);
6236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nContextDestroy(int con);
6360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
6460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //void rsContextBindSampler (uint32_t slot, RsSampler sampler);
6560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //void rsContextBindRootScript (RsScript sampler);
6636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nContextBindRootScript(int script);
6736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nContextBindSampler(int sampler, int slot);
6836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nContextBindProgramFragmentStore(int pfs);
6936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nContextBindProgramFragment(int pf);
7036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nContextBindProgramVertex(int pf);
7136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
7236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAssignName(int obj, byte[] name);
7336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nFileOpen(byte[] name);
7436e612a488511940b61f09803b270aa1c61b68e0Jason Sams
7536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nElementBegin();
7636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nElementAddPredefined(int predef);
7736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nElementAdd(int kind, int type, int norm, int bits);
7836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nElementCreate();
7936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nElementGetPredefined(int predef);
8036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nElementDestroy(int obj);
8136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
8236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTypeBegin(int elementID);
8336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTypeAdd(int dim, int val);
8436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nTypeCreate();
8536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTypeDestroy(int id);
8636e612a488511940b61f09803b270aa1c61b68e0Jason Sams
8736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nAllocationCreateTyped(int type);
8836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nAllocationCreatePredefSized(int predef, int count);
8936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nAllocationCreateSized(int elem, int count);
9036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nAllocationCreateFromBitmap(int dstFmt, boolean genMips, Bitmap bmp);
9136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nAllocationCreateFromBitmapBoxed(int dstFmt, boolean genMips, Bitmap bmp);
9236e612a488511940b61f09803b270aa1c61b68e0Jason Sams
9336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAllocationUploadToTexture(int alloc, int baseMioLevel);
9436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAllocationDestroy(int alloc);
9536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAllocationData(int id, int[] d);
9636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAllocationData(int id, float[] d);
9736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAllocationSubData1D(int id, int off, int count, int[] d);
9836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAllocationSubData1D(int id, int off, int count, float[] d);
9936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, int[] d);
10036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, float[] d);
10136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
10236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTriangleMeshDestroy(int id);
10336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTriangleMeshBegin(int vertex, int index);
10436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTriangleMeshAddVertex_XY (float x, float y);
10536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTriangleMeshAddVertex_XYZ (float x, float y, float z);
10636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTriangleMeshAddVertex_XY_ST (float x, float y, float s, float t);
10736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTriangleMeshAddVertex_XYZ_ST (float x, float y, float z, float s, float t);
10836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTriangleMeshAddVertex_XYZ_ST_NORM (float x, float y, float z, float s, float t, float nx, float ny, float nz);
10936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nTriangleMeshAddTriangle(int i1, int i2, int i3);
11036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nTriangleMeshCreate();
11136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
11236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAdapter1DDestroy(int id);
11336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAdapter1DBindAllocation(int ad, int alloc);
11436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAdapter1DSetConstraint(int ad, int dim, int value);
11536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAdapter1DData(int ad, int[] d);
11636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAdapter1DData(int ad, float[] d);
117bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    native void nAdapter1DSubData(int ad, int off, int count, int[] d);
11836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nAdapter1DSubData(int ad, int off, int count, float[] d);
11936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nAdapter1DCreate();
12036e612a488511940b61f09803b270aa1c61b68e0Jason Sams
121bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacbJason Sams    native void nAdapter2DDestroy(int id);
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
13036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptDestroy(int script);
13122534176fb5c1257130ef4ee589739ca42766a32Jason Sams    native void nScriptBindAllocation(int script, int alloc, int slot);
13222534176fb5c1257130ef4ee589739ca42766a32Jason Sams    native void nScriptSetClearColor(int script, float r, float g, float b, float a);
13322534176fb5c1257130ef4ee589739ca42766a32Jason Sams    native void nScriptSetClearDepth(int script, float depth);
13422534176fb5c1257130ef4ee589739ca42766a32Jason Sams    native void nScriptSetClearStencil(int script, int stencil);
13522534176fb5c1257130ef4ee589739ca42766a32Jason Sams    native void nScriptSetTimeZone(int script, byte[] timeZone);
13622534176fb5c1257130ef4ee589739ca42766a32Jason Sams
13736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCBegin();
13836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCAddType(int type);
13936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCSetRoot(boolean isRoot);
14036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCSetScript(byte[] script, int offset, int length);
14136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nScriptCCreate();
14236e612a488511940b61f09803b270aa1c61b68e0Jason Sams
14336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nSamplerDestroy(int sampler);
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    native void nProgramFragmentStoreDestroy(int pgm);
15636e612a488511940b61f09803b270aa1c61b68e0Jason Sams
15736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentBegin(int in, int out);
15836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentBindTexture(int vpf, int slot, int a);
15936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentBindSampler(int vpf, int slot, int s);
16036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentSetType(int slot, int vt);
16136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentSetEnvMode(int slot, int env);
16236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentSetTexEnable(int slot, boolean enable);
16336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nProgramFragmentCreate();
16436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentDestroy(int pgm);
16536e612a488511940b61f09803b270aa1c61b68e0Jason Sams
16636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramVertexDestroy(int pv);
1679bee51c42eb8c3daffe7d6fa483edbb1689b94d2Jason Sams    native void nProgramVertexBindAllocation(int pv, int mID);
16836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramVertexBegin(int inID, int outID);
16936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramVertexSetTextureMatrixEnable(boolean enable);
17036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramVertexAddLight(int id);
17136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nProgramVertexCreate();
17236e612a488511940b61f09803b270aa1c61b68e0Jason Sams
17336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nLightBegin();
17436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nLightSetIsMono(boolean isMono);
17536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nLightSetIsLocal(boolean isLocal);
17636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nLightCreate();
17736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nLightDestroy(int l);
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 void nSimpleMeshDestroy(int id);
1821bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams    native int  nSimpleMeshCreate(int batchID, int idxID, int[] vtxID, int prim);
1831bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams    native void nSimpleMeshBindVertex(int id, int alloc, int slot);
1841bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams    native void nSimpleMeshBindIndex(int id, int alloc);
1851bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams
18660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
18760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private int     mDev;
18860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private int     mContext;
18960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private Surface mSurface;
19060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
19136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    private static boolean mElementsInitialized = false;
19260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
19360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
19443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    //
19560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
19660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    RenderScript(Surface sur) {
19760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        mSurface = sur;
19860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        mDev = nDeviceCreate();
19960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        mContext = nContextCreate(mDev, mSurface, 0);
20060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
20136e612a488511940b61f09803b270aa1c61b68e0Jason Sams        // TODO: This should be protected by a lock
20236e612a488511940b61f09803b270aa1c61b68e0Jason Sams        if(!mElementsInitialized) {
20336e612a488511940b61f09803b270aa1c61b68e0Jason Sams            Element.init(this);
20436e612a488511940b61f09803b270aa1c61b68e0Jason Sams            mElementsInitialized = true;
20560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
20660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
20760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
20802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
20960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
21060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Triangle Mesh
21160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
21260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class TriangleMesh extends BaseObj {
21360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        TriangleMesh(int id) {
21436e612a488511940b61f09803b270aa1c61b68e0Jason Sams            super(RenderScript.this);
21560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
21660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
21760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
21860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void destroy() {
21960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nTriangleMeshDestroy(mID);
22060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
22160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
22260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
22360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
22460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshBegin(Element vertex, Element index) {
22536e612a488511940b61f09803b270aa1c61b68e0Jason Sams        Log.e("rs", "vtx " + vertex.toString() + "  " + vertex.mID + "  " + vertex.mPredefinedID);
22660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshBegin(vertex.mID, index.mID);
22760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
22860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
22960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddVertex_XY(float x, float y) {
23060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddVertex_XY(x, y);
23160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
23260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
23360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddVertex_XYZ(float x, float y, float z) {
23460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddVertex_XYZ(x, y, z);
23560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
23660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
23760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddVertex_XY_ST(float x, float y, float s, float t) {
23860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddVertex_XY_ST(x, y, s, t);
23960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
24060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
24160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddVertex_XYZ_ST(float x, float y, float z, float s, float t) {
24260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddVertex_XYZ_ST(x, y, z, s, t);
24360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
24460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
2450826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    public void triangleMeshAddVertex_XYZ_ST_NORM(float x, float y, float z, float s, float t, float nx, float ny, float nz) {
2460826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams        nTriangleMeshAddVertex_XYZ_ST_NORM(x, y, z, s, t, nx, ny, nz);
2470826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    }
2480826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
24960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddTriangle(int i1, int i2, int i3) {
25060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddTriangle(i1, i2, i3);
25160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
25260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
25360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public TriangleMesh triangleMeshCreate() {
25460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nTriangleMeshCreate();
25560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new TriangleMesh(id);
25660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
25760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
25860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
25964676f3c21a07d650069315572811570cbf8f728Jason Sams    // File
26064676f3c21a07d650069315572811570cbf8f728Jason Sams
26164676f3c21a07d650069315572811570cbf8f728Jason Sams    public class File extends BaseObj {
26264676f3c21a07d650069315572811570cbf8f728Jason Sams        File(int id) {
26336e612a488511940b61f09803b270aa1c61b68e0Jason Sams            super(RenderScript.this);
26464676f3c21a07d650069315572811570cbf8f728Jason Sams            mID = id;
26564676f3c21a07d650069315572811570cbf8f728Jason Sams        }
26664676f3c21a07d650069315572811570cbf8f728Jason Sams
26764676f3c21a07d650069315572811570cbf8f728Jason Sams        public void destroy() {
26864676f3c21a07d650069315572811570cbf8f728Jason Sams            //nLightDestroy(mID);
26964676f3c21a07d650069315572811570cbf8f728Jason Sams            mID = 0;
27064676f3c21a07d650069315572811570cbf8f728Jason Sams        }
27164676f3c21a07d650069315572811570cbf8f728Jason Sams    }
27264676f3c21a07d650069315572811570cbf8f728Jason Sams
27364676f3c21a07d650069315572811570cbf8f728Jason Sams    public File fileOpen(String s) throws IllegalStateException, IllegalArgumentException
27464676f3c21a07d650069315572811570cbf8f728Jason Sams    {
27564676f3c21a07d650069315572811570cbf8f728Jason Sams        if(s.length() < 1) {
27664676f3c21a07d650069315572811570cbf8f728Jason Sams            throw new IllegalArgumentException("fileOpen does not accept a zero length string.");
27764676f3c21a07d650069315572811570cbf8f728Jason Sams        }
27864676f3c21a07d650069315572811570cbf8f728Jason Sams
27964676f3c21a07d650069315572811570cbf8f728Jason Sams        try {
28064676f3c21a07d650069315572811570cbf8f728Jason Sams            byte[] bytes = s.getBytes("UTF-8");
28164676f3c21a07d650069315572811570cbf8f728Jason Sams            int id = nFileOpen(bytes);
28264676f3c21a07d650069315572811570cbf8f728Jason Sams            return new File(id);
28364676f3c21a07d650069315572811570cbf8f728Jason Sams        } catch (java.io.UnsupportedEncodingException e) {
28464676f3c21a07d650069315572811570cbf8f728Jason Sams            throw new RuntimeException(e);
28564676f3c21a07d650069315572811570cbf8f728Jason Sams        }
28664676f3c21a07d650069315572811570cbf8f728Jason Sams    }
28764676f3c21a07d650069315572811570cbf8f728Jason Sams
28864676f3c21a07d650069315572811570cbf8f728Jason Sams
28960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
29060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Root state
29160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
29260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void contextBindRootScript(Script s) {
29360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nContextBindRootScript(s.mID);
29460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
29560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
29660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //public void contextBindSampler(Sampler s, int slot) {
29760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        //nContextBindSampler(s.mID);
29860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //}
29960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
30022534176fb5c1257130ef4ee589739ca42766a32Jason Sams    public void contextBindProgramFragmentStore(ProgramStore pfs) {
30160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nContextBindProgramFragmentStore(pfs.mID);
30260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
30360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
30460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void contextBindProgramFragment(ProgramFragment pf) {
30560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nContextBindProgramFragment(pf.mID);
30660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
30760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
3080826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    public void contextBindProgramVertex(ProgramVertex pf) {
3090826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams        nContextBindProgramVertex(pf.mID);
3100826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    }
3110826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
31260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich}
31360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
31436e612a488511940b61f09803b270aa1c61b68e0Jason Sams
315