RenderScript.java revision bd1c3ad0cdf8e60b849a009cdc0b36764cc1dacb
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);
13136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptBindAllocation(int vtm, int alloc, int slot);
13236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCBegin();
13336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCSetClearColor(float r, float g, float b, float a);
13436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCSetClearDepth(float depth);
13536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCSetClearStencil(int stencil);
13636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCSetTimeZone(byte[] timeZone);
13736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCAddType(int type);
13836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCSetRoot(boolean isRoot);
13936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nScriptCSetScript(byte[] script, int offset, int length);
14036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nScriptCCreate();
14136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
14236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nSamplerDestroy(int sampler);
14336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nSamplerBegin();
14436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nSamplerSet(int param, int value);
14536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nSamplerCreate();
14636e612a488511940b61f09803b270aa1c61b68e0Jason Sams
14736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreBegin(int in, int out);
14836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreDepthFunc(int func);
14936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreDepthMask(boolean enable);
15036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreColorMask(boolean r, boolean g, boolean b, boolean a);
15136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreBlendFunc(int src, int dst);
15236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreDither(boolean enable);
15336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nProgramFragmentStoreCreate();
15436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentStoreDestroy(int pgm);
15536e612a488511940b61f09803b270aa1c61b68e0Jason Sams
15636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentBegin(int in, int out);
15736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentBindTexture(int vpf, int slot, int a);
15836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentBindSampler(int vpf, int slot, int s);
15936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentSetType(int slot, int vt);
16036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentSetEnvMode(int slot, int env);
16136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentSetTexEnable(int slot, boolean enable);
16236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native int  nProgramFragmentCreate();
16336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramFragmentDestroy(int pgm);
16436e612a488511940b61f09803b270aa1c61b68e0Jason Sams
16536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramVertexDestroy(int pv);
16636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramVertexBindAllocation(int pv, int slot, int mID);
16736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramVertexBegin(int inID, int outID);
16836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    native void nProgramVertexSetType(int slot, int mID);
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
18160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
18260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private int     mDev;
18360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private int     mContext;
18460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private Surface mSurface;
18560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
18636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    private static boolean mElementsInitialized = false;
18760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
18860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
18943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    //
19060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
19160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    RenderScript(Surface sur) {
19260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        mSurface = sur;
19360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        mDev = nDeviceCreate();
19460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        mContext = nContextCreate(mDev, mSurface, 0);
19560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
19636e612a488511940b61f09803b270aa1c61b68e0Jason Sams        // TODO: This should be protected by a lock
19736e612a488511940b61f09803b270aa1c61b68e0Jason Sams        if(!mElementsInitialized) {
19836e612a488511940b61f09803b270aa1c61b68e0Jason Sams            Element.init(this);
19936e612a488511940b61f09803b270aa1c61b68e0Jason Sams            mElementsInitialized = true;
20060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
20160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
20260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
20360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
20460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Element
20560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
20636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    Element.Builder mElementBuilder = new Element.Builder(this);
20736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    public Element.Builder elementBuilderCreate() throws IllegalStateException {
20836e612a488511940b61f09803b270aa1c61b68e0Jason Sams        mElementBuilder.begin();
20936e612a488511940b61f09803b270aa1c61b68e0Jason Sams        return mElementBuilder;
21060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
21160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
212b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    Type.Builder mTypeBuilder = new Type.Builder(this);
213b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    public Type.Builder typeBuilderCreate(Element e) throws IllegalStateException {
214b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        mTypeBuilder.begin(e);
215b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams        return mTypeBuilder;
216b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams    }
21760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
21860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
21960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
22060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public enum DepthFunc {
22160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ALWAYS (0),
22260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        LESS (1),
22360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        LEQUAL (2),
22460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        GREATER (3),
22560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        GEQUAL (4),
22660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        EQUAL (5),
22760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        NOTEQUAL (6);
22860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
22960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
23060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        DepthFunc(int id) {
23160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
23260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
23360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
23460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
23560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public enum BlendSrcFunc {
23660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ZERO (0),
23760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE (1),
23860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        DST_COLOR (2),
23960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE_MINUS_DST_COLOR (3),
24060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        SRC_ALPHA (4),
24160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE_MINUS_SRC_ALPHA (5),
24260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        DST_ALPHA (6),
24360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE_MINUS_DST_ALPA (7),
24460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        SRC_ALPHA_SATURATE (8);
24560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
24660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
24760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        BlendSrcFunc(int id) {
24860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
24960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
25060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
25160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
25260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public enum BlendDstFunc {
25360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ZERO (0),
25460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE (1),
25560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        SRC_COLOR (2),
25660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE_MINUS_SRC_COLOR (3),
25760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        SRC_ALPHA (4),
25860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE_MINUS_SRC_ALPHA (5),
25960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        DST_ALPHA (6),
26060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE_MINUS_DST_ALPA (7);
26160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
26260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
26360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        BlendDstFunc(int id) {
26460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
26560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
26660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
26760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
26860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public enum EnvMode {
26960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        REPLACE (0),
27060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        MODULATE (1),
27160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        DECAL (2);
27260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
27360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
27460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        EnvMode(int id) {
27560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
27660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
27760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
27860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
27902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    public enum SamplerParam {
28002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        FILTER_MIN (0),
28102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        FILTER_MAG (1),
28202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        WRAP_MODE_S (2),
28302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        WRAP_MODE_T (3),
28402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        WRAP_MODE_R (4);
28502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
28602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        int mID;
28702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        SamplerParam(int id) {
28802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams            mID = id;
28902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        }
29002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    }
29102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
29202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    public enum SamplerValue {
29302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        NEAREST (0),
29402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        LINEAR (1),
29502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        LINEAR_MIP_LINEAR (2),
29602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        WRAP (3),
29702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        CLAMP (4);
29802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
29902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        int mID;
30002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        SamplerValue(int id) {
30102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams            mID = id;
30202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        }
30302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    }
30402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
30560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
30660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Triangle Mesh
30760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
30860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class TriangleMesh extends BaseObj {
30960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        TriangleMesh(int id) {
31036e612a488511940b61f09803b270aa1c61b68e0Jason Sams            super(RenderScript.this);
31160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
31260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
31360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
31460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void destroy() {
31560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nTriangleMeshDestroy(mID);
31660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
31760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
31860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
31960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
32060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshBegin(Element vertex, Element index) {
32136e612a488511940b61f09803b270aa1c61b68e0Jason Sams        Log.e("rs", "vtx " + vertex.toString() + "  " + vertex.mID + "  " + vertex.mPredefinedID);
32260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshBegin(vertex.mID, index.mID);
32360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
32460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
32560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddVertex_XY(float x, float y) {
32660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddVertex_XY(x, y);
32760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
32860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
32960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddVertex_XYZ(float x, float y, float z) {
33060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddVertex_XYZ(x, y, z);
33160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
33260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
33360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddVertex_XY_ST(float x, float y, float s, float t) {
33460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddVertex_XY_ST(x, y, s, t);
33560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
33660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
33760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddVertex_XYZ_ST(float x, float y, float z, float s, float t) {
33860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddVertex_XYZ_ST(x, y, z, s, t);
33960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
34060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
3410826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    public void triangleMeshAddVertex_XYZ_ST_NORM(float x, float y, float z, float s, float t, float nx, float ny, float nz) {
3420826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams        nTriangleMeshAddVertex_XYZ_ST_NORM(x, y, z, s, t, nx, ny, nz);
3430826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    }
3440826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
34560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddTriangle(int i1, int i2, int i3) {
34660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddTriangle(i1, i2, i3);
34760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
34860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
34960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public TriangleMesh triangleMeshCreate() {
35060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nTriangleMeshCreate();
35160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new TriangleMesh(id);
35260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
35360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
35460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
35560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Script
35660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
35760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class Script extends BaseObj {
35860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        Script(int id) {
35936e612a488511940b61f09803b270aa1c61b68e0Jason Sams            super(RenderScript.this);
36060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
36160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
36260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
36360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void destroy() {
36460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nScriptDestroy(mID);
36560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
36660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
36760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
36860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void bindAllocation(Allocation va, int slot) {
36960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nScriptBindAllocation(mID, va.mID, slot);
37060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
37160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
37260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
37360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCBegin() {
37460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nScriptCBegin();
37560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
37660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
377584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    public void scriptCSetTimeZone(String timeZone) {
378584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        try {
379584a375df68ed7d62b38389078c6804edf228f9cRomain Guy            byte[] bytes = timeZone.getBytes("UTF-8");
38036e612a488511940b61f09803b270aa1c61b68e0Jason Sams            nScriptCSetTimeZone(bytes);
381584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        } catch (java.io.UnsupportedEncodingException e) {
382584a375df68ed7d62b38389078c6804edf228f9cRomain Guy            throw new RuntimeException(e);
383584a375df68ed7d62b38389078c6804edf228f9cRomain Guy        }
384584a375df68ed7d62b38389078c6804edf228f9cRomain Guy    }
38536e612a488511940b61f09803b270aa1c61b68e0Jason Sams
38660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCSetClearColor(float r, float g, float b, float a) {
38760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nScriptCSetClearColor(r, g, b, a);
38860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
38960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
39060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCSetClearDepth(float d) {
39160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nScriptCSetClearDepth(d);
39260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
39360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
39460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCSetClearStencil(int stencil) {
39560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nScriptCSetClearStencil(stencil);
39660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
39760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
39860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCAddType(Type t) {
39960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nScriptCAddType(t.mID);
40060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
40160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
40260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCSetRoot(boolean r) {
40360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nScriptCSetRoot(r);
40460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
40560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
40660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCSetScript(String s) {
40743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        try {
40863975dde40e4ee8fd08225741b31d54eff115104Jack Palevich            byte[] bytes = s.getBytes("UTF-8");
40963975dde40e4ee8fd08225741b31d54eff115104Jack Palevich            nScriptCSetScript(bytes, 0, bytes.length);
41043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        } catch (java.io.UnsupportedEncodingException e) {
41143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            throw new RuntimeException(e);
41243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        }
41343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
41443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
41543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    public void scriptCSetScript(Resources resources, int id) {
41643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        InputStream is = resources.openRawResource(id);
41743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        try {
41843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            try {
41943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                scriptCSetScript(is);
42043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            } finally {
42143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                is.close();
42243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            }
42343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        } catch(IOException e) {
42443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            throw new Resources.NotFoundException();
42543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        }
42643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
42743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
42843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    public void  scriptCSetScript(InputStream is) throws IOException {
42943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        byte[] buf = new byte[1024];
43043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        int currentPos = 0;
43143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        while(true) {
43243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            int bytesLeft = buf.length - currentPos;
43343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            if (bytesLeft == 0) {
43443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                byte[] buf2 = new byte[buf.length * 2];
43543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                System.arraycopy(buf, 0, buf2, 0, buf.length);
43643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                buf = buf2;
43743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                bytesLeft = buf.length - currentPos;
43843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            }
43943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            int bytesRead = is.read(buf, currentPos, bytesLeft);
44043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            if (bytesRead <= 0) {
44143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                break;
44243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            }
44343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            currentPos += bytesRead;
44443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        }
44543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        nScriptCSetScript(buf, 0, currentPos);
44660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
44760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
44860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public Script scriptCCreate() {
44960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nScriptCCreate();
45060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new Script(id);
45160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
45260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
45360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
4541fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams    // ProgramVertex
4551fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
4561fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams    public class ProgramVertex extends BaseObj {
4571fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        ProgramVertex(int id) {
45836e612a488511940b61f09803b270aa1c61b68e0Jason Sams            super(RenderScript.this);
4591fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams            mID = id;
4601fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        }
4611fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
4621fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        public void destroy() {
4631fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams            nProgramVertexDestroy(mID);
4641fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams            mID = 0;
4651fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        }
4661fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
4671fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        public void bindAllocation(int slot, Allocation va) {
4681fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams            nProgramVertexBindAllocation(mID, slot, va.mID);
4691fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        }
4701fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams    }
4711fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
4721fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams    public void programVertexBegin(Element in, Element out) {
4731fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        int inID = 0;
4741fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        int outID = 0;
4751fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        if (in != null) {
4761fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams            inID = in.mID;
4771fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        }
4781fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        if (out != null) {
4791fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams            outID = out.mID;
4801fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        }
4811fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        nProgramVertexBegin(inID, outID);
4821fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams    }
4831fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
4841fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams    public void programVertexSetType(int slot, Type t) {
4851fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        nProgramVertexSetType(slot, t.mID);
4861fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams    }
4871fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
4881fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams    public void programVertexSetTextureMatrixEnable(boolean enable) {
4891fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        nProgramVertexSetTextureMatrixEnable(enable);
4901fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams    }
4911fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
492ee41112e1539de95596600fd2c6dada5d275217fJason Sams    public void programVertexAddLight(Light l) {
493ee41112e1539de95596600fd2c6dada5d275217fJason Sams        nProgramVertexAddLight(l.mID);
494ee41112e1539de95596600fd2c6dada5d275217fJason Sams    }
495ee41112e1539de95596600fd2c6dada5d275217fJason Sams
4961fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams    public ProgramVertex programVertexCreate() {
4971fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        int id = nProgramVertexCreate();
4981fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams        return new ProgramVertex(id);
4991fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams    }
5001fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
5011fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams
5021fe9b8c3bdc55e624edc1a69c3f3f0b9e90af1e4Jason Sams    //////////////////////////////////////////////////////////////////////////////////
50360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // ProgramFragmentStore
50460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
50560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class ProgramFragmentStore extends BaseObj {
50660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ProgramFragmentStore(int id) {
50736e612a488511940b61f09803b270aa1c61b68e0Jason Sams            super(RenderScript.this);
50860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
50960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
51060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
51160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void destroy() {
5123eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams            nProgramFragmentStoreDestroy(mID);
51360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
51460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
51560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
51660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
51760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentStoreBegin(Element in, Element out) {
51860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int inID = 0;
51960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int outID = 0;
52060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        if (in != null) {
52160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            inID = in.mID;
52260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
52360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        if (out != null) {
52460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            outID = out.mID;
52560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
52660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentStoreBegin(inID, outID);
52760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
52860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
52960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentStoreDepthFunc(DepthFunc func) {
53060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentStoreDepthFunc(func.mID);
53160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
53260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
53360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentStoreDepthMask(boolean enable) {
53460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentStoreDepthMask(enable);
53560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
53660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
53760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentStoreColorMask(boolean r, boolean g, boolean b, boolean a) {
53860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentStoreColorMask(r,g,b,a);
53960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
54060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
54160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentStoreBlendFunc(BlendSrcFunc src, BlendDstFunc dst) {
54260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentStoreBlendFunc(src.mID, dst.mID);
54360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
54460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
54560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentStoreDitherEnable(boolean enable) {
54660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentStoreDither(enable);
54760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
54860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
54960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public ProgramFragmentStore programFragmentStoreCreate() {
55060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nProgramFragmentStoreCreate();
55160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new ProgramFragmentStore(id);
55260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
55360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
55460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
55560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // ProgramFragment
55660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
55760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class ProgramFragment extends BaseObj {
55860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ProgramFragment(int id) {
55936e612a488511940b61f09803b270aa1c61b68e0Jason Sams            super(RenderScript.this);
56060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
56160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
56260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
56360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void destroy() {
5643eaa338e11a3b0d6b87d705e5bb95625e82347bdJason Sams            nProgramFragmentDestroy(mID);
56560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
56660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
56760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
56860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void bindTexture(Allocation va, int slot) {
56960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nProgramFragmentBindTexture(mID, slot, va.mID);
57060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
57160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
57202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        public void bindSampler(Sampler vs, int slot) {
57302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams            nProgramFragmentBindSampler(mID, slot, vs.mID);
57402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        }
57560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
57660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
57760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentBegin(Element in, Element out) {
57860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int inID = 0;
57960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int outID = 0;
58060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        if (in != null) {
58160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            inID = in.mID;
58260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
58360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        if (out != null) {
58460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            outID = out.mID;
58560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
58660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentBegin(inID, outID);
58760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
58860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
58960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentSetType(int slot, Type t) {
59060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentSetType(slot, t.mID);
59160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
59260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
59360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentSetType(int slot, EnvMode t) {
59460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentSetEnvMode(slot, t.mID);
59560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
59660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
59760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentSetTexEnable(int slot, boolean enable) {
59860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentSetTexEnable(slot, enable);
59960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
60060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
601e6c8e9b8c7a83381c7dfbf86ac34e0302d397beeJason Sams    public void programFragmentSetTexEnvMode(int slot, EnvMode env) {
602e6c8e9b8c7a83381c7dfbf86ac34e0302d397beeJason Sams        nProgramFragmentSetEnvMode(slot, env.mID);
603e6c8e9b8c7a83381c7dfbf86ac34e0302d397beeJason Sams    }
604e6c8e9b8c7a83381c7dfbf86ac34e0302d397beeJason Sams
60560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public ProgramFragment programFragmentCreate() {
60660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nProgramFragmentCreate();
60760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new ProgramFragment(id);
60860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
60960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
61002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    //////////////////////////////////////////////////////////////////////////////////
61102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    // Sampler
61202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
61302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    public class Sampler extends BaseObj {
61402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        Sampler(int id) {
61536e612a488511940b61f09803b270aa1c61b68e0Jason Sams            super(RenderScript.this);
61602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams            mID = id;
61702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        }
61802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
61902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        public void destroy() {
62002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams            nSamplerDestroy(mID);
62102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams            mID = 0;
62202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        }
62302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    }
62402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
62502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    public void samplerBegin() {
62602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        nSamplerBegin();
62702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    }
62802fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
62902fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    public void samplerSet(SamplerParam p, SamplerValue v) {
63002fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        nSamplerSet(p.mID, v.mID);
63102fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    }
63202fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
63302fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    public Sampler samplerCreate() {
63402fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        int id = nSamplerCreate();
63502fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams        return new Sampler(id);
63602fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams    }
63702fb2cb531035779a25dbf9595e0628ea40585b0Jason Sams
638bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    //////////////////////////////////////////////////////////////////////////////////
639bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    // Light
640bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
641bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    public class Light extends BaseObj {
642bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        Light(int id) {
64336e612a488511940b61f09803b270aa1c61b68e0Jason Sams            super(RenderScript.this);
644bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams            mID = id;
645bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        }
646bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
647bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        public void destroy() {
648bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams            nLightDestroy(mID);
649bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams            mID = 0;
650bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        }
651bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
652bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        public void setColor(float r, float g, float b) {
653bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams            nLightSetColor(mID, r, g, b);
654bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        }
655bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
656bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        public void setPosition(float x, float y, float z) {
657bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams            nLightSetPosition(mID, x, y, z);
658bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        }
659bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    }
660bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
661bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    public void lightBegin() {
662bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        nLightBegin();
663bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    }
664bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
665bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    public void lightSetIsMono(boolean isMono) {
666bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        nLightSetIsMono(isMono);
667bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    }
668bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
669bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    public void lightSetIsLocal(boolean isLocal) {
670bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        nLightSetIsLocal(isLocal);
671bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    }
672bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams
673bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    public Light lightCreate() {
674bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        int id = nLightCreate();
675bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams        return new Light(id);
676bba134c8a1dcfe0c8473307a95899a02c9553504Jason Sams    }
67760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
67864676f3c21a07d650069315572811570cbf8f728Jason Sams    //////////////////////////////////////////////////////////////////////////////////
67964676f3c21a07d650069315572811570cbf8f728Jason Sams    // File
68064676f3c21a07d650069315572811570cbf8f728Jason Sams
68164676f3c21a07d650069315572811570cbf8f728Jason Sams    public class File extends BaseObj {
68264676f3c21a07d650069315572811570cbf8f728Jason Sams        File(int id) {
68336e612a488511940b61f09803b270aa1c61b68e0Jason Sams            super(RenderScript.this);
68464676f3c21a07d650069315572811570cbf8f728Jason Sams            mID = id;
68564676f3c21a07d650069315572811570cbf8f728Jason Sams        }
68664676f3c21a07d650069315572811570cbf8f728Jason Sams
68764676f3c21a07d650069315572811570cbf8f728Jason Sams        public void destroy() {
68864676f3c21a07d650069315572811570cbf8f728Jason Sams            //nLightDestroy(mID);
68964676f3c21a07d650069315572811570cbf8f728Jason Sams            mID = 0;
69064676f3c21a07d650069315572811570cbf8f728Jason Sams        }
69164676f3c21a07d650069315572811570cbf8f728Jason Sams    }
69264676f3c21a07d650069315572811570cbf8f728Jason Sams
69364676f3c21a07d650069315572811570cbf8f728Jason Sams    public File fileOpen(String s) throws IllegalStateException, IllegalArgumentException
69464676f3c21a07d650069315572811570cbf8f728Jason Sams    {
69564676f3c21a07d650069315572811570cbf8f728Jason Sams        if(s.length() < 1) {
69664676f3c21a07d650069315572811570cbf8f728Jason Sams            throw new IllegalArgumentException("fileOpen does not accept a zero length string.");
69764676f3c21a07d650069315572811570cbf8f728Jason Sams        }
69864676f3c21a07d650069315572811570cbf8f728Jason Sams
69964676f3c21a07d650069315572811570cbf8f728Jason Sams        try {
70064676f3c21a07d650069315572811570cbf8f728Jason Sams            byte[] bytes = s.getBytes("UTF-8");
70164676f3c21a07d650069315572811570cbf8f728Jason Sams            int id = nFileOpen(bytes);
70264676f3c21a07d650069315572811570cbf8f728Jason Sams            return new File(id);
70364676f3c21a07d650069315572811570cbf8f728Jason Sams        } catch (java.io.UnsupportedEncodingException e) {
70464676f3c21a07d650069315572811570cbf8f728Jason Sams            throw new RuntimeException(e);
70564676f3c21a07d650069315572811570cbf8f728Jason Sams        }
70664676f3c21a07d650069315572811570cbf8f728Jason Sams    }
70764676f3c21a07d650069315572811570cbf8f728Jason Sams
70864676f3c21a07d650069315572811570cbf8f728Jason Sams
70960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
71060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Root state
71160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
71260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void contextBindRootScript(Script s) {
71360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nContextBindRootScript(s.mID);
71460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
71560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
71660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //public void contextBindSampler(Sampler s, int slot) {
71760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        //nContextBindSampler(s.mID);
71860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //}
71960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
72060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void contextBindProgramFragmentStore(ProgramFragmentStore pfs) {
72160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nContextBindProgramFragmentStore(pfs.mID);
72260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
72360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
72460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void contextBindProgramFragment(ProgramFragment pf) {
72560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nContextBindProgramFragment(pf.mID);
72660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
72760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
7280826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    public void contextBindProgramVertex(ProgramVertex pf) {
7290826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams        nContextBindProgramVertex(pf.mID);
7300826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams    }
7310826a6f90f049bf94fc39fb23ad3a736a14b96ebJason Sams
73260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich}
73360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
73436e612a488511940b61f09803b270aa1c61b68e0Jason Sams
735