Element.java revision 8e90f2bc1fa35a2dc7bd2aab8b8241b628800218
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; 20dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukimport android.util.Log; 2136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 2236e612a488511940b61f09803b270aa1c61b68e0Jason Sams/** 2311518acc8c416023d8c2192b441a1767205676d9Robert Ly * <p>The most basic data type. An element represents one cell of a memory allocation. 24347697710d033036c533bd6cee409c4b4c19d437Alex Sakhartchouk * Element is the basic data type of Renderscript. An element can be of two forms: Basic elements or Complex forms. 2511518acc8c416023d8c2192b441a1767205676d9Robert Ly * Examples of basic elements are:</p> 2611518acc8c416023d8c2192b441a1767205676d9Robert Ly * <ul> 2711518acc8c416023d8c2192b441a1767205676d9Robert Ly * <li>Single float value</li> 2811518acc8c416023d8c2192b441a1767205676d9Robert Ly * <li>4 element float vector</li> 2911518acc8c416023d8c2192b441a1767205676d9Robert Ly * <li>single RGB-565 color</li> 3011518acc8c416023d8c2192b441a1767205676d9Robert Ly * <li>single unsigned int 16</li> 3111518acc8c416023d8c2192b441a1767205676d9Robert Ly * </ul> 32347697710d033036c533bd6cee409c4b4c19d437Alex Sakhartchouk * <p>Complex elements contain a list of sub-elements and names that 3311518acc8c416023d8c2192b441a1767205676d9Robert Ly * represents a structure of data. The fields can be accessed by name 3411518acc8c416023d8c2192b441a1767205676d9Robert Ly * from a script or shader. The memory layout is defined and ordered. Data 3511518acc8c416023d8c2192b441a1767205676d9Robert Ly * alignment is determinied by the most basic primitive type. i.e. a float4 36a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * vector will be alligned to sizeof(float) and not sizeof(float4). The 37a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * ordering of elements in memory will be the order in which they were added 3811518acc8c416023d8c2192b441a1767205676d9Robert Ly * with each component aligned as necessary. No re-ordering will be done.</p> 39a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 4011518acc8c416023d8c2192b441a1767205676d9Robert Ly * <p>The primary source of elements are from scripts. A script that exports a 4111518acc8c416023d8c2192b441a1767205676d9Robert Ly * bind point for a data structure generates a Renderscript element to represent the 4211518acc8c416023d8c2192b441a1767205676d9Robert Ly * data exported by the script. The other common source of elements is from bitmap formats.</p> 4336e612a488511940b61f09803b270aa1c61b68e0Jason Sams **/ 4436e612a488511940b61f09803b270aa1c61b68e0Jason Samspublic class Element extends BaseObj { 45ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams int mSize; 46718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Element[] mElements; 47718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String[] mElementNames; 4870d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int[] mArraySizes; 49ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams 50718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams DataType mType; 51718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams DataKind mKind; 52718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams boolean mNormalized; 53718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mVectorSize; 54718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 55718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int getSizeBytes() {return mSize;} 56718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 57a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 58a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 59a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * DataType represents the basic type information for a basic element. The 60a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * naming convention follows. For numeric types its FLOAT, SIGNED, UNSIGNED 61a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * followed by the _BITS where BITS is the size of the data. BOOLEAN is a 62a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * true / false (1,0) represented in an 8 bit container. The UNSIGNED 63a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * variants with multiple bit definitions are for packed graphical data 64a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * formats and represents vectors with per vector member sizes which are 65a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * treated as a single unit for packing and alignment purposes. 66a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 67a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * MATRIX the three matrix types contain FLOAT_32 elements and are treated 68a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * as 32 bits for alignment purposes. 69a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 70a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * RS_* objects. 32 bit opaque handles. 71a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 72718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public enum DataType { 73718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams //FLOAT_16 (1, 2), 74718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams FLOAT_32 (2, 4), 7502f41705199336f808ece50d81585450e7f8f61fStephen Hines FLOAT_64 (3, 8), 76718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams SIGNED_8 (4, 1), 77718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams SIGNED_16 (5, 2), 78718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams SIGNED_32 (6, 4), 79ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines SIGNED_64 (7, 8), 80718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams UNSIGNED_8 (8, 1), 81718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams UNSIGNED_16 (9, 2), 82718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams UNSIGNED_32 (10, 4), 8352d836332f6aae74ed97fda1b53681f36710af64Stephen Hines UNSIGNED_64 (11, 8), 84718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 85f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams BOOLEAN(12, 1), 86f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams 87f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams UNSIGNED_5_6_5 (13, 2), 88f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams UNSIGNED_5_5_5_1 (14, 2), 89f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams UNSIGNED_4_4_4_4 (15, 2), 90f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams 911d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams MATRIX_4X4 (16, 64), 921d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams MATRIX_3X3 (17, 36), 931d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams MATRIX_2X2 (18, 16), 941d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams 951d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_ELEMENT (1000, 4), 961d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_TYPE (1001, 4), 971d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_ALLOCATION (1002, 4), 981d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_SAMPLER (1003, 4), 991d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_SCRIPT (1004, 4), 1001d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_MESH (1005, 4), 1011d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_PROGRAM_FRAGMENT (1006, 4), 1021d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_PROGRAM_VERTEX (1007, 4), 1031d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_PROGRAM_RASTER (1008, 4), 1041d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_PROGRAM_STORE (1009, 4); 105718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 106718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mID; 107718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mSize; 108718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams DataType(int id, int size) { 109718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mID = id; 110718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mSize = size; 111718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 112768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 113768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 114a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 115a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * The special interpretation of the data if required. This is primarly 116a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * useful for graphical data. USER indicates no special interpretation is 117a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * expected. PIXEL is used in conjunction with the standard data types for 118a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * representing texture formats. 119a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 120718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public enum DataKind { 121718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams USER (0), 122718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 123718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams PIXEL_L (7), 124718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams PIXEL_A (8), 125718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams PIXEL_LA (9), 126718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams PIXEL_RGB (10), 1278e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk PIXEL_RGBA (11), 1288e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk PIXEL_DEPTH (12); 129718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 130718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mID; 131718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams DataKind(int id) { 132718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mID = id; 133ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams } 13436e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 13536e612a488511940b61f09803b270aa1c61b68e0Jason Sams 136a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 137a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return if a element is too complex for use as a data source for a Mesh or 138a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * a Program. 139a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 140a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return boolean 141a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 142c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams public boolean isComplex() { 143c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams if (mElements == null) { 144c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams return false; 145c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams } 146c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams for (int ct=0; ct < mElements.length; ct++) { 147c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams if (mElements[ct].mElements != null) { 148c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams return true; 149c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams } 150c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams } 151c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams return false; 152c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams } 153c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams 154a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 155a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Utility function for returning an Element containing a single Boolean. 156a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 157a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs Context to which the element will belong. 158a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 159a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 160a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 161f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams public static Element BOOLEAN(RenderScript rs) { 162f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams if(rs.mElement_BOOLEAN == null) { 163f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams rs.mElement_BOOLEAN = createUser(rs, DataType.BOOLEAN); 164f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams } 165f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams return rs.mElement_BOOLEAN; 166f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams } 167f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams 168a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 169a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Utility function for returning an Element containing a single UNSIGNED_8. 170a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 171a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs Context to which the element will belong. 172a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 173a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 174a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1758cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element U8(RenderScript rs) { 1768cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_U8 == null) { 1778cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_U8 = createUser(rs, DataType.UNSIGNED_8); 1783c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 1798cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_U8; 1803c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 181ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams 182a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 183a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Utility function for returning an Element containing a single SIGNED_8. 184a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 185a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs Context to which the element will belong. 186a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 187a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 188a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1898cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element I8(RenderScript rs) { 1908cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_I8 == null) { 1918cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_I8 = createUser(rs, DataType.SIGNED_8); 1923c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 1938cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_I8; 1943c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 1953c0dfbab807a459622aeade4940daddf482dec66Jason Sams 196e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams public static Element U16(RenderScript rs) { 197e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams if(rs.mElement_U16 == null) { 198e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams rs.mElement_U16 = createUser(rs, DataType.UNSIGNED_16); 199e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams } 200e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams return rs.mElement_U16; 201e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams } 202e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams 203e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams public static Element I16(RenderScript rs) { 204e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams if(rs.mElement_I16 == null) { 205e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams rs.mElement_I16 = createUser(rs, DataType.SIGNED_16); 206e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams } 207e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams return rs.mElement_I16; 208e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams } 209e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams 2108cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element U32(RenderScript rs) { 2118cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_U32 == null) { 2128cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_U32 = createUser(rs, DataType.UNSIGNED_32); 2133c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 2148cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_U32; 2153c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 2163c0dfbab807a459622aeade4940daddf482dec66Jason Sams 2178cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element I32(RenderScript rs) { 2188cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_I32 == null) { 2198cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_I32 = createUser(rs, DataType.SIGNED_32); 2203c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 2218cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_I32; 2223c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 2233c0dfbab807a459622aeade4940daddf482dec66Jason Sams 22452d836332f6aae74ed97fda1b53681f36710af64Stephen Hines public static Element U64(RenderScript rs) { 22552d836332f6aae74ed97fda1b53681f36710af64Stephen Hines if(rs.mElement_U64 == null) { 22652d836332f6aae74ed97fda1b53681f36710af64Stephen Hines rs.mElement_U64 = createUser(rs, DataType.UNSIGNED_64); 22752d836332f6aae74ed97fda1b53681f36710af64Stephen Hines } 22852d836332f6aae74ed97fda1b53681f36710af64Stephen Hines return rs.mElement_U64; 22952d836332f6aae74ed97fda1b53681f36710af64Stephen Hines } 23052d836332f6aae74ed97fda1b53681f36710af64Stephen Hines 231ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines public static Element I64(RenderScript rs) { 232ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines if(rs.mElement_I64 == null) { 233ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines rs.mElement_I64 = createUser(rs, DataType.SIGNED_64); 234ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines } 235ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines return rs.mElement_I64; 236ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines } 237ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines 2388cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element F32(RenderScript rs) { 2398cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_F32 == null) { 2408cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_F32 = createUser(rs, DataType.FLOAT_32); 2413c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 2428cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_F32; 2433c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 2443c0dfbab807a459622aeade4940daddf482dec66Jason Sams 24502f41705199336f808ece50d81585450e7f8f61fStephen Hines public static Element F64(RenderScript rs) { 24602f41705199336f808ece50d81585450e7f8f61fStephen Hines if(rs.mElement_F64 == null) { 24702f41705199336f808ece50d81585450e7f8f61fStephen Hines rs.mElement_F64 = createUser(rs, DataType.FLOAT_64); 24802f41705199336f808ece50d81585450e7f8f61fStephen Hines } 24902f41705199336f808ece50d81585450e7f8f61fStephen Hines return rs.mElement_F64; 25002f41705199336f808ece50d81585450e7f8f61fStephen Hines } 25102f41705199336f808ece50d81585450e7f8f61fStephen Hines 2528cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element ELEMENT(RenderScript rs) { 2538cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_ELEMENT == null) { 2548cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_ELEMENT = createUser(rs, DataType.RS_ELEMENT); 255a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 2568cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_ELEMENT; 257a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 258a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 2598cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element TYPE(RenderScript rs) { 2608cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_TYPE == null) { 2618cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_TYPE = createUser(rs, DataType.RS_TYPE); 262a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 2638cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_TYPE; 264a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 265a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 2668cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element ALLOCATION(RenderScript rs) { 2678cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_ALLOCATION == null) { 2688cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_ALLOCATION = createUser(rs, DataType.RS_ALLOCATION); 269a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 2708cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_ALLOCATION; 271a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 272a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 2738cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element SAMPLER(RenderScript rs) { 2748cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_SAMPLER == null) { 2758cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_SAMPLER = createUser(rs, DataType.RS_SAMPLER); 276a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 2778cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_SAMPLER; 278a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 279a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 2808cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element SCRIPT(RenderScript rs) { 2818cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_SCRIPT == null) { 2828cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_SCRIPT = createUser(rs, DataType.RS_SCRIPT); 283a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 2848cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_SCRIPT; 285a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 286a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 2878cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element MESH(RenderScript rs) { 2888cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_MESH == null) { 2898cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_MESH = createUser(rs, DataType.RS_MESH); 290a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 2918cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_MESH; 292a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 293a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 2948cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element PROGRAM_FRAGMENT(RenderScript rs) { 2958cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_PROGRAM_FRAGMENT == null) { 2968cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_PROGRAM_FRAGMENT = createUser(rs, DataType.RS_PROGRAM_FRAGMENT); 297a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 2988cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_PROGRAM_FRAGMENT; 299a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 300a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 3018cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element PROGRAM_VERTEX(RenderScript rs) { 3028cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_PROGRAM_VERTEX == null) { 3038cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_PROGRAM_VERTEX = createUser(rs, DataType.RS_PROGRAM_VERTEX); 304a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 3058cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_PROGRAM_VERTEX; 306a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 307a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 3088cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element PROGRAM_RASTER(RenderScript rs) { 3098cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_PROGRAM_RASTER == null) { 3108cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_PROGRAM_RASTER = createUser(rs, DataType.RS_PROGRAM_RASTER); 311a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 3128cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_PROGRAM_RASTER; 313a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 314a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 3158cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element PROGRAM_STORE(RenderScript rs) { 3168cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_PROGRAM_STORE == null) { 3178cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_PROGRAM_STORE = createUser(rs, DataType.RS_PROGRAM_STORE); 318a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 3198cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_PROGRAM_STORE; 320a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 321a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 322a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 3233c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element A_8(RenderScript rs) { 3243c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(rs.mElement_A_8 == null) { 325718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams rs.mElement_A_8 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_A); 3263c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3273c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_A_8; 3283c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3293c0dfbab807a459622aeade4940daddf482dec66Jason Sams 3303c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGB_565(RenderScript rs) { 3313c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(rs.mElement_RGB_565 == null) { 332718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams rs.mElement_RGB_565 = createPixel(rs, DataType.UNSIGNED_5_6_5, DataKind.PIXEL_RGB); 3333c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3343c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGB_565; 3353c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3363c0dfbab807a459622aeade4940daddf482dec66Jason Sams 3373c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGB_888(RenderScript rs) { 3383c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(rs.mElement_RGB_888 == null) { 339718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams rs.mElement_RGB_888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGB); 3403c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3413c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGB_888; 3423c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3433c0dfbab807a459622aeade4940daddf482dec66Jason Sams 3443c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGBA_5551(RenderScript rs) { 3453c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(rs.mElement_RGBA_5551 == null) { 346718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams rs.mElement_RGBA_5551 = createPixel(rs, DataType.UNSIGNED_5_5_5_1, DataKind.PIXEL_RGBA); 3473c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3483c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGBA_5551; 3493c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3503c0dfbab807a459622aeade4940daddf482dec66Jason Sams 3513c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGBA_4444(RenderScript rs) { 3523c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(rs.mElement_RGBA_4444 == null) { 353718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams rs.mElement_RGBA_4444 = createPixel(rs, DataType.UNSIGNED_4_4_4_4, DataKind.PIXEL_RGBA); 3543c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3553c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGBA_4444; 3563c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3573c0dfbab807a459622aeade4940daddf482dec66Jason Sams 3583c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGBA_8888(RenderScript rs) { 3593c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(rs.mElement_RGBA_8888 == null) { 360718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams rs.mElement_RGBA_8888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGBA); 3613c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3623c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGBA_8888; 3633c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3643c0dfbab807a459622aeade4940daddf482dec66Jason Sams 3658cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element F32_2(RenderScript rs) { 3668cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_FLOAT_2 == null) { 3678cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_FLOAT_2 = createVector(rs, DataType.FLOAT_32, 2); 3683c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3698cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_FLOAT_2; 3703c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3713c0dfbab807a459622aeade4940daddf482dec66Jason Sams 3728cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element F32_3(RenderScript rs) { 3738cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_FLOAT_3 == null) { 3748cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_FLOAT_3 = createVector(rs, DataType.FLOAT_32, 3); 3753c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3768cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_FLOAT_3; 37736e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 37836e612a488511940b61f09803b270aa1c61b68e0Jason Sams 3798cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element F32_4(RenderScript rs) { 3808cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_FLOAT_4 == null) { 3818cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_FLOAT_4 = createVector(rs, DataType.FLOAT_32, 4); 382718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 3838cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_FLOAT_4; 3843c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 38536e612a488511940b61f09803b270aa1c61b68e0Jason Sams 3868cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element U8_4(RenderScript rs) { 3878cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_UCHAR_4 == null) { 3888cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_UCHAR_4 = createVector(rs, DataType.UNSIGNED_8, 4); 38936e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 3908cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_UCHAR_4; 39136e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 39236e612a488511940b61f09803b270aa1c61b68e0Jason Sams 3931d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams public static Element MATRIX_4X4(RenderScript rs) { 3941d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams if(rs.mElement_MATRIX_4X4 == null) { 3951d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams rs.mElement_MATRIX_4X4 = createUser(rs, DataType.MATRIX_4X4); 3961d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 3971d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams return rs.mElement_MATRIX_4X4; 3981d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 3991d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams public static Element MATRIX4X4(RenderScript rs) { 4001d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams return MATRIX_4X4(rs); 4011d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 4021d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams 4031d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams public static Element MATRIX_3X3(RenderScript rs) { 4041d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams if(rs.mElement_MATRIX_3X3 == null) { 4051d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams rs.mElement_MATRIX_3X3 = createUser(rs, DataType.MATRIX_3X3); 4061d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 407347697710d033036c533bd6cee409c4b4c19d437Alex Sakhartchouk return rs.mElement_MATRIX_3X3; 4081d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 4091d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams 4101d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams public static Element MATRIX_2X2(RenderScript rs) { 4111d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams if(rs.mElement_MATRIX_2X2 == null) { 4121d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams rs.mElement_MATRIX_2X2 = createUser(rs, DataType.MATRIX_2X2); 4131d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 4141d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams return rs.mElement_MATRIX_2X2; 4151d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 41636e612a488511940b61f09803b270aa1c61b68e0Jason Sams 41770d4e5024298f71edb3b04867e05568f5495b4ceJason Sams Element(int id, RenderScript rs, Element[] e, String[] n, int[] as) { 4180de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 419ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams mSize = 0; 420718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElements = e; 421718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElementNames = n; 42270d4e5024298f71edb3b04867e05568f5495b4ceJason Sams mArraySizes = as; 423718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams for (int ct = 0; ct < mElements.length; ct++ ) { 4249e401bcd88a0fdeea96f53cb776e5de7b5b084cbAlex Sakhartchouk mSize += mElements[ct].mSize * mArraySizes[ct]; 425718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 426718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 427718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 4280de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk Element(int id, RenderScript rs, DataType dt, DataKind dk, boolean norm, int size) { 4290de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 430252c07802f7039f15f723751162e64a6621e6998Jason Sams if ((dt != DataType.UNSIGNED_5_6_5) && 431252c07802f7039f15f723751162e64a6621e6998Jason Sams (dt != DataType.UNSIGNED_4_4_4_4) && 432252c07802f7039f15f723751162e64a6621e6998Jason Sams (dt != DataType.UNSIGNED_5_5_5_1)) { 433252c07802f7039f15f723751162e64a6621e6998Jason Sams mSize = dt.mSize * size; 434252c07802f7039f15f723751162e64a6621e6998Jason Sams } else { 435252c07802f7039f15f723751162e64a6621e6998Jason Sams mSize = dt.mSize; 436252c07802f7039f15f723751162e64a6621e6998Jason Sams } 437718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mType = dt; 438718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mKind = dk; 439718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mNormalized = norm; 440718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mVectorSize = size; 44136e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 44236e612a488511940b61f09803b270aa1c61b68e0Jason Sams 4430de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk Element(int id, RenderScript rs) { 4440de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 445dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 446dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 447dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk @Override 448dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk void updateFromNative() { 44906d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams super.updateFromNative(); 450dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 451dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements 452dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int[] dataBuffer = new int[5]; 45306d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams mRS.nElementGetNativeData(getID(), dataBuffer); 4540de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk 4550de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mNormalized = dataBuffer[2] == 1 ? true : false; 4560de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mVectorSize = dataBuffer[3]; 4570de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mSize = 0; 458dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for (DataType dt: DataType.values()) { 459dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(dt.mID == dataBuffer[0]){ 460dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mType = dt; 4610de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mSize = mType.mSize * mVectorSize; 462dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 463dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 464dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for (DataKind dk: DataKind.values()) { 465dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(dk.mID == dataBuffer[1]){ 466dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mKind = dk; 467dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 468dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 469dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 470dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int numSubElements = dataBuffer[4]; 471dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(numSubElements > 0) { 472dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElements = new Element[numSubElements]; 473dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElementNames = new String[numSubElements]; 474dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 475dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int[] subElementIds = new int[numSubElements]; 47606d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams mRS.nElementGetSubElements(getID(), subElementIds, mElementNames); 477dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(int i = 0; i < numSubElements; i ++) { 4780de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mElements[i] = new Element(subElementIds[i], mRS); 479dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElements[i].updateFromNative(); 4800de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mSize += mElements[i].mSize; 481dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 482dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 483dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 484dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 485dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 486a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 487a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a custom Element of the specified DataType. The DataKind will be 488a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * set to USER and the vector size to 1 indicating non-vector. 489a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 490a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs The context associated with the new Element. 491a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param dt The DataType for the new element. 492a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 493a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 494bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams static Element createUser(RenderScript rs, DataType dt) { 4950de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk DataKind dk = DataKind.USER; 4960de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk boolean norm = false; 4970de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk int vecSize = 1; 4980de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk int id = rs.nElementCreate(dt.mID, dk.mID, norm, vecSize); 4990de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk return new Element(id, rs, dt, dk, norm, vecSize); 500ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams } 501ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams 502a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 503a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a custom vector element of the specified DataType and vector size. 504a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * DataKind will be set to USER. 505a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 506a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs The context associated with the new Element. 507a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param dt The DataType for the new element. 508a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param size Vector size for the new Element. Range 2-4 inclusive 509a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * supported. 510a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 511a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 512a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 513718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public static Element createVector(RenderScript rs, DataType dt, int size) { 514718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (size < 2 || size > 4) { 515bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams throw new RSIllegalArgumentException("Vector size out of range 2-4."); 51636e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 5170de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk DataKind dk = DataKind.USER; 5180de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk boolean norm = false; 5190de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk int id = rs.nElementCreate(dt.mID, dk.mID, norm, size); 5200de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk return new Element(id, rs, dt, dk, norm, size); 521718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 52236e612a488511940b61f09803b270aa1c61b68e0Jason Sams 523a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 524a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a new pixel Element type. A matching DataType and DataKind must 525a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * be provided. The DataType and DataKind must contain the same number of 526a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * components. Vector size will be set to 1. 527a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 528a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs The context associated with the new Element. 529a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param dt The DataType for the new element. 530a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param dk The DataKind to specify the mapping of each component in the 531a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * DataType. 532a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 533a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 534a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 535718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public static Element createPixel(RenderScript rs, DataType dt, DataKind dk) { 536718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (!(dk == DataKind.PIXEL_L || 537718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dk == DataKind.PIXEL_A || 538718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dk == DataKind.PIXEL_LA || 539718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dk == DataKind.PIXEL_RGB || 5408e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk dk == DataKind.PIXEL_RGBA || 5418e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk dk == DataKind.PIXEL_DEPTH)) { 542c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Unsupported DataKind"); 54307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 544718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (!(dt == DataType.UNSIGNED_8 || 5458e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk dt == DataType.UNSIGNED_16 || 546718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dt == DataType.UNSIGNED_5_6_5 || 547718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dt == DataType.UNSIGNED_4_4_4_4 || 548718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dt == DataType.UNSIGNED_5_5_5_1)) { 549c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Unsupported DataType"); 55007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 551718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (dt == DataType.UNSIGNED_5_6_5 && dk != DataKind.PIXEL_RGB) { 552c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 55307ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 554718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (dt == DataType.UNSIGNED_5_5_5_1 && dk != DataKind.PIXEL_RGBA) { 555c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 55625ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams } 557718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (dt == DataType.UNSIGNED_4_4_4_4 && dk != DataKind.PIXEL_RGBA) { 558c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 55907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 5608e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk if (dt == DataType.UNSIGNED_16 && 5618e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk dk != DataKind.PIXEL_DEPTH) { 5628e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk throw new RSIllegalArgumentException("Bad kind and type combo"); 5638e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 56407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 565718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int size = 1; 5668e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk switch (dk) { 5678e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk case PIXEL_LA: 568718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams size = 2; 5698e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk break; 5708e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk case PIXEL_RGB: 571718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams size = 3; 5728e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk break; 5738e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk case PIXEL_RGBA: 574718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams size = 4; 5758e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk break; 5768e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk case PIXEL_DEPTH: 5778e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk size = 2; 5788e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk break; 579334ea0c98f051b5a6b85bc616c93304651854298Jason Sams } 580334ea0c98f051b5a6b85bc616c93304651854298Jason Sams 5810de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk boolean norm = true; 5820de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk int id = rs.nElementCreate(dt.mID, dk.mID, norm, size); 5830de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk return new Element(id, rs, dt, dk, norm, size); 584718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 58507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 586a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 587a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Builder class for producing complex elements with matching field and name 588a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * pairs. The builder starts empty. The order in which elements are added 589a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * is retained for the layout in memory. 590a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 591a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 592718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public static class Builder { 593718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams RenderScript mRS; 594718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Element[] mElements; 595718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String[] mElementNames; 59670d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int[] mArraySizes; 597718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mCount; 598334ea0c98f051b5a6b85bc616c93304651854298Jason Sams 599a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 600a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a builder object. 601a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 602a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs 603a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 604718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public Builder(RenderScript rs) { 605718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mRS = rs; 606718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mCount = 0; 607718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElements = new Element[8]; 608718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElementNames = new String[8]; 60970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams mArraySizes = new int[8]; 610718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 611718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 612a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 613a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Add an array of elements to this element. 614a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 615a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param element 616a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param name 617a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param arraySize 618a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 619bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder add(Element element, String name, int arraySize) { 62070d4e5024298f71edb3b04867e05568f5495b4ceJason Sams if (arraySize < 1) { 621c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Array size cannot be less than 1."); 62270d4e5024298f71edb3b04867e05568f5495b4ceJason Sams } 623718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if(mCount == mElements.length) { 624718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Element[] e = new Element[mCount + 8]; 625718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String[] s = new String[mCount + 8]; 62670d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int[] as = new int[mCount + 8]; 627718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams System.arraycopy(mElements, 0, e, 0, mCount); 628718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams System.arraycopy(mElementNames, 0, s, 0, mCount); 62970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams System.arraycopy(mArraySizes, 0, as, 0, mCount); 630718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElements = e; 631718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElementNames = s; 63270d4e5024298f71edb3b04867e05568f5495b4ceJason Sams mArraySizes = as; 633718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 634718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElements[mCount] = element; 635718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElementNames[mCount] = name; 63670d4e5024298f71edb3b04867e05568f5495b4ceJason Sams mArraySizes[mCount] = arraySize; 637718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mCount++; 638bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 63907ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 64007ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 641a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 642a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Add a single element to this Element. 643a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 644a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param element 645a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param name 646a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 647bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder add(Element element, String name) { 648bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return add(element, name, 1); 64970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams } 65070d4e5024298f71edb3b04867e05568f5495b4ceJason Sams 651a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 652a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create the element from this builder. 653a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 654a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 655a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 656a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 65722534176fb5c1257130ef4ee589739ca42766a32Jason Sams public Element create() { 658771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 659718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Element[] ein = new Element[mCount]; 660718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String[] sin = new String[mCount]; 66170d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int[] asin = new int[mCount]; 662718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams java.lang.System.arraycopy(mElements, 0, ein, 0, mCount); 663718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams java.lang.System.arraycopy(mElementNames, 0, sin, 0, mCount); 66470d4e5024298f71edb3b04867e05568f5495b4ceJason Sams java.lang.System.arraycopy(mArraySizes, 0, asin, 0, mCount); 6650de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk 6660de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk int[] ids = new int[ein.length]; 6670de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk for (int ct = 0; ct < ein.length; ct++ ) { 66806d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams ids[ct] = ein[ct].getID(); 6690de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk } 67070d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int id = mRS.nElementCreate2(ids, sin, asin); 67170d4e5024298f71edb3b04867e05568f5495b4ceJason Sams return new Element(id, mRS, ein, sin, asin); 67236e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 67336e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 67436e612a488511940b61f09803b270aa1c61b68e0Jason Sams} 67536e612a488511940b61f09803b270aa1c61b68e0Jason Sams 676