RenderScript.java revision 43702d8925c54360ad5f9f66b0d35d61d59f6910
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
17df98851d2fccc00d7bc9adfdf1088d34e007ae1aJack Palevichpackage com.android.fountain;
1860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
1943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichimport java.io.InputStream;
2043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichimport java.io.IOException;
2143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
2260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichimport android.os.Bundle;
2343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevichimport android.content.res.Resources;
2460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichimport android.util.Log;
2560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichimport android.util.Config;
2660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichimport android.view.Menu;
2760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichimport android.view.MenuItem;
2860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichimport android.view.Window;
2960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichimport android.view.View;
3060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichimport android.view.Surface;
31fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Samsimport android.graphics.Bitmap;
32fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Samsimport android.graphics.Color;
3360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
3460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevichpublic class RenderScript {
3560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private static final String LOG_TAG = "libRS_jni";
3660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private static final boolean DEBUG  = false;
3760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
3860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
3960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
4060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
4160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich       /*
4260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * We use a class initializer to allow the native code to cache some
4360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     * field offsets.
4460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich     */
4560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private static boolean sInitialized;
4660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private static void _nInit();
4760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
4860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    static {
4960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        sInitialized = false;
5060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        try {
5160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            System.loadLibrary("RS_jni");
5260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            Log.e(LOG_TAG, "*** Renderscript INIT");
5360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            _nInit();
5460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            Log.e(LOG_TAG, "*** Renderscript INIT 3");
5560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            sInitialized = true;
5660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        } catch (UnsatisfiedLinkError e) {
5760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            Log.d(LOG_TAG, "RenderScript JNI library not found!");
5860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
5960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
6060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
6160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nDeviceCreate();
6260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nDeviceDestroy(int dev);
6360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nContextCreate(int dev, Surface sur, int ver);
6460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nContextDestroy(int con);
6560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
6660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //void rsContextBindSampler (uint32_t slot, RsSampler sampler);
6760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //void rsContextBindRootScript (RsScript sampler);
6860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nContextBindRootScript(int script);
6960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nContextBindSampler(int sampler, int slot);
7060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nContextBindProgramFragmentStore(int pfs);
7160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nContextBindProgramFragment(int pf);
7260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
7360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nElementBegin();
7460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nElementAddPredefined(int predef);
7560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nElementAdd(int kind, int type, int norm, int bits);
7660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nElementCreate();
7760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nElementGetPredefined(int predef);
7860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nElementDestroy(int obj);
7960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
8060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nTypeBegin(int elementID);
8160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nTypeAdd(int dim, int val);
8260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nTypeCreate();
8360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nTypeDestroy(int id);
8460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
8560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nAllocationCreateTyped(int type);
8660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nAllocationCreatePredefSized(int predef, int count);
8760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nAllocationCreateSized(int elem, int count);
88fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams    native private int  nAllocationCreateFromBitmap(int w, int h, int dstFmt, int srcFmt, boolean genMips, int[] data);
89fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
9060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //native private int  nAllocationCreateFromBitmap(type.mID);
9160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAllocationUploadToTexture(int alloc, int baseMioLevel);
9260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAllocationDestroy(int alloc);
9360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAllocationData(int id, int[] d);
9460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAllocationData(int id, float[] d);
9560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAllocationSubData1D(int id, int off, int count, int[] d);
9660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAllocationSubData1D(int id, int off, int count, float[] d);
9760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, int[] d);
9860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAllocationSubData2D(int id, int xoff, int yoff, int w, int h, float[] d);
9960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
10060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nTriangleMeshDestroy(int id);
10160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nTriangleMeshBegin(int vertex, int index);
10260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nTriangleMeshAddVertex_XY (float x, float y);
10360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nTriangleMeshAddVertex_XYZ (float x, float y, float z);
10460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nTriangleMeshAddVertex_XY_ST (float x, float y, float s, float t);
10560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nTriangleMeshAddVertex_XYZ_ST (float x, float y, float z, float s, float t);
10660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nTriangleMeshAddTriangle(int i1, int i2, int i3);
10760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nTriangleMeshCreate();
10860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
10960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAdapter1DDestroy(int id);
11060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAdapter1DBindAllocation(int ad, int alloc);
11160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAdapter1DSetConstraint(int ad, int dim, int value);
11260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAdapter1DData(int ad, int[] d);
11360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAdapter1DSubData(int ad, int off, int count, int[] d);
11460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAdapter1DData(int ad, float[] d);
11560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nAdapter1DSubData(int ad, int off, int count, float[] d);
11660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nAdapter1DCreate();
11760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
11860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nScriptDestroy(int script);
11960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nScriptBindAllocation(int vtm, int alloc, int slot);
12060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nScriptCBegin();
12160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nScriptCSetClearColor(float r, float g, float b, float a);
12260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nScriptCSetClearDepth(float depth);
12360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nScriptCSetClearStencil(int stencil);
12460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nScriptCAddType(int type);
12560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nScriptCSetRoot(boolean isRoot);
12643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    native private void nScriptCSetScript(byte[] script, int offset, int length);
12760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nScriptCCreate();
12860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
12960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
13060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nProgramFragmentStoreBegin(int in, int out);
13160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nProgramFragmentStoreDepthFunc(int func);
13260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nProgramFragmentStoreDepthMask(boolean enable);
13360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nProgramFragmentStoreColorMask(boolean r, boolean g, boolean b, boolean a);
13460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nProgramFragmentStoreBlendFunc(int src, int dst);
13560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nProgramFragmentStoreDither(boolean enable);
13660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nProgramFragmentStoreCreate();
13760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
13860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nProgramFragmentBegin(int in, int out);
13960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nProgramFragmentBindTexture(int vpf, int slot, int a);
14060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nProgramFragmentBindSampler(int vpf, int slot, int s);
14160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nProgramFragmentSetType(int slot, int vt);
14260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nProgramFragmentSetEnvMode(int slot, int env);
14360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private void nProgramFragmentSetTexEnable(int slot, boolean enable);
14460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    native private int  nProgramFragmentCreate();
14560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
14660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
14760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private int     mDev;
14860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private int     mContext;
14960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private Surface mSurface;
15060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
15160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
15260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
15360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
15443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    //
15560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
15660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    RenderScript(Surface sur) {
15760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        mSurface = sur;
15860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        mDev = nDeviceCreate();
15960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        mContext = nContextCreate(mDev, mSurface, 0);
16060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
16160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
16260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    private class BaseObj {
16360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        BaseObj() {
16460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
16560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
16660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
16760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
16860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        protected void finalize() throws Throwable
16960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        {
17060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            if (mID != 0) {
17143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                Log.v(LOG_TAG,
17260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich                      "Element finalized without having released the RS reference.");
17360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            }
17460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            super.finalize();
17560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
17660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
17760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
17843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
17960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
18060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Element
18160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
18260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public enum ElementPredefined {
18360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        USER_U8 (0),
18460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        USER_I8 (1),
18560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        USER_U16 (2),
18660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        USER_I16 (3),
18760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        USER_U32 (4),
18860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        USER_I32 (5),
18960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        USER_FLOAT (6),
19060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
191fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        A_8 (7),
192fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        RGB_565 (8),
193fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        RGBA_5551 (9),
194fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        RGBA_4444 (10),
195fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        RGB_888 (11),
196fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        RGBA_8888 (12),
197fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
198fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        INDEX_16 (13),
199fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        INDEX_32 (14),
200fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        XY_F32 (15),
201fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        XYZ_F32 (16),
202fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        ST_XY_F32 (17),
203fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        ST_XYZ_F32 (18),
204fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        NORM_XYZ_F32 (19),
205fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        NORM_ST_XYZ_F32 (20);
20660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
20760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
20860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ElementPredefined(int id) {
20960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
21060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
21160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
21260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
21360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public enum DataType {
21460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        FLOAT (0),
21560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        UNSIGNED (1),
21660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        SIGNED (2);
21760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
21860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
21960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        DataType(int id) {
22060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
22160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
22260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
22360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
22460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public enum DataKind {
22560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        USER (0),
22660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        RED (1),
22760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        GREEN (2),
22860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        BLUE (3),
22960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ALPHA (4),
23060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        LUMINANCE (5),
23160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        INTENSITY (6),
23260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        X (7),
23360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        Y (8),
23460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        Z (9),
23560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        W (10),
23660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        S (11),
23760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        T (12),
23860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        Q (13),
23960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        R (14),
24060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        NX (15),
24160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        NY (16),
24260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        NZ (17),
24360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        INDEX (18);
24460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
24560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
24660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        DataKind(int id) {
24760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
24860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
24960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
25060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
25160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public enum DepthFunc {
25260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ALWAYS (0),
25360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        LESS (1),
25460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        LEQUAL (2),
25560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        GREATER (3),
25660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        GEQUAL (4),
25760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        EQUAL (5),
25860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        NOTEQUAL (6);
25960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
26060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
26160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        DepthFunc(int id) {
26260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
26360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
26460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
26560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
26660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public enum BlendSrcFunc {
26760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ZERO (0),
26860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE (1),
26960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        DST_COLOR (2),
27060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE_MINUS_DST_COLOR (3),
27160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        SRC_ALPHA (4),
27260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE_MINUS_SRC_ALPHA (5),
27360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        DST_ALPHA (6),
27460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE_MINUS_DST_ALPA (7),
27560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        SRC_ALPHA_SATURATE (8);
27660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
27760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
27860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        BlendSrcFunc(int id) {
27960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
28060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
28160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
28260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
28360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public enum BlendDstFunc {
28460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ZERO (0),
28560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE (1),
28660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        SRC_COLOR (2),
28760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE_MINUS_SRC_COLOR (3),
28860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        SRC_ALPHA (4),
28960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE_MINUS_SRC_ALPHA (5),
29060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        DST_ALPHA (6),
29160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ONE_MINUS_DST_ALPA (7);
29260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
29360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
29460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        BlendDstFunc(int id) {
29560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
29660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
29760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
29860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
29960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public enum EnvMode {
30060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        REPLACE (0),
30160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        MODULATE (1),
30260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        DECAL (2);
30360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
30460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
30560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        EnvMode(int id) {
30660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
30760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
30860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
30960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
31060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class Element extends BaseObj {
31160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        Element(int id) {
31260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
31360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
31460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
31560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void estroy() {
31660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nElementDestroy(mID);
31760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
31860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
31960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
32060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
32160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void elementBegin() {
32260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nElementBegin();
32360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
32460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
32560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void elementAddPredefined(ElementPredefined e) {
32660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nElementAddPredefined(e.mID);
32760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
32860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
32960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void elementAdd(DataType dt, DataKind dk, boolean isNormalized, int bits) {
33060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int norm = 0;
33160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        if (isNormalized) {
33260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            norm = 1;
33360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
33460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nElementAdd(dt.mID, dk.mID, norm, bits);
33560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
33660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
33760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public Element elementCreate() {
33860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nElementCreate();
33960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new Element(id);
34060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
34160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
34260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public Element elementGetPredefined(ElementPredefined predef) {
34360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nElementGetPredefined(predef.mID);
34460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new Element(id);
34560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
34660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
34760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
34860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
34960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Type
35060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
35160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public enum Dimension {
35260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        X (0),
35360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        Y (1),
35460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        Z (2),
35560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        LOD (3),
35660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        FACE (4),
35760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ARRAY_0 (100);
35860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
35960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int mID;
36060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        Dimension(int id) {
36160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
36260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
36360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
36460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
36560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class Type extends BaseObj {
36660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        Type(int id) {
36760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
36860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
36960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
37060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void destroy() {
37160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nTypeDestroy(mID);
37260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
37360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
37460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
37560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
37660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void typeBegin(Element e) {
37760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTypeBegin(e.mID);
37860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
37960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
38060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void typeAdd(Dimension d, int value) {
38160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTypeAdd(d.mID, value);
38260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
38360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
38460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public Type typeCreate() {
38560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nTypeCreate();
38660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new Type(id);
38760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
38860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
38960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
39060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
39160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Allocation
39260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
39360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class Allocation extends BaseObj {
39460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        Allocation(int id) {
39560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
39660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
39760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
39860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void uploadToTexture(int baseMipLevel) {
39960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAllocationUploadToTexture(mID, baseMipLevel);
40060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
40160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
40260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void destroy() {
40360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAllocationDestroy(mID);
40460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
40560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
40660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
40760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void data(int[] d) {
40860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAllocationData(mID, d);
40960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
41060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
41160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void data(float[] d) {
41260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAllocationData(mID, d);
41360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
41460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
41560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void subData1D(int off, int count, int[] d) {
41660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAllocationSubData1D(mID, off, count, d);
41760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
41860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
41960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void subData1D(int off, int count, float[] d) {
42060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAllocationSubData1D(mID, off, count, d);
42160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
42260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
42360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void subData2D(int xoff, int yoff, int w, int h, int[] d) {
42460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAllocationSubData2D(mID, xoff, yoff, w, h, d);
42560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
42660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
42760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void subData2D(int xoff, int yoff, int w, int h, float[] d) {
42860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAllocationSubData2D(mID, xoff, yoff, w, h, d);
42960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
43060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
43160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
43260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public Allocation allocationCreateTyped(Type type) {
43360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nAllocationCreateTyped(type.mID);
43460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new Allocation(id);
43560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
43660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
43760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public Allocation allocationCreatePredefSized(ElementPredefined e, int count) {
43860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nAllocationCreatePredefSized(e.mID, count);
43960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new Allocation(id);
44060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
44160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
44260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public Allocation allocationCreateSized(Element e, int count) {
44360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nAllocationCreateSized(e.mID, count);
44460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new Allocation(id);
44560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
44660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
447fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams    public Allocation allocationCreateFromBitmap(Bitmap b, ElementPredefined dstFmt, boolean genMips) {
448fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        int w = b.getWidth();
449fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        int h = b.getHeight();
450fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        int[] data = new int[w * h];
451fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
452fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        int outPtr = 0;
453fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        for(int y=0; y < h; y++) {
454fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams            for(int x=0; x < w; x++) {
455fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams                data[outPtr] = b.getPixel(x, y);
456fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams                outPtr++;
457fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams            }
458fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        }
459fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
460fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        int srcFmt = 0;
461fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        /*
462fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        switch(b.getConfig()) {
463fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        case ALPHA_8:
464fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams            srcFmt = ElementPredefined.A_8.mID;
465fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams            break;
466fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        case ARGB_4444:
467fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams            srcFmt = ElementPredefined.RGBA_4444.mID;
468fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams            break;
469fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        case ARGB_8888:
470fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams            srcFmt = ElementPredefined.RGBA_8888.mID;
471fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams            break;
472fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        case RGB_565:
473fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams            srcFmt = ElementPredefined.RGB_565.mID;
474fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams            break;
475fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        default:
476fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams            Log.e(LOG_TAG, "allocationCreateFromBitmap, unknown bitmap format");
47743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        }
47843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        */
479fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
480fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        srcFmt = ElementPredefined.RGBA_8888.mID;
481fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams
482fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        int id = nAllocationCreateFromBitmap(w, h, dstFmt.mID, srcFmt, genMips, data);
483fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams        return new Allocation(id);
484fe08d99725efd0dde7ba67ff1979a04fec2ba99fJason Sams    }
48560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
48660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
48760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Adapter1D
48860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
48960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class Adapter1D extends BaseObj {
49060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        Adapter1D(int id) {
49160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
49260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
49360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
49460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void destroy() {
49560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAdapter1DDestroy(mID);
49660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
49760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
49860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
49960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void bindAllocation(Allocation a) {
50060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAdapter1DBindAllocation(mID, a.mID);
50160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
50260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
50360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void setConstraint(Dimension dim, int value) {
50460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAdapter1DSetConstraint(mID, dim.mID, value);
50560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
50660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
50760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void data(int[] d) {
50860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAdapter1DData(mID, d);
50960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
51060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
51160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void subData(int off, int count, int[] d) {
51260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAdapter1DSubData(mID, off, count, d);
51360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
51460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
51560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void data(float[] d) {
51660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAdapter1DData(mID, d);
51760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
51860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
51960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void subData(int off, int count, float[] d) {
52060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nAdapter1DSubData(mID, off, count, d);
52160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
52260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
52360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
52460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public Adapter1D adapter1DCreate() {
52560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nAdapter1DCreate();
52660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new Adapter1D(id);
52760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
52860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
52960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
53060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
53160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Triangle Mesh
53260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
53360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class TriangleMesh extends BaseObj {
53460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        TriangleMesh(int id) {
53560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
53660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
53760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
53860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void destroy() {
53960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nTriangleMeshDestroy(mID);
54060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
54160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
54260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
54360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
54460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshBegin(Element vertex, Element index) {
54560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshBegin(vertex.mID, index.mID);
54660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
54760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
54860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddVertex_XY(float x, float y) {
54960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddVertex_XY(x, y);
55060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
55160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
55260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddVertex_XYZ(float x, float y, float z) {
55360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddVertex_XYZ(x, y, z);
55460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
55560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
55660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddVertex_XY_ST(float x, float y, float s, float t) {
55760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddVertex_XY_ST(x, y, s, t);
55860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
55960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
56060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddVertex_XYZ_ST(float x, float y, float z, float s, float t) {
56160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddVertex_XYZ_ST(x, y, z, s, t);
56260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
56360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
56460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void triangleMeshAddTriangle(int i1, int i2, int i3) {
56560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nTriangleMeshAddTriangle(i1, i2, i3);
56660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
56760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
56860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public TriangleMesh triangleMeshCreate() {
56960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nTriangleMeshCreate();
57060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new TriangleMesh(id);
57160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
57260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
57360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
57460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Script
57560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
57660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class Script extends BaseObj {
57760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        Script(int id) {
57860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
57960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
58060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
58160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void destroy() {
58260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nScriptDestroy(mID);
58360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
58460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
58560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
58660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void bindAllocation(Allocation va, int slot) {
58760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nScriptBindAllocation(mID, va.mID, slot);
58860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
58960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
59060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
59160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCBegin() {
59260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nScriptCBegin();
59360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
59460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
59560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCSetClearColor(float r, float g, float b, float a) {
59660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nScriptCSetClearColor(r, g, b, a);
59760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
59860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
59960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCSetClearDepth(float d) {
60060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nScriptCSetClearDepth(d);
60160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
60260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
60360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCSetClearStencil(int stencil) {
60460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nScriptCSetClearStencil(stencil);
60560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
60660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
60760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCAddType(Type t) {
60860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nScriptCAddType(t.mID);
60960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
61060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
61160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCSetRoot(boolean r) {
61260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nScriptCSetRoot(r);
61360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
61460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
61560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void scriptCSetScript(String s) {
61643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        try {
61743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            scriptCSetScript(s.getBytes("UTF-8"));
61843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        } catch (java.io.UnsupportedEncodingException e) {
61943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            throw new RuntimeException(e);
62043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        }
62143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
62243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
62343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    public void scriptCSetScript(byte[] utf8Bytes) {
62443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        scriptCSetScript(utf8Bytes, 0, utf8Bytes.length);
62543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
62643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
62743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    public void scriptCSetScript(byte[] utf8Bytes, int offset, int length) {
62843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        nScriptCSetScript(utf8Bytes, offset, length);
62943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
63043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
63143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    public void scriptCSetScript(Resources resources, int id) {
63243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        InputStream is = resources.openRawResource(id);
63343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        try {
63443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            try {
63543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                scriptCSetScript(is);
63643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            } finally {
63743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                is.close();
63843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            }
63943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        } catch(IOException e) {
64043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            throw new Resources.NotFoundException();
64143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        }
64243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    }
64343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich
64443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich    public void  scriptCSetScript(InputStream is) throws IOException {
64543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        byte[] buf = new byte[1024];
64643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        int currentPos = 0;
64743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        while(true) {
64843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            int bytesLeft = buf.length - currentPos;
64943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            if (bytesLeft == 0) {
65043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                byte[] buf2 = new byte[buf.length * 2];
65143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                System.arraycopy(buf, 0, buf2, 0, buf.length);
65243702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                buf = buf2;
65343702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                bytesLeft = buf.length - currentPos;
65443702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            }
65543702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            int bytesRead = is.read(buf, currentPos, bytesLeft);
65643702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            if (bytesRead <= 0) {
65743702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich                break;
65843702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            }
65943702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich            currentPos += bytesRead;
66043702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        }
66143702d8925c54360ad5f9f66b0d35d61d59f6910Jack Palevich        nScriptCSetScript(buf, 0, currentPos);
66260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
66360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
66460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public Script scriptCCreate() {
66560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nScriptCCreate();
66660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new Script(id);
66760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
66860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
66960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
67060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // ProgramFragmentStore
67160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
67260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class ProgramFragmentStore extends BaseObj {
67360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ProgramFragmentStore(int id) {
67460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
67560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
67660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
67760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void destroy() {
67860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nScriptDestroy(mID);
67960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
68060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
68160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
68260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
68360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentStoreBegin(Element in, Element out) {
68460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int inID = 0;
68560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int outID = 0;
68660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        if (in != null) {
68760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            inID = in.mID;
68860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
68960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        if (out != null) {
69060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            outID = out.mID;
69160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
69260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentStoreBegin(inID, outID);
69360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
69460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
69560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentStoreDepthFunc(DepthFunc func) {
69660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentStoreDepthFunc(func.mID);
69760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
69860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
69960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentStoreDepthMask(boolean enable) {
70060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentStoreDepthMask(enable);
70160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
70260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
70360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentStoreColorMask(boolean r, boolean g, boolean b, boolean a) {
70460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentStoreColorMask(r,g,b,a);
70560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
70660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
70760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentStoreBlendFunc(BlendSrcFunc src, BlendDstFunc dst) {
70860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentStoreBlendFunc(src.mID, dst.mID);
70960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
71060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
71160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentStoreDitherEnable(boolean enable) {
71260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentStoreDither(enable);
71360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
71460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
71560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public ProgramFragmentStore programFragmentStoreCreate() {
71660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nProgramFragmentStoreCreate();
71760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new ProgramFragmentStore(id);
71860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
71960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
72060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //////////////////////////////////////////////////////////////////////////////////
72160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // ProgramFragment
72260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
72360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public class ProgramFragment extends BaseObj {
72460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        ProgramFragment(int id) {
72560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = id;
72660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
72760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
72860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void destroy() {
72960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nScriptDestroy(mID);
73060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            mID = 0;
73160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
73260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
73360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        public void bindTexture(Allocation va, int slot) {
73460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            nProgramFragmentBindTexture(mID, slot, va.mID);
73560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
73660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
73760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        //public void bindSampler(Sampler vs, int slot) {
73860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            //nProgramFragmentBindSampler(mID, slot, vs.mID);
73960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        //}
74060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
74160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
74260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentBegin(Element in, Element out) {
74360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int inID = 0;
74460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int outID = 0;
74560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        if (in != null) {
74660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            inID = in.mID;
74760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
74860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        if (out != null) {
74960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich            outID = out.mID;
75060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        }
75160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentBegin(inID, outID);
75260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
75360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
75460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentSetType(int slot, Type t) {
75560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentSetType(slot, t.mID);
75660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
75760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
75860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentSetType(int slot, EnvMode t) {
75960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentSetEnvMode(slot, t.mID);
76060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
76160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
76260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void programFragmentSetTexEnable(int slot, boolean enable) {
76360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nProgramFragmentSetTexEnable(slot, enable);
76460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
76560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
76660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public ProgramFragment programFragmentCreate() {
76760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        int id = nProgramFragmentCreate();
76860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        return new ProgramFragment(id);
76960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
77060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
77160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
77260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    ///////////////////////////////////////////////////////////////////////////////////
77360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    // Root state
77460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
77560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void contextBindRootScript(Script s) {
77660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nContextBindRootScript(s.mID);
77760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
77860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
77960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //public void contextBindSampler(Sampler s, int slot) {
78060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        //nContextBindSampler(s.mID);
78160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    //}
78260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
78360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void contextBindProgramFragmentStore(ProgramFragmentStore pfs) {
78460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nContextBindProgramFragmentStore(pfs.mID);
78560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
78660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
78760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    public void contextBindProgramFragment(ProgramFragment pf) {
78860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich        nContextBindProgramFragment(pf.mID);
78960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    }
79060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
79160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich/*
79260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    RsAdapter2D rsAdapter2DCreate ();
79360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    void rsAdapter2DBindAllocation (RsAdapter2D adapt, RsAllocation alloc);
79460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    void rsAdapter2DDestroy (RsAdapter2D adapter);
79560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    void rsAdapter2DSetConstraint (RsAdapter2D adapter, RsDimension dim, uint32_t value);
79660aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    void rsAdapter2DData (RsAdapter2D adapter, const void * data);
79760aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    void rsAdapter2DSubData (RsAdapter2D adapter, uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h, const void * data);
79860aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    void rsSamplerBegin ();
79960aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    void rsSamplerSet (RsSamplerParam p, RsSamplerValue value);
80060aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    RsSampler rsSamplerCreate ();
80160aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich    void rsSamplerBind (RsSampler sampler, RsAllocation alloc);
80260aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich*/
80360aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
80460aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich}
80560aa3eaf559b1410898c228e4f6ab7920f3953d0Jack Palevich
806