136e612a488511940b61f09803b270aa1c61b68e0Jason Sams/* 2dd6c8b34f172ba699954e4d3095dba8c0fd5e930Jason Sams * Copyright (C) 2013 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 229c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 23c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>An Element represents one item within an {@link 24c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Allocation}. An Element is roughly equivalent to a C 25c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * type in a RenderScript kernel. Elements may be basic or complex. Some basic 26c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * elements are</p> <ul> <li>A single float value (equivalent to a float in a 27c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * kernel)</li> <li>A four-element float vector (equivalent to a float4 in a 28c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * kernel)</li> <li>An unsigned 32-bit integer (equivalent to an unsigned int in 29c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * a kernel)</li> <li>A single signed 8-bit integer (equivalent to a char in a 30c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * kernel)</li> </ul> <p>A complex element is roughly equivalent to a C struct 31c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * and contains a number of basic or complex Elements. From Java code, a complex 32c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * element contains a list of sub-elements and names that represents a 33c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * particular data structure. Structs used in RS scripts are available to Java 34c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * code by using the {@code ScriptField_structname} class that is reflected from 35c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * a particular script.</p> 36a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 37c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>Basic Elements are comprised of a {@link 38c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Element.DataType} and a {@link 39c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Element.DataKind}. The DataType encodes C type 40c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * information of an Element, while the DataKind encodes how that Element should 41c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * be interpreted by a {@link android.renderscript.Sampler}. Note that {@link 42c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Allocation} objects with DataKind {@link 43c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Element.DataKind#USER} cannot be used as input for a 44c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * {@link android.renderscript.Sampler}. In general, {@link 45c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Allocation} objects that are intended for use with a 46c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * {@link android.renderscript.Sampler} should use bitmap-derived Elements such 47c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * as {@link android.renderscript.Element#RGBA_8888} or {@link 48c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript#Element.A_8}.</p> 493aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * 503aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference"> 513aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3> 52c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>For more information about creating an application that uses RenderScript, read the 53c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p> 543aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div> 5536e612a488511940b61f09803b270aa1c61b68e0Jason Sams **/ 5636e612a488511940b61f09803b270aa1c61b68e0Jason Samspublic class Element extends BaseObj { 57ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams int mSize; 58718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Element[] mElements; 59718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String[] mElementNames; 6070d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int[] mArraySizes; 617d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk int[] mOffsetInBytes; 62ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams 633aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk int[] mVisibleElementMap; 643aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk 65718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams DataType mType; 66718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams DataKind mKind; 67718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams boolean mNormalized; 68718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mVectorSize; 69718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 703aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk private void updateVisibleSubElements() { 713aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mElements == null) { 723aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk return; 733aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk } 743aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk 753aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk int noPaddingFieldCount = 0; 763aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk int fieldCount = mElementNames.length; 773aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk // Find out how many elements are not padding 783aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk for (int ct = 0; ct < fieldCount; ct ++) { 793aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mElementNames[ct].charAt(0) != '#') { 803aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk noPaddingFieldCount ++; 813aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk } 823aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk } 833aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk mVisibleElementMap = new int[noPaddingFieldCount]; 843aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk 853aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk // Make a map that points us at non-padding elements 863aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk for (int ct = 0, ctNoPadding = 0; ct < fieldCount; ct ++) { 873aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mElementNames[ct].charAt(0) != '#') { 883aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk mVisibleElementMap[ctNoPadding ++] = ct; 893aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk } 903aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk } 913aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk } 923aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk 939c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 947d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return element size in bytes 957d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 96918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk public int getBytesSize() {return mSize;} 97718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 989c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 99918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * Returns the number of vector components. 2 for float2, 4 for 100918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * float4, etc. 101fd79e02e0fec8620da7affaadcf275cf0518241aAlex Sakhartchouk * @return element vector size 102fd79e02e0fec8620da7affaadcf275cf0518241aAlex Sakhartchouk */ 103fd79e02e0fec8620da7affaadcf275cf0518241aAlex Sakhartchouk public int getVectorSize() {return mVectorSize;} 104fd79e02e0fec8620da7affaadcf275cf0518241aAlex Sakhartchouk 105a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 1069c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 107a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * DataType represents the basic type information for a basic element. The 108f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * naming convention follows. For numeric types it is FLOAT, 109f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * SIGNED, or UNSIGNED followed by the _BITS where BITS is the 110f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * size of the data. BOOLEAN is a true / false (1,0) 111f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * represented in an 8 bit container. The UNSIGNED variants 112f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * with multiple bit definitions are for packed graphical data 113f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * formats and represent vectors with per vector member sizes 114f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * which are treated as a single unit for packing and alignment 115f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * purposes. 116a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 117a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * MATRIX the three matrix types contain FLOAT_32 elements and are treated 118a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * as 32 bits for alignment purposes. 119a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 120a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * RS_* objects. 32 bit opaque handles. 121a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 122718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public enum DataType { 1233aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk NONE (0, 0), 124718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams //FLOAT_16 (1, 2), 125718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams FLOAT_32 (2, 4), 12602f41705199336f808ece50d81585450e7f8f61fStephen Hines FLOAT_64 (3, 8), 127718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams SIGNED_8 (4, 1), 128718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams SIGNED_16 (5, 2), 129718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams SIGNED_32 (6, 4), 130ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines SIGNED_64 (7, 8), 131718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams UNSIGNED_8 (8, 1), 132718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams UNSIGNED_16 (9, 2), 133718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams UNSIGNED_32 (10, 4), 13452d836332f6aae74ed97fda1b53681f36710af64Stephen Hines UNSIGNED_64 (11, 8), 135718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 136f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams BOOLEAN(12, 1), 137f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams 138f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams UNSIGNED_5_6_5 (13, 2), 139f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams UNSIGNED_5_5_5_1 (14, 2), 140f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams UNSIGNED_4_4_4_4 (15, 2), 141f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams 1421d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams MATRIX_4X4 (16, 64), 1431d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams MATRIX_3X3 (17, 36), 1441d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams MATRIX_2X2 (18, 16), 1451d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams 1461d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_ELEMENT (1000, 4), 1471d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_TYPE (1001, 4), 1481d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_ALLOCATION (1002, 4), 1491d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_SAMPLER (1003, 4), 1501d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_SCRIPT (1004, 4), 1511d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_MESH (1005, 4), 1521d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_PROGRAM_FRAGMENT (1006, 4), 1531d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_PROGRAM_VERTEX (1007, 4), 1541d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams RS_PROGRAM_RASTER (1008, 4), 1553a2914132146f340511425d7f78540098606b512Stephen Hines RS_PROGRAM_STORE (1009, 4), 1563a2914132146f340511425d7f78540098606b512Stephen Hines RS_FONT (1010, 4); 157718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 158718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mID; 159718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mSize; 160718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams DataType(int id, int size) { 161718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mID = id; 162718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mSize = size; 163718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 164768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 165768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 1669c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 167a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * The special interpretation of the data if required. This is primarly 168a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * useful for graphical data. USER indicates no special interpretation is 169a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * expected. PIXEL is used in conjunction with the standard data types for 170a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * representing texture formats. 171a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 172718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public enum DataKind { 173718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams USER (0), 174718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 175718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams PIXEL_L (7), 176718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams PIXEL_A (8), 177718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams PIXEL_LA (9), 178718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams PIXEL_RGB (10), 1798e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk PIXEL_RGBA (11), 1808140d7b0f62a6e5b54e318c959f2d501f7ee6784Jason Sams PIXEL_DEPTH (12), 1818140d7b0f62a6e5b54e318c959f2d501f7ee6784Jason Sams PIXEL_YUV(13); 182718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 183718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mID; 184718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams DataKind(int id) { 185718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mID = id; 186ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams } 18736e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 18836e612a488511940b61f09803b270aa1c61b68e0Jason Sams 1899c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 190a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return if a element is too complex for use as a data source for a Mesh or 191a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * a Program. 192a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 193a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return boolean 194a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 195c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams public boolean isComplex() { 196c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams if (mElements == null) { 197c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams return false; 198c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams } 199c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams for (int ct=0; ct < mElements.length; ct++) { 200c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams if (mElements[ct].mElements != null) { 201c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams return true; 202c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams } 203c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams } 204c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams return false; 205c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams } 206c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams 2079c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 208918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * Elements could be simple, such as an int or a float, or a 209918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * structure with multiple sub elements, such as a collection of 210918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * floats, float2, float4. This function returns zero for simple 211918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * elements or the number of sub-elements otherwise. 2127d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return number of sub-elements in this element 2137d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 2147d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public int getSubElementCount() { 2153aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mVisibleElementMap == null) { 2167d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return 0; 2177d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2183aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk return mVisibleElementMap.length; 2197d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2207d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 2219c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 222918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * For complex elements, this function will return the 223918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * sub-element at index 2247d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @param index index of the sub-element to return 2257d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return sub-element in this element at given index 2267d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 2277d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Element getSubElement(int index) { 2283aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mVisibleElementMap == null) { 2297d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Element contains no sub-elements"); 2307d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2313aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (index < 0 || index >= mVisibleElementMap.length) { 2327d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Illegal sub-element index"); 2337d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2343aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk return mElements[mVisibleElementMap[index]]; 2357d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2367d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 2379c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 238918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * For complex elements, this function will return the 239918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * sub-element name at index 2407d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @param index index of the sub-element 2417d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return sub-element in this element at given index 2427d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 2437d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public String getSubElementName(int index) { 2443aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mVisibleElementMap == null) { 2457d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Element contains no sub-elements"); 2467d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2473aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (index < 0 || index >= mVisibleElementMap.length) { 2487d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Illegal sub-element index"); 2497d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2503aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk return mElementNames[mVisibleElementMap[index]]; 2517d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2527d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 2539c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 254918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * For complex elements, some sub-elements could be statically 255918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * sized arrays. This function will return the array size for 256918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * sub-element at index 2577d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @param index index of the sub-element 2587d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return array size of sub-element in this element at given index 2597d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 2607d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public int getSubElementArraySize(int index) { 2613aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mVisibleElementMap == null) { 2627d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Element contains no sub-elements"); 2637d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2643aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (index < 0 || index >= mVisibleElementMap.length) { 2657d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Illegal sub-element index"); 2667d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2673aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk return mArraySizes[mVisibleElementMap[index]]; 2687d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2697d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 2709c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 271918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * This function specifies the location of a sub-element within 272918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk * the element 2737d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @param index index of the sub-element 2747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return offset in bytes of sub-element in this element at given index 2757d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 2767d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public int getSubElementOffsetBytes(int index) { 2773aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (mVisibleElementMap == null) { 2787d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Element contains no sub-elements"); 2797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2803aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk if (index < 0 || index >= mVisibleElementMap.length) { 2817d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk throw new RSIllegalArgumentException("Illegal sub-element index"); 2827d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2833aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk return mOffsetInBytes[mVisibleElementMap[index]]; 2847d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 2857d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 2869c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 287f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * @return element data type 288f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk */ 289f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk public DataType getDataType() { 290f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk return mType; 291f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk } 292f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk 2939c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 294f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk * @return element data kind 295f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk */ 296f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk public DataKind getDataKind() { 297f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk return mKind; 298f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk } 299f5d8ac7cc35747ef7285ccc196f616b96229def9Alex Sakhartchouk 3009c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 301a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Utility function for returning an Element containing a single Boolean. 302a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 303a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs Context to which the element will belong. 304a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 305a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 306a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 307f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams public static Element BOOLEAN(RenderScript rs) { 308f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams if(rs.mElement_BOOLEAN == null) { 309f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams rs.mElement_BOOLEAN = createUser(rs, DataType.BOOLEAN); 310f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams } 311f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams return rs.mElement_BOOLEAN; 312f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams } 313f110d4b787b91dabe968a812e76e5c1f8d953487Jason Sams 3149c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 315a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Utility function for returning an Element containing a single UNSIGNED_8. 316a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 317a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs Context to which the element will belong. 318a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 319a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 320a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 3218cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element U8(RenderScript rs) { 3228cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_U8 == null) { 3238cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_U8 = createUser(rs, DataType.UNSIGNED_8); 3243c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3258cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_U8; 3263c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 327ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams 3289c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 329a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Utility function for returning an Element containing a single SIGNED_8. 330a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 331a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs Context to which the element will belong. 332a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 333a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 334a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 3358cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element I8(RenderScript rs) { 3368cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_I8 == null) { 3378cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_I8 = createUser(rs, DataType.SIGNED_8); 3383c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3398cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_I8; 3403c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3413c0dfbab807a459622aeade4940daddf482dec66Jason Sams 342e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams public static Element U16(RenderScript rs) { 343e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams if(rs.mElement_U16 == null) { 344e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams rs.mElement_U16 = createUser(rs, DataType.UNSIGNED_16); 345e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams } 346e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams return rs.mElement_U16; 347e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams } 348e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams 349e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams public static Element I16(RenderScript rs) { 350e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams if(rs.mElement_I16 == null) { 351e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams rs.mElement_I16 = createUser(rs, DataType.SIGNED_16); 352e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams } 353e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams return rs.mElement_I16; 354e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams } 355e29f3e74f71ea730519ff8ae1d8dd4c1630bbaf9Jason Sams 3568cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element U32(RenderScript rs) { 3578cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_U32 == null) { 3588cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_U32 = createUser(rs, DataType.UNSIGNED_32); 3593c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3608cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_U32; 3613c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3623c0dfbab807a459622aeade4940daddf482dec66Jason Sams 3638cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element I32(RenderScript rs) { 3648cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_I32 == null) { 3658cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_I32 = createUser(rs, DataType.SIGNED_32); 3663c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3678cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_I32; 3683c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3693c0dfbab807a459622aeade4940daddf482dec66Jason Sams 37052d836332f6aae74ed97fda1b53681f36710af64Stephen Hines public static Element U64(RenderScript rs) { 37152d836332f6aae74ed97fda1b53681f36710af64Stephen Hines if(rs.mElement_U64 == null) { 37252d836332f6aae74ed97fda1b53681f36710af64Stephen Hines rs.mElement_U64 = createUser(rs, DataType.UNSIGNED_64); 37352d836332f6aae74ed97fda1b53681f36710af64Stephen Hines } 37452d836332f6aae74ed97fda1b53681f36710af64Stephen Hines return rs.mElement_U64; 37552d836332f6aae74ed97fda1b53681f36710af64Stephen Hines } 37652d836332f6aae74ed97fda1b53681f36710af64Stephen Hines 377ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines public static Element I64(RenderScript rs) { 378ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines if(rs.mElement_I64 == null) { 379ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines rs.mElement_I64 = createUser(rs, DataType.SIGNED_64); 380ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines } 381ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines return rs.mElement_I64; 382ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines } 383ef1dac28d3bf98bd61cd9874fb3ccab42105e9b6Stephen Hines 3848cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element F32(RenderScript rs) { 3858cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_F32 == null) { 3868cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_F32 = createUser(rs, DataType.FLOAT_32); 3873c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3888cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_F32; 3893c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 3903c0dfbab807a459622aeade4940daddf482dec66Jason Sams 39102f41705199336f808ece50d81585450e7f8f61fStephen Hines public static Element F64(RenderScript rs) { 39202f41705199336f808ece50d81585450e7f8f61fStephen Hines if(rs.mElement_F64 == null) { 39302f41705199336f808ece50d81585450e7f8f61fStephen Hines rs.mElement_F64 = createUser(rs, DataType.FLOAT_64); 39402f41705199336f808ece50d81585450e7f8f61fStephen Hines } 39502f41705199336f808ece50d81585450e7f8f61fStephen Hines return rs.mElement_F64; 39602f41705199336f808ece50d81585450e7f8f61fStephen Hines } 39702f41705199336f808ece50d81585450e7f8f61fStephen Hines 3988cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element ELEMENT(RenderScript rs) { 3998cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_ELEMENT == null) { 4008cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_ELEMENT = createUser(rs, DataType.RS_ELEMENT); 401a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4028cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_ELEMENT; 403a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 404a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4058cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element TYPE(RenderScript rs) { 4068cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_TYPE == null) { 4078cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_TYPE = createUser(rs, DataType.RS_TYPE); 408a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4098cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_TYPE; 410a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 411a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4128cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element ALLOCATION(RenderScript rs) { 4138cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_ALLOCATION == null) { 4148cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_ALLOCATION = createUser(rs, DataType.RS_ALLOCATION); 415a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4168cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_ALLOCATION; 417a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 418a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4198cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element SAMPLER(RenderScript rs) { 4208cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_SAMPLER == null) { 4218cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_SAMPLER = createUser(rs, DataType.RS_SAMPLER); 422a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4238cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_SAMPLER; 424a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 425a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4268cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element SCRIPT(RenderScript rs) { 4278cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_SCRIPT == null) { 4288cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_SCRIPT = createUser(rs, DataType.RS_SCRIPT); 429a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4308cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_SCRIPT; 431a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 432a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4338cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element MESH(RenderScript rs) { 4348cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_MESH == null) { 4358cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_MESH = createUser(rs, DataType.RS_MESH); 436a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4378cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_MESH; 438a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 439a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4408cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element PROGRAM_FRAGMENT(RenderScript rs) { 4418cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_PROGRAM_FRAGMENT == null) { 4428cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_PROGRAM_FRAGMENT = createUser(rs, DataType.RS_PROGRAM_FRAGMENT); 443a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4448cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_PROGRAM_FRAGMENT; 445a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 446a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4478cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element PROGRAM_VERTEX(RenderScript rs) { 4488cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_PROGRAM_VERTEX == null) { 4498cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_PROGRAM_VERTEX = createUser(rs, DataType.RS_PROGRAM_VERTEX); 450a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4518cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_PROGRAM_VERTEX; 452a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 453a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4548cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element PROGRAM_RASTER(RenderScript rs) { 4558cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_PROGRAM_RASTER == null) { 4568cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_PROGRAM_RASTER = createUser(rs, DataType.RS_PROGRAM_RASTER); 457a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4588cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_PROGRAM_RASTER; 459a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 460a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4618cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element PROGRAM_STORE(RenderScript rs) { 4628cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_PROGRAM_STORE == null) { 4638cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_PROGRAM_STORE = createUser(rs, DataType.RS_PROGRAM_STORE); 464a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 4658cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_PROGRAM_STORE; 466a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams } 467a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams 4683a2914132146f340511425d7f78540098606b512Stephen Hines public static Element FONT(RenderScript rs) { 4693a2914132146f340511425d7f78540098606b512Stephen Hines if(rs.mElement_FONT == null) { 4703a2914132146f340511425d7f78540098606b512Stephen Hines rs.mElement_FONT = createUser(rs, DataType.RS_FONT); 4713a2914132146f340511425d7f78540098606b512Stephen Hines } 4723a2914132146f340511425d7f78540098606b512Stephen Hines return rs.mElement_FONT; 4733a2914132146f340511425d7f78540098606b512Stephen Hines } 4743a2914132146f340511425d7f78540098606b512Stephen Hines 4759c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines 4763c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element A_8(RenderScript rs) { 4773c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(rs.mElement_A_8 == null) { 478718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams rs.mElement_A_8 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_A); 4793c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 4803c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_A_8; 4813c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 4823c0dfbab807a459622aeade4940daddf482dec66Jason Sams 4833c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGB_565(RenderScript rs) { 4843c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(rs.mElement_RGB_565 == null) { 485718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams rs.mElement_RGB_565 = createPixel(rs, DataType.UNSIGNED_5_6_5, DataKind.PIXEL_RGB); 4863c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 4873c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGB_565; 4883c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 4893c0dfbab807a459622aeade4940daddf482dec66Jason Sams 4903c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGB_888(RenderScript rs) { 4913c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(rs.mElement_RGB_888 == null) { 492718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams rs.mElement_RGB_888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGB); 4933c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 4943c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGB_888; 4953c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 4963c0dfbab807a459622aeade4940daddf482dec66Jason Sams 4973c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGBA_5551(RenderScript rs) { 4983c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(rs.mElement_RGBA_5551 == null) { 499718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams rs.mElement_RGBA_5551 = createPixel(rs, DataType.UNSIGNED_5_5_5_1, DataKind.PIXEL_RGBA); 5003c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 5013c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGBA_5551; 5023c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 5033c0dfbab807a459622aeade4940daddf482dec66Jason Sams 5043c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGBA_4444(RenderScript rs) { 5053c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(rs.mElement_RGBA_4444 == null) { 506718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams rs.mElement_RGBA_4444 = createPixel(rs, DataType.UNSIGNED_4_4_4_4, DataKind.PIXEL_RGBA); 5073c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 5083c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGBA_4444; 5093c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 5103c0dfbab807a459622aeade4940daddf482dec66Jason Sams 5113c0dfbab807a459622aeade4940daddf482dec66Jason Sams public static Element RGBA_8888(RenderScript rs) { 5123c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(rs.mElement_RGBA_8888 == null) { 513718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams rs.mElement_RGBA_8888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGBA); 5143c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 5153c0dfbab807a459622aeade4940daddf482dec66Jason Sams return rs.mElement_RGBA_8888; 5163c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 5173c0dfbab807a459622aeade4940daddf482dec66Jason Sams 5188cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element F32_2(RenderScript rs) { 5198cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_FLOAT_2 == null) { 5208cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_FLOAT_2 = createVector(rs, DataType.FLOAT_32, 2); 5213c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 5228cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_FLOAT_2; 5233c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 5243c0dfbab807a459622aeade4940daddf482dec66Jason Sams 5258cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element F32_3(RenderScript rs) { 5268cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_FLOAT_3 == null) { 5278cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_FLOAT_3 = createVector(rs, DataType.FLOAT_32, 3); 5283c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 5298cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_FLOAT_3; 53036e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 53136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 5328cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element F32_4(RenderScript rs) { 5338cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_FLOAT_4 == null) { 5348cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_FLOAT_4 = createVector(rs, DataType.FLOAT_32, 4); 535718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 5368cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_FLOAT_4; 5373c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 53836e612a488511940b61f09803b270aa1c61b68e0Jason Sams 539836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element F64_2(RenderScript rs) { 540836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_DOUBLE_2 == null) { 541836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_DOUBLE_2 = createVector(rs, DataType.FLOAT_64, 2); 542836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 543836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_DOUBLE_2; 544836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 545836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 546836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element F64_3(RenderScript rs) { 547836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_DOUBLE_3 == null) { 548836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_DOUBLE_3 = createVector(rs, DataType.FLOAT_64, 3); 549836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 550836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_DOUBLE_3; 551836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 552836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 553836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element F64_4(RenderScript rs) { 554836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_DOUBLE_4 == null) { 555836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_DOUBLE_4 = createVector(rs, DataType.FLOAT_64, 4); 556836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 557836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_DOUBLE_4; 558836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 559836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 560836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U8_2(RenderScript rs) { 561836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_UCHAR_2 == null) { 562836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_UCHAR_2 = createVector(rs, DataType.UNSIGNED_8, 2); 563836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 564836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_UCHAR_2; 565836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 566836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 567836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U8_3(RenderScript rs) { 568836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_UCHAR_3 == null) { 569836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_UCHAR_3 = createVector(rs, DataType.UNSIGNED_8, 3); 570836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 571836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_UCHAR_3; 572836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 573836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 5748cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams public static Element U8_4(RenderScript rs) { 5758cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams if(rs.mElement_UCHAR_4 == null) { 5768cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams rs.mElement_UCHAR_4 = createVector(rs, DataType.UNSIGNED_8, 4); 57736e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 5788cb39de03aef6097a90033600d11a60ae000a6e4Jason Sams return rs.mElement_UCHAR_4; 57936e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 58036e612a488511940b61f09803b270aa1c61b68e0Jason Sams 581836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I8_2(RenderScript rs) { 582836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_CHAR_2 == null) { 583836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_CHAR_2 = createVector(rs, DataType.SIGNED_8, 2); 584836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 585836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_CHAR_2; 586836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 587836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 588836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I8_3(RenderScript rs) { 589836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_CHAR_3 == null) { 590836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_CHAR_3 = createVector(rs, DataType.SIGNED_8, 3); 591836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 592836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_CHAR_3; 593836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 594836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 595836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I8_4(RenderScript rs) { 596836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_CHAR_4 == null) { 597836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_CHAR_4 = createVector(rs, DataType.SIGNED_8, 4); 598836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 599836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_CHAR_4; 600836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 601836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 602836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U16_2(RenderScript rs) { 603836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_USHORT_2 == null) { 604836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_USHORT_2 = createVector(rs, DataType.UNSIGNED_16, 2); 605836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 606836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_USHORT_2; 607836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 608836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 609836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U16_3(RenderScript rs) { 610836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_USHORT_3 == null) { 611836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_USHORT_3 = createVector(rs, DataType.UNSIGNED_16, 3); 612836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 613836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_USHORT_3; 614836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 615836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 616836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U16_4(RenderScript rs) { 617836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_USHORT_4 == null) { 618836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_USHORT_4 = createVector(rs, DataType.UNSIGNED_16, 4); 619836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 620836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_USHORT_4; 621836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 622836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 623836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I16_2(RenderScript rs) { 624836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_SHORT_2 == null) { 625836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_SHORT_2 = createVector(rs, DataType.SIGNED_16, 2); 626836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 627836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_SHORT_2; 628836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 629836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 630836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I16_3(RenderScript rs) { 631836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_SHORT_3 == null) { 632836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_SHORT_3 = createVector(rs, DataType.SIGNED_16, 3); 633836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 634836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_SHORT_3; 635836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 636836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 637836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I16_4(RenderScript rs) { 638836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_SHORT_4 == null) { 639836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_SHORT_4 = createVector(rs, DataType.SIGNED_16, 4); 640836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 641836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_SHORT_4; 642836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 643836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 644836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U32_2(RenderScript rs) { 645836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_UINT_2 == null) { 646836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_UINT_2 = createVector(rs, DataType.UNSIGNED_32, 2); 647836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 648836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_UINT_2; 649836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 650836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 651836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U32_3(RenderScript rs) { 652836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_UINT_3 == null) { 653836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_UINT_3 = createVector(rs, DataType.UNSIGNED_32, 3); 654836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 655836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_UINT_3; 656836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 657836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 658836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U32_4(RenderScript rs) { 659836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_UINT_4 == null) { 660836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_UINT_4 = createVector(rs, DataType.UNSIGNED_32, 4); 661836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 662836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_UINT_4; 663836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 664836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 665836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I32_2(RenderScript rs) { 666836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_INT_2 == null) { 667836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_INT_2 = createVector(rs, DataType.SIGNED_32, 2); 668836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 669836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_INT_2; 670836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 671836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 672836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I32_3(RenderScript rs) { 673836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_INT_3 == null) { 674836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_INT_3 = createVector(rs, DataType.SIGNED_32, 3); 675836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 676836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_INT_3; 677836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 678836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 679836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I32_4(RenderScript rs) { 680836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_INT_4 == null) { 681836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_INT_4 = createVector(rs, DataType.SIGNED_32, 4); 682836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 683836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_INT_4; 684836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 685836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 686836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U64_2(RenderScript rs) { 687836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_ULONG_2 == null) { 688836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_ULONG_2 = createVector(rs, DataType.UNSIGNED_64, 2); 689836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 690836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_ULONG_2; 691836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 692836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 693836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U64_3(RenderScript rs) { 694836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_ULONG_3 == null) { 695836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_ULONG_3 = createVector(rs, DataType.UNSIGNED_64, 3); 696836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 697836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_ULONG_3; 698836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 699836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 700836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element U64_4(RenderScript rs) { 701836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_ULONG_4 == null) { 702836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_ULONG_4 = createVector(rs, DataType.UNSIGNED_64, 4); 703836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 704836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_ULONG_4; 705836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 706836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 707836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I64_2(RenderScript rs) { 708836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_LONG_2 == null) { 709836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_LONG_2 = createVector(rs, DataType.SIGNED_64, 2); 710836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 711836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_LONG_2; 712836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 713836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 714836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I64_3(RenderScript rs) { 715836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_LONG_3 == null) { 716836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_LONG_3 = createVector(rs, DataType.SIGNED_64, 3); 717836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 718836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_LONG_3; 719836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 720836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 721836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines public static Element I64_4(RenderScript rs) { 722836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines if(rs.mElement_LONG_4 == null) { 723836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines rs.mElement_LONG_4 = createVector(rs, DataType.SIGNED_64, 4); 724836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 725836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines return rs.mElement_LONG_4; 726836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines } 727836c4a58a7f03485ef433dcdb61837cbc0c39735Stephen Hines 728932e78e9903342e3494983fd3463084caab4ba42Tim Murray public static Element YUV(RenderScript rs) { 729932e78e9903342e3494983fd3463084caab4ba42Tim Murray if (rs.mElement_YUV == null) { 730932e78e9903342e3494983fd3463084caab4ba42Tim Murray rs.mElement_YUV = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_YUV); 731932e78e9903342e3494983fd3463084caab4ba42Tim Murray } 732932e78e9903342e3494983fd3463084caab4ba42Tim Murray return rs.mElement_YUV; 733932e78e9903342e3494983fd3463084caab4ba42Tim Murray } 734932e78e9903342e3494983fd3463084caab4ba42Tim Murray 7351d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams public static Element MATRIX_4X4(RenderScript rs) { 7361d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams if(rs.mElement_MATRIX_4X4 == null) { 7371d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams rs.mElement_MATRIX_4X4 = createUser(rs, DataType.MATRIX_4X4); 7381d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 7391d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams return rs.mElement_MATRIX_4X4; 7401d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 74165c80f824711f084c4ece9204f543a7809534294Jason Sams 74265c80f824711f084c4ece9204f543a7809534294Jason Sams /** @deprecated use MATRIX_4X4 74365c80f824711f084c4ece9204f543a7809534294Jason Sams */ 7441d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams public static Element MATRIX4X4(RenderScript rs) { 7451d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams return MATRIX_4X4(rs); 7461d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 7471d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams 7481d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams public static Element MATRIX_3X3(RenderScript rs) { 7491d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams if(rs.mElement_MATRIX_3X3 == null) { 7501d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams rs.mElement_MATRIX_3X3 = createUser(rs, DataType.MATRIX_3X3); 7511d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 752347697710d033036c533bd6cee409c4b4c19d437Alex Sakhartchouk return rs.mElement_MATRIX_3X3; 7531d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 7541d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams 7551d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams public static Element MATRIX_2X2(RenderScript rs) { 7561d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams if(rs.mElement_MATRIX_2X2 == null) { 7571d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams rs.mElement_MATRIX_2X2 = createUser(rs, DataType.MATRIX_2X2); 7581d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 7591d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams return rs.mElement_MATRIX_2X2; 7601d45c47975ab2a8cef6db5a8976276de31e1e8d0Jason Sams } 76136e612a488511940b61f09803b270aa1c61b68e0Jason Sams 76270d4e5024298f71edb3b04867e05568f5495b4ceJason Sams Element(int id, RenderScript rs, Element[] e, String[] n, int[] as) { 7630de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 764ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams mSize = 0; 765fd79e02e0fec8620da7affaadcf275cf0518241aAlex Sakhartchouk mVectorSize = 1; 766718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElements = e; 767718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElementNames = n; 76870d4e5024298f71edb3b04867e05568f5495b4ceJason Sams mArraySizes = as; 7693aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk mType = DataType.NONE; 7703aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk mKind = DataKind.USER; 7717d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mOffsetInBytes = new int[mElements.length]; 772718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams for (int ct = 0; ct < mElements.length; ct++ ) { 7737d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mOffsetInBytes[ct] = mSize; 7749e401bcd88a0fdeea96f53cb776e5de7b5b084cbAlex Sakhartchouk mSize += mElements[ct].mSize * mArraySizes[ct]; 775718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 7763aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk updateVisibleSubElements(); 777718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 778718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 7790de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk Element(int id, RenderScript rs, DataType dt, DataKind dk, boolean norm, int size) { 7800de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 781252c07802f7039f15f723751162e64a6621e6998Jason Sams if ((dt != DataType.UNSIGNED_5_6_5) && 782252c07802f7039f15f723751162e64a6621e6998Jason Sams (dt != DataType.UNSIGNED_4_4_4_4) && 783252c07802f7039f15f723751162e64a6621e6998Jason Sams (dt != DataType.UNSIGNED_5_5_5_1)) { 784e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk if (size == 3) { 785e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk mSize = dt.mSize * 4; 786e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk } else { 787e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk mSize = dt.mSize * size; 788e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk } 789252c07802f7039f15f723751162e64a6621e6998Jason Sams } else { 790252c07802f7039f15f723751162e64a6621e6998Jason Sams mSize = dt.mSize; 791252c07802f7039f15f723751162e64a6621e6998Jason Sams } 792718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mType = dt; 793718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mKind = dk; 794718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mNormalized = norm; 795718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mVectorSize = size; 79636e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 79736e612a488511940b61f09803b270aa1c61b68e0Jason Sams 7980de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk Element(int id, RenderScript rs) { 7990de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 800dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 801dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 802dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk @Override 803dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk void updateFromNative() { 80406d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams super.updateFromNative(); 805dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 806dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // we will pack mType; mKind; mNormalized; mVectorSize; NumSubElements 807dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int[] dataBuffer = new int[5]; 808e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nElementGetNativeData(getID(mRS), dataBuffer); 8090de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk 8100de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mNormalized = dataBuffer[2] == 1 ? true : false; 8110de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mVectorSize = dataBuffer[3]; 8120de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mSize = 0; 813dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for (DataType dt: DataType.values()) { 814dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(dt.mID == dataBuffer[0]){ 815dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mType = dt; 8160de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mSize = mType.mSize * mVectorSize; 817dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 818dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 819dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for (DataKind dk: DataKind.values()) { 820dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(dk.mID == dataBuffer[1]){ 821dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mKind = dk; 822dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 823dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 824dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 825dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int numSubElements = dataBuffer[4]; 826dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(numSubElements > 0) { 827dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElements = new Element[numSubElements]; 828dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElementNames = new String[numSubElements]; 8297d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mArraySizes = new int[numSubElements]; 8307d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mOffsetInBytes = new int[numSubElements]; 831dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 832dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int[] subElementIds = new int[numSubElements]; 833e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nElementGetSubElements(getID(mRS), subElementIds, mElementNames, mArraySizes); 834dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk for(int i = 0; i < numSubElements; i ++) { 8350de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mElements[i] = new Element(subElementIds[i], mRS); 836dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElements[i].updateFromNative(); 8377d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mOffsetInBytes[i] = mSize; 8387d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mSize += mElements[i].mSize * mArraySizes[i]; 839dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 840dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 8413aac0abe7965ce9e2078c7d5796805d83e39df7cAlex Sakhartchouk updateVisibleSubElements(); 842dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 843dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 8449c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 845a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a custom Element of the specified DataType. The DataKind will be 846a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * set to USER and the vector size to 1 indicating non-vector. 847a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 848a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs The context associated with the new Element. 849a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param dt The DataType for the new element. 850a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 851a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 852bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams static Element createUser(RenderScript rs, DataType dt) { 8530de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk DataKind dk = DataKind.USER; 8540de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk boolean norm = false; 8550de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk int vecSize = 1; 8560de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk int id = rs.nElementCreate(dt.mID, dk.mID, norm, vecSize); 8570de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk return new Element(id, rs, dt, dk, norm, vecSize); 858ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams } 859ea84a7c51790f9ba5f2194a66d6cf4ea8d879776Jason Sams 8609c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 861a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a custom vector element of the specified DataType and vector size. 8623beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines * DataKind will be set to USER. Only primitive types (FLOAT_32, FLOAT_64, 8633beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines * SIGNED_8, SIGNED_16, SIGNED_32, SIGNED_64, UNSIGNED_8, UNSIGNED_16, 8643beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines * UNSIGNED_32, UNSIGNED_64, BOOLEAN) are supported. 865a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 866a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs The context associated with the new Element. 8673beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines * @param dt The DataType for the new Element. 868a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param size Vector size for the new Element. Range 2-4 inclusive 869a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * supported. 870a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 871a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 872a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 873718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public static Element createVector(RenderScript rs, DataType dt, int size) { 874718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (size < 2 || size > 4) { 875bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams throw new RSIllegalArgumentException("Vector size out of range 2-4."); 87636e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 8773beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines 8783beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines switch (dt) { 8793beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines // Support only primitive integer/float/boolean types as vectors. 8803beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case FLOAT_32: 8813beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case FLOAT_64: 8823beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case SIGNED_8: 8833beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case SIGNED_16: 8843beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case SIGNED_32: 8853beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case SIGNED_64: 8863beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case UNSIGNED_8: 8873beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case UNSIGNED_16: 8883beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case UNSIGNED_32: 8893beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case UNSIGNED_64: 8903beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines case BOOLEAN: { 8913beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines DataKind dk = DataKind.USER; 8923beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines boolean norm = false; 8933beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines int id = rs.nElementCreate(dt.mID, dk.mID, norm, size); 8943beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines return new Element(id, rs, dt, dk, norm, size); 8953beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines } 8963beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines 8973beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines default: { 8983beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines throw new RSIllegalArgumentException("Cannot create vector of " + 8993beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines "non-primitive type."); 9003beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines } 9013beb60e67a23b8a7381a7ae16338f793a9ee256aStephen Hines } 902718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 90336e612a488511940b61f09803b270aa1c61b68e0Jason Sams 9049c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 905a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a new pixel Element type. A matching DataType and DataKind must 906a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * be provided. The DataType and DataKind must contain the same number of 907a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * components. Vector size will be set to 1. 908a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 909a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs The context associated with the new Element. 910a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param dt The DataType for the new element. 911a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param dk The DataKind to specify the mapping of each component in the 912a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * DataType. 913a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 914a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 915a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 916718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public static Element createPixel(RenderScript rs, DataType dt, DataKind dk) { 917718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (!(dk == DataKind.PIXEL_L || 918718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dk == DataKind.PIXEL_A || 919718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dk == DataKind.PIXEL_LA || 920718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dk == DataKind.PIXEL_RGB || 9218e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk dk == DataKind.PIXEL_RGBA || 922dd6c8b34f172ba699954e4d3095dba8c0fd5e930Jason Sams dk == DataKind.PIXEL_DEPTH || 923dd6c8b34f172ba699954e4d3095dba8c0fd5e930Jason Sams dk == DataKind.PIXEL_YUV)) { 924c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Unsupported DataKind"); 92507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 926718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (!(dt == DataType.UNSIGNED_8 || 9278e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk dt == DataType.UNSIGNED_16 || 928718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dt == DataType.UNSIGNED_5_6_5 || 929718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dt == DataType.UNSIGNED_4_4_4_4 || 930718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams dt == DataType.UNSIGNED_5_5_5_1)) { 931c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Unsupported DataType"); 93207ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 933718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (dt == DataType.UNSIGNED_5_6_5 && dk != DataKind.PIXEL_RGB) { 934c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 93507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 936718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (dt == DataType.UNSIGNED_5_5_5_1 && dk != DataKind.PIXEL_RGBA) { 937c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 93825ffcdc9d7e32c9c1eeb2b48cc2f17d1353e9faeJason Sams } 939718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if (dt == DataType.UNSIGNED_4_4_4_4 && dk != DataKind.PIXEL_RGBA) { 940c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 94107ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 9428e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk if (dt == DataType.UNSIGNED_16 && 9438e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk dk != DataKind.PIXEL_DEPTH) { 9448e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk throw new RSIllegalArgumentException("Bad kind and type combo"); 9458e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk } 94607ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 947718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int size = 1; 9488e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk switch (dk) { 9498e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk case PIXEL_LA: 950718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams size = 2; 9518e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk break; 9528e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk case PIXEL_RGB: 953718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams size = 3; 9548e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk break; 9558e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk case PIXEL_RGBA: 956718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams size = 4; 9578e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk break; 9588e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk case PIXEL_DEPTH: 9598e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk size = 2; 9608e90f2bc1fa35a2dc7bd2aab8b8241b628800218Alex Sakhartchouk break; 961334ea0c98f051b5a6b85bc616c93304651854298Jason Sams } 962334ea0c98f051b5a6b85bc616c93304651854298Jason Sams 9630de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk boolean norm = true; 9640de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk int id = rs.nElementCreate(dt.mID, dk.mID, norm, size); 9650de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk return new Element(id, rs, dt, dk, norm, size); 966718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 96707ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 9689c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 969f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * Check if the current Element is compatible with another Element. 970f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * Primitive Elements are compatible if they share the same underlying 971f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * size and type (i.e. U8 is compatible with A_8). User-defined Elements 972f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * must be equal in order to be compatible. This requires strict name 973f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * equivalence for all sub-Elements (in addition to structural equivalence). 974f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * 975f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * @param e The Element to check compatibility with. 976f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * 977f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines * @return boolean true if the Elements are compatible, otherwise false. 978f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines */ 979f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines public boolean isCompatible(Element e) { 980f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines // Try strict BaseObj equality to start with. 981f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines if (this.equals(e)) { 982f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines return true; 983f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines } 984f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines 985f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines // Ignore mKind because it is allowed to be different (user vs. pixel). 986f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines // We also ignore mNormalized because it can be different. The mType 987209481137147e64c72f1d5737085b17736931bdaStephen Hines // field must not be NONE since we require name equivalence for 988209481137147e64c72f1d5737085b17736931bdaStephen Hines // all user-created Elements. 989f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines return ((mSize == e.mSize) && 990209481137147e64c72f1d5737085b17736931bdaStephen Hines (mType != DataType.NONE) && 991f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines (mType == e.mType) && 992f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines (mVectorSize == e.mVectorSize)); 993f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines } 994f257e513a11cb89a6cf5200ecf5ae14714cdaf39Stephen Hines 9959c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 996a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Builder class for producing complex elements with matching field and name 997a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * pairs. The builder starts empty. The order in which elements are added 998a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * is retained for the layout in memory. 999a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1000a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1001718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public static class Builder { 1002718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams RenderScript mRS; 1003718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Element[] mElements; 1004718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String[] mElementNames; 100570d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int[] mArraySizes; 1006718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams int mCount; 1007e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk int mSkipPadding; 1008334ea0c98f051b5a6b85bc616c93304651854298Jason Sams 10099c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1010a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a builder object. 1011a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1012a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs 1013a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1014718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams public Builder(RenderScript rs) { 1015718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mRS = rs; 1016718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mCount = 0; 1017718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElements = new Element[8]; 1018718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElementNames = new String[8]; 101970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams mArraySizes = new int[8]; 1020718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 1021718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams 10229c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1023a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Add an array of elements to this element. 1024a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1025a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param element 1026a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param name 1027a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param arraySize 1028a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1029bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder add(Element element, String name, int arraySize) { 103070d4e5024298f71edb3b04867e05568f5495b4ceJason Sams if (arraySize < 1) { 1031c1d6210fb5cc558ccea95a59a2b33bb9015fc7deJason Sams throw new RSIllegalArgumentException("Array size cannot be less than 1."); 103270d4e5024298f71edb3b04867e05568f5495b4ceJason Sams } 1033e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk 1034e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk // Skip padding fields after a vector 3 type. 1035e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk if (mSkipPadding != 0) { 1036e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk if (name.startsWith("#padding_")) { 1037e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk mSkipPadding = 0; 1038e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk return this; 1039e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk } 1040e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk } 1041e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk 1042e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk if (element.mVectorSize == 3) { 1043e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk mSkipPadding = 1; 1044e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk } else { 1045e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk mSkipPadding = 0; 1046e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk } 1047e60149d2277da53c4a681b7f3971cf13cd4b012bAlex Sakhartchouk 1048718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams if(mCount == mElements.length) { 1049718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Element[] e = new Element[mCount + 8]; 1050718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String[] s = new String[mCount + 8]; 105170d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int[] as = new int[mCount + 8]; 1052718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams System.arraycopy(mElements, 0, e, 0, mCount); 1053718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams System.arraycopy(mElementNames, 0, s, 0, mCount); 105470d4e5024298f71edb3b04867e05568f5495b4ceJason Sams System.arraycopy(mArraySizes, 0, as, 0, mCount); 1055718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElements = e; 1056718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElementNames = s; 105770d4e5024298f71edb3b04867e05568f5495b4ceJason Sams mArraySizes = as; 1058718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams } 1059718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElements[mCount] = element; 1060718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mElementNames[mCount] = name; 106170d4e5024298f71edb3b04867e05568f5495b4ceJason Sams mArraySizes[mCount] = arraySize; 1062718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams mCount++; 1063bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 106407ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams } 106507ae40623737a6060b8a925fd2e6bba76780dcd4Jason Sams 10669c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1067a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Add a single element to this Element. 1068a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1069a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param element 1070a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param name 1071a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 1072bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder add(Element element, String name) { 1073bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return add(element, name, 1); 107470d4e5024298f71edb3b04867e05568f5495b4ceJason Sams } 107570d4e5024298f71edb3b04867e05568f5495b4ceJason Sams 10769c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1077a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create the element from this builder. 1078a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1079a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 1080a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 1081a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 108222534176fb5c1257130ef4ee589739ca42766a32Jason Sams public Element create() { 1083771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 1084718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams Element[] ein = new Element[mCount]; 1085718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams String[] sin = new String[mCount]; 108670d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int[] asin = new int[mCount]; 1087718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams java.lang.System.arraycopy(mElements, 0, ein, 0, mCount); 1088718cd1f322ee5b62b6a49cb36195bcb18a5ab711Jason Sams java.lang.System.arraycopy(mElementNames, 0, sin, 0, mCount); 108970d4e5024298f71edb3b04867e05568f5495b4ceJason Sams java.lang.System.arraycopy(mArraySizes, 0, asin, 0, mCount); 10900de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk 10910de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk int[] ids = new int[ein.length]; 10920de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk for (int ct = 0; ct < ein.length; ct++ ) { 1093e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams ids[ct] = ein[ct].getID(mRS); 10940de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk } 109570d4e5024298f71edb3b04867e05568f5495b4ceJason Sams int id = mRS.nElementCreate2(ids, sin, asin); 109670d4e5024298f71edb3b04867e05568f5495b4ceJason Sams return new Element(id, mRS, ein, sin, asin); 109736e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 109836e612a488511940b61f09803b270aa1c61b68e0Jason Sams } 109936e612a488511940b61f09803b270aa1c61b68e0Jason Sams} 110036e612a488511940b61f09803b270aa1c61b68e0Jason Sams 1101