Element.java revision 8cb39de03aef6097a90033600d11a60ae000a6e4
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;
27718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    Element[] mElements;
28718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    String[] mElementNames;
29ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams
30718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    DataType mType;
31718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    DataKind mKind;
32718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    boolean mNormalized;
33718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int mVectorSize;
34718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
35718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    int getSizeBytes() {return mSize;}
36718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
37718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    public enum DataType {
38718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        //FLOAT_16 (1, 2),
39718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        FLOAT_32 (2, 4),
40718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        //FLOAT_64 (3, 8),
41718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        SIGNED_8 (4, 1),
42718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        SIGNED_16 (5, 2),
43718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        SIGNED_32 (6, 4),
44718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        //SIGNED_64 (7, 8),
45718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        UNSIGNED_8 (8, 1),
46718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        UNSIGNED_16 (9, 2),
47718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        UNSIGNED_32 (10, 4),
48718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        //UNSIGNED_64 (11, 8),
49718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
50718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        UNSIGNED_5_6_5 (12, 2),
51718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        UNSIGNED_5_5_5_1 (13, 2),
52718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        UNSIGNED_4_4_4_4 (14, 2),
53718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
54718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        RS_ELEMENT (15, 4),
55718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        RS_TYPE (16, 4),
56718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        RS_ALLOCATION (17, 4),
57718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        RS_SAMPLER (18, 4),
58718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        RS_SCRIPT (19, 4),
59718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        RS_MESH (20, 4),
60718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        RS_PROGRAM_FRAGMENT (21, 4),
61718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        RS_PROGRAM_VERTEX (22, 4),
62718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        RS_PROGRAM_RASTER (23, 4),
63718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        RS_PROGRAM_STORE (24, 4);
64718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
65718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        int mID;
66718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        int mSize;
67718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        DataType(int id, int size) {
68718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            mID = id;
69718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            mSize = size;
70718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        }
71768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams    }
72768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams
73718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    public enum DataKind {
74718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        USER (0),
75718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        COLOR (1),
76718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        POSITION (2),
77718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        TEXTURE (3),
78718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        NORMAL (4),
79718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        INDEX (5),
80718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        POINT_SIZE(6),
81718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
82718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        PIXEL_L (7),
83718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        PIXEL_A (8),
84718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        PIXEL_LA (9),
85718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        PIXEL_RGB (10),
86718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        PIXEL_RGBA (11);
87718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
88718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        int mID;
89718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        DataKind(int id) {
90718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            mID = id;
91ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        }
9236e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
9336e612a488511940b61f09803b270aa1c61b68e0Jason Sams
948cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element U8(RenderScript rs) {
958cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_U8 == null) {
968cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_U8 = createUser(rs, DataType.UNSIGNED_8);
973c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
988cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_U8;
993c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
100ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams
1018cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element I8(RenderScript rs) {
1028cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_I8 == null) {
1038cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_I8 = createUser(rs, DataType.SIGNED_8);
1043c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1058cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_I8;
1063c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1073c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1088cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element U32(RenderScript rs) {
1098cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_U32 == null) {
1108cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_U32 = createUser(rs, DataType.UNSIGNED_32);
1113c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1128cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_U32;
1133c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1143c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1158cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element I32(RenderScript rs) {
1168cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_I32 == null) {
1178cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_I32 = createUser(rs, DataType.SIGNED_32);
1183c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1198cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_I32;
1203c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1213c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1228cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element F32(RenderScript rs) {
1238cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_F32 == null) {
1248cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_F32 = createUser(rs, DataType.FLOAT_32);
1253c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
1268cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_F32;
1273c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
1283c0dfbab807a459622aeade4940daddf482dec66Jason Sams
1298cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element ELEMENT(RenderScript rs) {
1308cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_ELEMENT == null) {
1318cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_ELEMENT = createUser(rs, DataType.RS_ELEMENT);
132a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams        }
1338cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_ELEMENT;
134a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams    }
135a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
1368cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element TYPE(RenderScript rs) {
1378cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_TYPE == null) {
1388cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_TYPE = createUser(rs, DataType.RS_TYPE);
139a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams        }
1408cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_TYPE;
141a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams    }
142a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
1438cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element ALLOCATION(RenderScript rs) {
1448cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_ALLOCATION == null) {
1458cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_ALLOCATION = createUser(rs, DataType.RS_ALLOCATION);
146a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams        }
1478cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_ALLOCATION;
148a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams    }
149a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
1508cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element SAMPLER(RenderScript rs) {
1518cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_SAMPLER == null) {
1528cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_SAMPLER = createUser(rs, DataType.RS_SAMPLER);
153a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams        }
1548cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_SAMPLER;
155a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams    }
156a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
1578cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element SCRIPT(RenderScript rs) {
1588cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_SCRIPT == null) {
1598cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_SCRIPT = createUser(rs, DataType.RS_SCRIPT);
160a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams        }
1618cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_SCRIPT;
162a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams    }
163a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
1648cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element MESH(RenderScript rs) {
1658cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_MESH == null) {
1668cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_MESH = createUser(rs, DataType.RS_MESH);
167a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams        }
1688cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_MESH;
169a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams    }
170a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
1718cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element PROGRAM_FRAGMENT(RenderScript rs) {
1728cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_PROGRAM_FRAGMENT == null) {
1738cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_PROGRAM_FRAGMENT = createUser(rs, DataType.RS_PROGRAM_FRAGMENT);
174a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams        }
1758cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_PROGRAM_FRAGMENT;
176a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams    }
177a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
1788cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element PROGRAM_VERTEX(RenderScript rs) {
1798cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_PROGRAM_VERTEX == null) {
1808cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_PROGRAM_VERTEX = createUser(rs, DataType.RS_PROGRAM_VERTEX);
181a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams        }
1828cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_PROGRAM_VERTEX;
183a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams    }
184a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
1858cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element PROGRAM_RASTER(RenderScript rs) {
1868cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_PROGRAM_RASTER == null) {
1878cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_PROGRAM_RASTER = createUser(rs, DataType.RS_PROGRAM_RASTER);
188a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams        }
1898cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_PROGRAM_RASTER;
190a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams    }
191a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
1928cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element PROGRAM_STORE(RenderScript rs) {
1938cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_PROGRAM_STORE == null) {
1948cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_PROGRAM_STORE = createUser(rs, DataType.RS_PROGRAM_STORE);
195a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams        }
1968cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_PROGRAM_STORE;
197a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams    }
198a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
199a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams
2003c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element A_8(RenderScript rs) {
2013c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_A_8 == null) {
202718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            rs.mElement_A_8 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_A);
2033c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2043c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_A_8;
2053c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
2063c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2073c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element RGB_565(RenderScript rs) {
2083c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_RGB_565 == null) {
209718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            rs.mElement_RGB_565 = createPixel(rs, DataType.UNSIGNED_5_6_5, DataKind.PIXEL_RGB);
2103c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2113c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_RGB_565;
2123c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
2133c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2143c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element RGB_888(RenderScript rs) {
2153c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_RGB_888 == null) {
216718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            rs.mElement_RGB_888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGB);
2173c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2183c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_RGB_888;
2193c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
2203c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2213c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element RGBA_5551(RenderScript rs) {
2223c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_RGBA_5551 == null) {
223718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            rs.mElement_RGBA_5551 = createPixel(rs, DataType.UNSIGNED_5_5_5_1, DataKind.PIXEL_RGBA);
2243c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2253c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_RGBA_5551;
2263c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
2273c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2283c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element RGBA_4444(RenderScript rs) {
2293c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_RGBA_4444 == null) {
230718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            rs.mElement_RGBA_4444 = createPixel(rs, DataType.UNSIGNED_4_4_4_4, DataKind.PIXEL_RGBA);
2313c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2323c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_RGBA_4444;
2333c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
2343c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2353c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element RGBA_8888(RenderScript rs) {
2363c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_RGBA_8888 == null) {
237718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            rs.mElement_RGBA_8888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGBA);
2383c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2393c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_RGBA_8888;
2403c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
2413c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2423c0dfbab807a459622aeade4940daddf482dec66Jason Sams    public static Element INDEX_16(RenderScript rs) {
2433c0dfbab807a459622aeade4940daddf482dec66Jason Sams        if(rs.mElement_INDEX_16 == null) {
244718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            rs.mElement_INDEX_16 = createIndex(rs);
2453c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2463c0dfbab807a459622aeade4940daddf482dec66Jason Sams        return rs.mElement_INDEX_16;
2473c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
2483c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2498cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element F32_2(RenderScript rs) {
2508cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_FLOAT_2 == null) {
2518cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_FLOAT_2 = createVector(rs, DataType.FLOAT_32, 2);
2523c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2538cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_FLOAT_2;
2543c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
2553c0dfbab807a459622aeade4940daddf482dec66Jason Sams
2568cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element F32_3(RenderScript rs) {
2578cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_FLOAT_3 == null) {
2588cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_FLOAT_3 = createVector(rs, DataType.FLOAT_32, 3);
2593c0dfbab807a459622aeade4940daddf482dec66Jason Sams        }
2608cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_FLOAT_3;
26136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
26236e612a488511940b61f09803b270aa1c61b68e0Jason Sams
2638cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element F32_4(RenderScript rs) {
2648cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_FLOAT_4 == null) {
2658cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_FLOAT_4 = createVector(rs, DataType.FLOAT_32, 4);
266718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        }
2678cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_FLOAT_4;
2683c0dfbab807a459622aeade4940daddf482dec66Jason Sams    }
26936e612a488511940b61f09803b270aa1c61b68e0Jason Sams
2708cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams    public static Element U8_4(RenderScript rs) {
2718cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        if(rs.mElement_UCHAR_4 == null) {
2728cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams            rs.mElement_UCHAR_4 = createVector(rs, DataType.UNSIGNED_8, 4);
27336e612a488511940b61f09803b270aa1c61b68e0Jason Sams        }
2748cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams        return rs.mElement_UCHAR_4;
27536e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
27636e612a488511940b61f09803b270aa1c61b68e0Jason Sams
27736e612a488511940b61f09803b270aa1c61b68e0Jason Sams
278718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    Element(RenderScript rs, Element[] e, String[] n) {
2793c0dfbab807a459622aeade4940daddf482dec66Jason Sams        super(rs);
280ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams        mSize = 0;
281718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        mElements = e;
282718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        mElementNames = n;
283718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        int[] ids = new int[mElements.length];
284718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        for (int ct = 0; ct < mElements.length; ct++ ) {
285718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            mSize += mElements[ct].mSize;
286718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            ids[ct] = mElements[ct].mID;
287718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        }
288718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        mID = rs.nElementCreate2(ids, mElementNames);
289718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    }
290718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
291718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    Element(RenderScript rs, DataType dt, DataKind dk, boolean norm, int size) {
292718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        super(rs);
293718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        mSize = dt.mSize * size;
294718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        mType = dt;
295718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        mKind = dk;
296718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        mNormalized = norm;
297718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        mVectorSize = size;
298718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        mID = rs.nElementCreate(dt.mID, dk.mID, norm, size);
29936e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
30036e612a488511940b61f09803b270aa1c61b68e0Jason Sams
30136e612a488511940b61f09803b270aa1c61b68e0Jason Sams    public void destroy() throws IllegalStateException {
3027ce033d797e5df5e2131e2ed459fba181eaf4658Jason Sams        super.destroy();
30336e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
30436e612a488511940b61f09803b270aa1c61b68e0Jason Sams
305718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    /////////////////////////////////////////
306718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    public static Element createUser(RenderScript rs, DataType dt) {
307718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        return new Element(rs, dt, DataKind.USER, false, 1);
308ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams    }
309ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams
310718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    public static Element createVector(RenderScript rs, DataType dt, int size) {
311718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        if (size < 2 || size > 4) {
312718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            throw new IllegalArgumentException("Bad size");
31336e612a488511940b61f09803b270aa1c61b68e0Jason Sams        }
314718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        return new Element(rs, dt, DataKind.USER, false, size);
315718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    }
31636e612a488511940b61f09803b270aa1c61b68e0Jason Sams
317718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    public static Element createIndex(RenderScript rs) {
318718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        return new Element(rs, DataType.UNSIGNED_16, DataKind.INDEX, false, 1);
319718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    }
32036e612a488511940b61f09803b270aa1c61b68e0Jason Sams
321718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    public static Element createPixel(RenderScript rs, DataType dt, DataKind dk) {
322718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        if (!(dk == DataKind.PIXEL_L ||
323718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams              dk == DataKind.PIXEL_A ||
324718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams              dk == DataKind.PIXEL_LA ||
325718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams              dk == DataKind.PIXEL_RGB ||
326718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams              dk == DataKind.PIXEL_RGBA)) {
327718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            throw new IllegalArgumentException("Unsupported DataKind");
32807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
329718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        if (!(dt == DataType.UNSIGNED_8 ||
330718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams              dt == DataType.UNSIGNED_5_6_5 ||
331718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams              dt == DataType.UNSIGNED_4_4_4_4 ||
332718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams              dt == DataType.UNSIGNED_5_5_5_1)) {
333718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            throw new IllegalArgumentException("Unsupported DataType");
33407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
335718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        if (dt == DataType.UNSIGNED_5_6_5 && dk != DataKind.PIXEL_RGB) {
336718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            throw new IllegalArgumentException("Bad kind and type combo");
33707ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
338718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        if (dt == DataType.UNSIGNED_5_5_5_1 && dk != DataKind.PIXEL_RGBA) {
339718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            throw new IllegalArgumentException("Bad kind and type combo");
34025ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams        }
341718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        if (dt == DataType.UNSIGNED_4_4_4_4 && dk != DataKind.PIXEL_RGBA) {
342718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            throw new IllegalArgumentException("Bad kind and type combo");
34307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
34407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
345718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        int size = 1;
346718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        if (dk == DataKind.PIXEL_LA) {
347718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            size = 2;
348334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        }
349718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        if (dk == DataKind.PIXEL_RGB) {
350718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            size = 3;
35107ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
352718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        if (dk == DataKind.PIXEL_RGBA) {
353718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            size = 4;
354334ea0c98f051b5a6b85bc616c93304651854298Jason Sams        }
355334ea0c98f051b5a6b85bc616c93304651854298Jason Sams
356718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        return new Element(rs, dt, dk, true, size);
357718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    }
35807ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
359718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    public static class Builder {
360718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        RenderScript mRS;
361718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        Element[] mElements;
362718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        String[] mElementNames;
363718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        int mCount;
364334ea0c98f051b5a6b85bc616c93304651854298Jason Sams
365718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        public Builder(RenderScript rs) {
366718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            mRS = rs;
367718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            mCount = 0;
368718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            mElements = new Element[8];
369718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            mElementNames = new String[8];
370718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        }
371718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams
372718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        public void add(Element element, String name) {
373718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            if(mCount == mElements.length) {
374718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams                Element[] e = new Element[mCount + 8];
375718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams                String[] s = new String[mCount + 8];
376718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams                System.arraycopy(mElements, 0, e, 0, mCount);
377718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams                System.arraycopy(mElementNames, 0, s, 0, mCount);
378718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams                mElements = e;
379718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams                mElementNames = s;
380718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            }
381718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            mElements[mCount] = element;
382718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            mElementNames[mCount] = name;
383718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            mCount++;
38407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams        }
38507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams
38622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        public Element create() {
387771bebb94054d06f97284379c93a2620613513c3Jason Sams            mRS.validate();
388718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            Element[] ein = new Element[mCount];
389718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            String[] sin = new String[mCount];
390718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            java.lang.System.arraycopy(mElements, 0, ein, 0, mCount);
391718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            java.lang.System.arraycopy(mElementNames, 0, sin, 0, mCount);
392718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams            return new Element(mRS, ein, sin);
39336e612a488511940b61f09803b270aa1c61b68e0Jason Sams        }
39436e612a488511940b61f09803b270aa1c61b68e0Jason Sams    }
39536e612a488511940b61f09803b270aa1c61b68e0Jason Sams
396718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    static void initPredefined(RenderScript rs) {
397718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        int a8 = rs.nElementCreate(DataType.UNSIGNED_8.mID,
398718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams                                   DataKind.PIXEL_A.mID, true, 1);
399718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        int rgba4444 = rs.nElementCreate(DataType.UNSIGNED_4_4_4_4.mID,
400718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams                                         DataKind.PIXEL_RGBA.mID, true, 4);
401718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        int rgba8888 = rs.nElementCreate(DataType.UNSIGNED_8.mID,
402718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams                                         DataKind.PIXEL_RGBA.mID, true, 4);
403718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        int rgb565 = rs.nElementCreate(DataType.UNSIGNED_5_6_5.mID,
404718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams                                       DataKind.PIXEL_RGB.mID, true, 3);
405718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams        rs.nInitElements(a8, rgba4444, rgba8888, rgb565);
406718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams    }
40736e612a488511940b61f09803b270aa1c61b68e0Jason Sams}
40836e612a488511940b61f09803b270aa1c61b68e0Jason Sams
409