Element.java revision 771bebb94054d06f97284379c93a2620613513c3
136e612a488511940b61f09803b270aa1c61b68e0Jason Sams/*
236e612a488511940b61f09803b270aa1c61b68e0Jason Sams * Copyright (C) 2008 The Android Open Source Project
336e612a488511940b61f09803b270aa1c61b68e0Jason Sams *
436e612a488511940b61f09803b270aa1c61b68e0Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
536e612a488511940b61f09803b270aa1c61b68e0Jason Sams * you may not use this file except in compliance with the License.
636e612a488511940b61f09803b270aa1c61b68e0Jason Sams * You may obtain a copy of the License at
736e612a488511940b61f09803b270aa1c61b68e0Jason Sams *
836e612a488511940b61f09803b270aa1c61b68e0Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
936e612a488511940b61f09803b270aa1c61b68e0Jason Sams *
1036e612a488511940b61f09803b270aa1c61b68e0Jason Sams * Unless required by applicable law or agreed to in writing, software
1136e612a488511940b61f09803b270aa1c61b68e0Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1236e612a488511940b61f09803b270aa1c61b68e0Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1336e612a488511940b61f09803b270aa1c61b68e0Jason Sams * See the License for the specific language governing permissions and
1436e612a488511940b61f09803b270aa1c61b68e0Jason Sams * limitations under the License.
1536e612a488511940b61f09803b270aa1c61b68e0Jason Sams */
1636e612a488511940b61f09803b270aa1c61b68e0Jason Sams
1736e612a488511940b61f09803b270aa1c61b68e0Jason Samspackage android.renderscript;
1836e612a488511940b61f09803b270aa1c61b68e0Jason Sams
1943ee06857bb7f99446d1d84f8789016c5d105558Jason Samsimport java.lang.reflect.Field;
2036e612a488511940b61f09803b270aa1c61b68e0Jason Sams
2136e612a488511940b61f09803b270aa1c61b68e0Jason Sams/**
2236e612a488511940b61f09803b270aa1c61b68e0Jason Sams * @hide
2336e612a488511940b61f09803b270aa1c61b68e0Jason Sams *
2436e612a488511940b61f09803b270aa1c61b68e0Jason Sams **/
2536e612a488511940b61f09803b270aa1c61b68e0Jason Samspublic class Element extends BaseObj {
26ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    int mSize;
27ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    Entry[] mEntries;
28ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams
29768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    int getSizeBytes() {
30768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams        return mSize;
31768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    }
32768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    int getComponentCount() {
33768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams        return mEntries.length;
34768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    }
35768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    Element.DataType getComponentDataType(int num) {
36768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams        return mEntries[num].mType;
37768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    }
38768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    Element.DataKind getComponentDataKind(int num) {
39768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams        return mEntries[num].mKind;
40768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    }
41768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    boolean getComponentIsNormalized(int num) {
42768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams        return mEntries[num].mIsNormalized;
43768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    }
44768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    int getComponentBits(int num) {
45768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams        return mEntries[num].mBits;
46768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    }
47768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    String getComponentName(int num) {
48768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams        return mEntries[num].mName;
49768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    }
50768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams
51ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    static class Entry {
52768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams        //Element mElement;
53ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        Element.DataType mType;
54ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        Element.DataKind mKind;
55ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        boolean mIsNormalized;
56ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        int mBits;
57ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        String mName;
58ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams
59768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams        //Entry(Element e, int bits) {
60768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams            //mElement = e;
61768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams            //int mBits = bits;
62768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams        //}
63ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams
64ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        Entry(DataType dt, DataKind dk, boolean isNorm, int bits, String name) {
65ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams            mType = dt;
66ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams            mKind = dk;
67ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams            mIsNormalized = isNorm;
68ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams            mBits = bits;
69ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams            mName = name;
70ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        }
7136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
7236e612a488511940b61f09803b270aa1c61b68e0Jason Sams
733c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element USER_U8(RenderScript rs) {
743c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_USER_U8 == null) {
753c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_U8 = new Element(rs, 1);
763c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_U8.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 8, null);
773c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_U8.init();
783c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
793c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_USER_U8;
803c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
81ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams
823c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element USER_I8(RenderScript rs) {
833c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_USER_I8 == null) {
843c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_I8 = new Element(rs, 1);
853c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_I8.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 8, null);
863c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_I8.init();
873c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
883c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_USER_I8;
893c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
903c0dfbab807a459622aeade4940daddf482dec66Jason Sams
913c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element USER_U16(RenderScript rs) {
923c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_USER_U16 == null) {
933c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_U16 = new Element(rs, 1);
943c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_U16.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 16, null);
953c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_U16.init();
963c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
973c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_USER_U16;
983c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
993c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1003c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element USER_I16(RenderScript rs) {
1013c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_USER_I16 == null) {
1023c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_I16 = new Element(rs, 1);
1033c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_I16.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 16, null);
1043c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_I16.init();
1053c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1063c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_USER_I16;
1073c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1083c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1093c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element USER_U32(RenderScript rs) {
1103c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_USER_U32 == null) {
1113c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_U32 = new Element(rs, 1);
1123c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_U32.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.USER, false, 32, null);
1133c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_U32.init();
1143c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1153c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_USER_U32;
1163c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1173c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1183c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element USER_I32(RenderScript rs) {
1193c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_USER_I32 == null) {
1203c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_I32 = new Element(rs, 1);
1213c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_I32.mEntries[0] = new Entry(DataType.SIGNED, DataKind.USER, false, 32, null);
1223c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_I32.init();
1233c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1243c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_USER_I32;
1253c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1263c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1273c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element USER_F32(RenderScript rs) {
1283c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_USER_FLOAT == null) {
1293c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_FLOAT = new Element(rs, 1);
1303c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_FLOAT.mEntries[0] = new Entry(DataType.FLOAT, DataKind.USER, false, 32, null);
1313c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_USER_FLOAT.init();
1323c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1333c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_USER_FLOAT;
1343c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1353c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1363c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element A_8(RenderScript rs) {
1373c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_A_8 == null) {
1383c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_A_8 = new Element(rs, 1);
1393c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_A_8.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 8, "a");
1403c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_A_8.init();
1413c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1423c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_A_8;
1433c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1443c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1453c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element RGB_565(RenderScript rs) {
1463c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_RGB_565 == null) {
1473c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGB_565 = new Element(rs, 3);
1483c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGB_565.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 5, "r");
1493c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGB_565.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 6, "g");
1503c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGB_565.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 5, "b");
1513c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGB_565.init();
1523c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1533c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_RGB_565;
1543c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1553c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1563c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element RGB_888(RenderScript rs) {
1573c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_RGB_888 == null) {
1583c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGB_888 = new Element(rs, 3);
1593c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGB_888.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 8, "r");
1603c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGB_888.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 8, "g");
1613c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGB_888.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 8, "b");
1623c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGB_888.init();
1633c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1643c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_RGB_888;
1653c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1663c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1673c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element RGBA_5551(RenderScript rs) {
1683c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_RGBA_5551 == null) {
1693c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_5551 = new Element(rs, 4);
1703c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_5551.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 5, "r");
1713c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_5551.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 5, "g");
1723c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_5551.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 5, "b");
1733c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_5551.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 1, "a");
1743c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_5551.init();
1753c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1763c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_RGBA_5551;
1773c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1783c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1793c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element RGBA_4444(RenderScript rs) {
1803c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_RGBA_4444 == null) {
1813c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_4444 = new Element(rs, 4);
1823c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_4444.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 4, "r");
1833c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_4444.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 4, "g");
1843c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_4444.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 4, "b");
1853c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_4444.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 4, "a");
1863c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_4444.init();
1873c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1883c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_RGBA_4444;
1893c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1903c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1913c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element RGBA_8888(RenderScript rs) {
1923c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_RGBA_8888 == null) {
1933c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_8888 = new Element(rs, 4);
1943c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_8888.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.RED, true, 8, "r");
1953c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_8888.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.GREEN, true, 8, "g");
1963c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_8888.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.BLUE, true, 8, "b");
1973c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_8888.mEntries[3] = new Entry(DataType.UNSIGNED, DataKind.ALPHA, true, 8, "a");
1983c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_RGBA_8888.init();
1993c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2003c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_RGBA_8888;
2013c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
2023c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2033c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element INDEX_16(RenderScript rs) {
2043c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_INDEX_16 == null) {
2053c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_INDEX_16 = new Element(rs, 1);
2063c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_INDEX_16.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.INDEX, false, 16, "index");
2073c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_INDEX_16.init();
2083c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2093c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_INDEX_16;
2103c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
2113c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2123c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element XY_F32(RenderScript rs) {
2133c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_XY_F32 == null) {
2143c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_XY_F32 = new Element(rs, 2);
2153c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_XY_F32.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.X, false, 32, "x");
2163c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_XY_F32.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.Y, false, 32, "y");
2173c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_XY_F32.init();
2183c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2193c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_XY_F32;
2203c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
2213c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2223c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element XYZ_F32(RenderScript rs) {
2233c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_XYZ_F32 == null) {
2243c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_XYZ_F32 = new Element(rs, 3);
2253c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_XYZ_F32.mEntries[0] = new Entry(DataType.UNSIGNED, DataKind.X, false, 32, "x");
2263c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_XYZ_F32.mEntries[1] = new Entry(DataType.UNSIGNED, DataKind.Y, false, 32, "y");
2273c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_XYZ_F32.mEntries[2] = new Entry(DataType.UNSIGNED, DataKind.Z, false, 32, "z");
2283c0dfbab807a459622aeade4940daddf482dec66Jason Sams            rs.mElement_XYZ_F32.init();
2293c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2303c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_XYZ_F32;
23136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
23236e612a488511940b61f09803b270aa1c61b68e0Jason Sams
2333c0dfbab807a459622aeade4940daddf482dec66Jason Sams    static void initPredefined(RenderScript rs) {
2343c0dfbab807a459622aeade4940daddf482dec66Jason Sams        rs.nInitElements(A_8(rs).mID, RGBA_4444(rs).mID, RGBA_8888(rs).mID, RGB_565(rs).mID);
2353c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
23636e612a488511940b61f09803b270aa1c61b68e0Jason Sams
23736e612a488511940b61f09803b270aa1c61b68e0Jason Sams    public enum DataType {
23836e612a488511940b61f09803b270aa1c61b68e0Jason Sams        FLOAT (0),
23936e612a488511940b61f09803b270aa1c61b68e0Jason Sams        UNSIGNED (1),
24036e612a488511940b61f09803b270aa1c61b68e0Jason Sams        SIGNED (2);
24136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
24236e612a488511940b61f09803b270aa1c61b68e0Jason Sams        int mID;
24336e612a488511940b61f09803b270aa1c61b68e0Jason Sams        DataType(int id) {
24436e612a488511940b61f09803b270aa1c61b68e0Jason Sams            mID = id;
24536e612a488511940b61f09803b270aa1c61b68e0Jason Sams        }
24636e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
24736e612a488511940b61f09803b270aa1c61b68e0Jason Sams
24836e612a488511940b61f09803b270aa1c61b68e0Jason Sams    public enum DataKind {
24936e612a488511940b61f09803b270aa1c61b68e0Jason Sams        USER (0),
25036e612a488511940b61f09803b270aa1c61b68e0Jason Sams        RED (1),
25136e612a488511940b61f09803b270aa1c61b68e0Jason Sams        GREEN (2),
25236e612a488511940b61f09803b270aa1c61b68e0Jason Sams        BLUE (3),
25336e612a488511940b61f09803b270aa1c61b68e0Jason Sams        ALPHA (4),
25436e612a488511940b61f09803b270aa1c61b68e0Jason Sams        LUMINANCE (5),
25536e612a488511940b61f09803b270aa1c61b68e0Jason Sams        INTENSITY (6),
25636e612a488511940b61f09803b270aa1c61b68e0Jason Sams        X (7),
25736e612a488511940b61f09803b270aa1c61b68e0Jason Sams        Y (8),
25836e612a488511940b61f09803b270aa1c61b68e0Jason Sams        Z (9),
25936e612a488511940b61f09803b270aa1c61b68e0Jason Sams        W (10),
26036e612a488511940b61f09803b270aa1c61b68e0Jason Sams        S (11),
26136e612a488511940b61f09803b270aa1c61b68e0Jason Sams        T (12),
26236e612a488511940b61f09803b270aa1c61b68e0Jason Sams        Q (13),
26336e612a488511940b61f09803b270aa1c61b68e0Jason Sams        R (14),
26436e612a488511940b61f09803b270aa1c61b68e0Jason Sams        NX (15),
26536e612a488511940b61f09803b270aa1c61b68e0Jason Sams        NY (16),
26636e612a488511940b61f09803b270aa1c61b68e0Jason Sams        NZ (17),
26725ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams        INDEX (18),
26825ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams        POINT_SIZE(19);
26936e612a488511940b61f09803b270aa1c61b68e0Jason Sams
27036e612a488511940b61f09803b270aa1c61b68e0Jason Sams        int mID;
27136e612a488511940b61f09803b270aa1c61b68e0Jason Sams        DataKind(int id) {
27236e612a488511940b61f09803b270aa1c61b68e0Jason Sams            mID = id;
27336e612a488511940b61f09803b270aa1c61b68e0Jason Sams        }
27436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
27536e612a488511940b61f09803b270aa1c61b68e0Jason Sams
2763c0dfbab807a459622aeade4940daddf482dec66Jason Sams    Element(RenderScript rs, int count) {
2773c0dfbab807a459622aeade4940daddf482dec66Jason Sams        super(rs);
278ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        mSize = 0;
2793c0dfbab807a459622aeade4940daddf482dec66Jason Sams        mEntries = new Entry[count];
28036e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
28136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
28236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    public void destroy() throws IllegalStateException {
2837ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams        super.destroy();
28436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
28536e612a488511940b61f09803b270aa1c61b68e0Jason Sams
28643ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    public static Element createFromClass(RenderScript rs, Class c) {
287771bebb94054d06f97284379c93a2620613513c3Jason Sams        rs.validate();
28843ee06857bb7f99446d1d84f8789016c5d105558Jason Sams        Field[] fields = c.getFields();
28943ee06857bb7f99446d1d84f8789016c5d105558Jason Sams        Builder b = new Builder(rs);
29043ee06857bb7f99446d1d84f8789016c5d105558Jason Sams
29143ee06857bb7f99446d1d84f8789016c5d105558Jason Sams        for(Field f: fields) {
29243ee06857bb7f99446d1d84f8789016c5d105558Jason Sams            Class fc = f.getType();
29343ee06857bb7f99446d1d84f8789016c5d105558Jason Sams            if(fc == int.class) {
29443ee06857bb7f99446d1d84f8789016c5d105558Jason Sams                b.add(Element.DataType.SIGNED, Element.DataKind.USER, false, 32, f.getName());
29543ee06857bb7f99446d1d84f8789016c5d105558Jason Sams            } else if(fc == short.class) {
29643ee06857bb7f99446d1d84f8789016c5d105558Jason Sams                b.add(Element.DataType.SIGNED, Element.DataKind.USER, false, 16, f.getName());
29743ee06857bb7f99446d1d84f8789016c5d105558Jason Sams            } else if(fc == byte.class) {
29843ee06857bb7f99446d1d84f8789016c5d105558Jason Sams                b.add(Element.DataType.SIGNED, Element.DataKind.USER, false, 8, f.getName());
29943ee06857bb7f99446d1d84f8789016c5d105558Jason Sams            } else if(fc == float.class) {
30043ee06857bb7f99446d1d84f8789016c5d105558Jason Sams                b.add(Element.DataType.FLOAT, Element.DataKind.USER, false, 32, f.getName());
30143ee06857bb7f99446d1d84f8789016c5d105558Jason Sams            } else {
30243ee06857bb7f99446d1d84f8789016c5d105558Jason Sams                throw new IllegalArgumentException("Unkown field type");
30343ee06857bb7f99446d1d84f8789016c5d105558Jason Sams            }
30443ee06857bb7f99446d1d84f8789016c5d105558Jason Sams        }
30543ee06857bb7f99446d1d84f8789016c5d105558Jason Sams        return b.create();
30643ee06857bb7f99446d1d84f8789016c5d105558Jason Sams    }
30736e612a488511940b61f09803b270aa1c61b68e0Jason Sams
308ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    static synchronized void internalCreate(RenderScript rs, Element e) {
309ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        rs.nElementBegin();
310ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        int bits = 0;
311ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        for (int ct=0; ct < e.mEntries.length; ct++) {
312ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams            Entry en = e.mEntries[ct];
313768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams            //if(en.mElement !=  null) {
314ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams                //rs.nElementAdd(en.mElement.mID);
315768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams            //} else
316768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams            {
317768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams                rs.nElementAdd(en.mKind.mID, en.mType.mID, en.mIsNormalized, en.mBits, en.mName);
318ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams                bits += en.mBits;
319ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams            }
320ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        }
321ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        e.mID = rs.nElementCreate();
322ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        e.mSize = (bits + 7) >> 3;
323ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    }
324ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams
3253c0dfbab807a459622aeade4940daddf482dec66Jason Sams    void init() {
326771bebb94054d06f97284379c93a2620613513c3Jason Sams        mRS.validate();
327ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        internalCreate(mRS, this);
328ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    }
329ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams
33036e612a488511940b61f09803b270aa1c61b68e0Jason Sams
33136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    public static class Builder {
33236e612a488511940b61f09803b270aa1c61b68e0Jason Sams        RenderScript mRS;
33322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        Entry[] mEntries;
33422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        int mEntryCount;
33536e612a488511940b61f09803b270aa1c61b68e0Jason Sams
33622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        public Builder(RenderScript rs) {
33736e612a488511940b61f09803b270aa1c61b68e0Jason Sams            mRS = rs;
33822534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mEntryCount = 0;
33922534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mEntries = new Entry[8];
34036e612a488511940b61f09803b270aa1c61b68e0Jason Sams        }
34136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
34222534176fb5c1257130ef4ee589739ca42766a32Jason Sams        void addEntry(Entry e) {
34322534176fb5c1257130ef4ee589739ca42766a32Jason Sams            if(mEntries.length >= mEntryCount) {
34422534176fb5c1257130ef4ee589739ca42766a32Jason Sams                Entry[] en = new Entry[mEntryCount + 8];
34581e4640d18d451992cb504b356ff4d2dc1b7f297Romain Guy                System.arraycopy(mEntries, 0, en, 0, mEntries.length);
34622534176fb5c1257130ef4ee589739ca42766a32Jason Sams                mEntries = en;
34736e612a488511940b61f09803b270aa1c61b68e0Jason Sams            }
34822534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mEntries[mEntryCount] = e;
34922534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mEntryCount++;
35036e612a488511940b61f09803b270aa1c61b68e0Jason Sams        }
35136e612a488511940b61f09803b270aa1c61b68e0Jason Sams
352768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams        //public Builder add(Element e) throws IllegalArgumentException {
353768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams            //Entry en = new Entry(e, e.mSize * 8);
354768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams            //addEntry(en);
355768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams            //return this;
356768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams        //}
35736e612a488511940b61f09803b270aa1c61b68e0Jason Sams
35843ee06857bb7f99446d1d84f8789016c5d105558Jason Sams        public Builder add(Element.DataType dt, Element.DataKind dk, boolean isNormalized, int bits, String name) {
359ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams            Entry en = new Entry(dt, dk, isNormalized, bits, name);
36022534176fb5c1257130ef4ee589739ca42766a32Jason Sams            addEntry(en);
36136e612a488511940b61f09803b270aa1c61b68e0Jason Sams            return this;
36236e612a488511940b61f09803b270aa1c61b68e0Jason Sams        }
36336e612a488511940b61f09803b270aa1c61b68e0Jason Sams
36443ee06857bb7f99446d1d84f8789016c5d105558Jason Sams        public Builder add(Element.DataType dt, Element.DataKind dk, boolean isNormalized, int bits) {
36543ee06857bb7f99446d1d84f8789016c5d105558Jason Sams            add(dt, dk, isNormalized, bits, null);
36643ee06857bb7f99446d1d84f8789016c5d105558Jason Sams            return this;
36743ee06857bb7f99446d1d84f8789016c5d105558Jason Sams        }
36843ee06857bb7f99446d1d84f8789016c5d105558Jason Sams
369334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        public Builder addFloat(Element.DataKind dk) {
370334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, dk, false, 32, null);
371334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            return this;
372334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        }
373334ea0c98f051b5a6b85bc616c93304651854298Jason Sams
374334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        public Builder addFloat(Element.DataKind dk, String name) {
375334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, dk, false, 32, name);
376334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            return this;
377334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        }
378334ea0c98f051b5a6b85bc616c93304651854298Jason Sams
379334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        public Builder addFloatXY() {
380334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, DataKind.X, false, 32, null);
381334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, DataKind.Y, false, 32, null);
382334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            return this;
383334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        }
384334ea0c98f051b5a6b85bc616c93304651854298Jason Sams
38507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        public Builder addFloatXY(String prefix) {
3862525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.X, false, 32, prefix + "x");
3872525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.Y, false, 32, prefix + "y");
38807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams            return this;
38907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
39007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
391334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        public Builder addFloatXYZ() {
392334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, DataKind.X, false, 32, null);
393334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, DataKind.Y, false, 32, null);
394334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, DataKind.Z, false, 32, null);
395334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            return this;
396334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        }
39725ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams
39807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        public Builder addFloatXYZ(String prefix) {
3992525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.X, false, 32, prefix + "x");
4002525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.Y, false, 32, prefix + "y");
4012525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.Z, false, 32, prefix + "z");
40207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams            return this;
40307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
40407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
4054f7136c6595ba862be49a660180f084dad17325bRomain Guy        public Builder addFloatST() {
4064f7136c6595ba862be49a660180f084dad17325bRomain Guy            add(DataType.FLOAT, DataKind.S, false, 32, null);
4074f7136c6595ba862be49a660180f084dad17325bRomain Guy            add(DataType.FLOAT, DataKind.T, false, 32, null);
4084f7136c6595ba862be49a660180f084dad17325bRomain Guy            return this;
4094f7136c6595ba862be49a660180f084dad17325bRomain Guy        }
410334ea0c98f051b5a6b85bc616c93304651854298Jason Sams
41107ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        public Builder addFloatST(String prefix) {
4122525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.S, false, 32, prefix + "s");
4132525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.T, false, 32, prefix + "t");
41407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams            return this;
41507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
41607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
41707ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        public Builder addFloatNorm() {
41807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams            add(DataType.FLOAT, DataKind.NX, false, 32, null);
41907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams            add(DataType.FLOAT, DataKind.NY, false, 32, null);
42007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams            add(DataType.FLOAT, DataKind.NZ, false, 32, null);
42107ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams            return this;
42207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
42307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
42407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        public Builder addFloatNorm(String prefix) {
4252525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.NX, false, 32, prefix + "nx");
4262525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.NY, false, 32, prefix + "ny");
4272525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.NZ, false, 32, prefix + "nz");
42807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams            return this;
42907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
43007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
43125ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams        public Builder addFloatPointSize() {
43225ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams            add(DataType.FLOAT, DataKind.POINT_SIZE, false, 32, null);
43325ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams            return this;
43425ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams        }
43525ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams
4362525a815220652b37e2e390fe8c62394a6d0e574Jason Sams        public Builder addFloatPointSize(String prefix) {
4372525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.POINT_SIZE, false, 32, prefix + "pointSize");
43807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams            return this;
43907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
44007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
441334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        public Builder addFloatRGB() {
442334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, DataKind.RED, false, 32, null);
443334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, DataKind.GREEN, false, 32, null);
444334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, DataKind.BLUE, false, 32, null);
445334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            return this;
446334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        }
447334ea0c98f051b5a6b85bc616c93304651854298Jason Sams
44807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        public Builder addFloatRGB(String prefix) {
4492525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.RED, false, 32, prefix + "r");
4502525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.GREEN, false, 32, prefix + "g");
4512525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.BLUE, false, 32, prefix + "b");
45207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams            return this;
45307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
45407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
455334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        public Builder addFloatRGBA() {
456334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, DataKind.RED, false, 32, null);
457334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, DataKind.GREEN, false, 32, null);
458334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, DataKind.BLUE, false, 32, null);
459334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.FLOAT, DataKind.ALPHA, false, 32, null);
460334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            return this;
461334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        }
462334ea0c98f051b5a6b85bc616c93304651854298Jason Sams
46307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        public Builder addFloatRGBA(String prefix) {
4642525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.RED, false, 32, prefix + "r");
4652525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.GREEN, false, 32, prefix + "g");
4662525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.BLUE, false, 32, prefix + "b");
4672525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.FLOAT, DataKind.ALPHA, false, 32, prefix + "a");
46807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams            return this;
46907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
47007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
471334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        public Builder addUNorm8RGBA() {
472334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.UNSIGNED, DataKind.RED, true, 8, null);
473334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.UNSIGNED, DataKind.GREEN, true, 8, null);
474334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.UNSIGNED, DataKind.BLUE, true, 8, null);
475334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            add(DataType.UNSIGNED, DataKind.ALPHA, true, 8, null);
476334ea0c98f051b5a6b85bc616c93304651854298Jason Sams            return this;
477334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        }
478334ea0c98f051b5a6b85bc616c93304651854298Jason Sams
47907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        public Builder addUNorm8RGBA(String prefix) {
4802525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.UNSIGNED, DataKind.RED, true, 8, prefix + "r");
4812525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.UNSIGNED, DataKind.GREEN, true, 8, prefix + "g");
4822525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.UNSIGNED, DataKind.BLUE, true, 8, prefix + "b");
4832525a815220652b37e2e390fe8c62394a6d0e574Jason Sams            add(DataType.UNSIGNED, DataKind.ALPHA, true, 8, prefix + "a");
48407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams            return this;
48507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
48607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
48722534176fb5c1257130ef4ee589739ca42766a32Jason Sams        public Element create() {
488771bebb94054d06f97284379c93a2620613513c3Jason Sams            mRS.validate();
4893c0dfbab807a459622aeade4940daddf482dec66Jason Sams            Element e = new Element(mRS, mEntryCount);
490ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams            java.lang.System.arraycopy(mEntries, 0, e.mEntries, 0, mEntryCount);
4913c0dfbab807a459622aeade4940daddf482dec66Jason Sams            e.init();
492ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams            return e;
49336e612a488511940b61f09803b270aa1c61b68e0Jason Sams        }
49436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
49536e612a488511940b61f09803b270aa1c61b68e0Jason Sams
49636e612a488511940b61f09803b270aa1c61b68e0Jason Sams}
49736e612a488511940b61f09803b270aa1c61b68e0Jason Sams
498