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