145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams/* 2baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray * Copyright (C) 2013 The Android Open Source Project 345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * you may not use this file except in compliance with the License. 645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * You may obtain a copy of the License at 745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 1045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Unless required by applicable law or agreed to in writing, software 1145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * See the License for the specific language governing permissions and 1445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * limitations under the License. 1545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 1645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 1745d443665f5ce7efa934706a89883f0cc87f3513Jason Samspackage android.support.v8.renderscript; 1845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 1945d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport java.lang.reflect.Field; 20a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 2145d443665f5ce7efa934706a89883f0cc87f3513Jason Samsimport android.util.Log; 2245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 2345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams/** 24032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * <p>An Element represents one item within an {@link 252192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * android.support.v8.renderscript.Allocation}. An Element is roughly 262192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * equivalent to a C type in a RenderScript kernel. Elements may be basic or 272192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * complex. Some basic elements are</p> <ul> <li>A single float value 282192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * (equivalent to a float in a kernel)</li> <li>A four-element float vector 292192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * (equivalent to a float4 in a kernel)</li> <li>An unsigned 32-bit integer 302192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * (equivalent to an unsigned int in a kernel)</li> <li>A single signed 8-bit 312192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * integer (equivalent to a char in a kernel)</li> </ul> <p>A complex element is 322192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * roughly equivalent to a C struct and contains a number of basic or complex 332192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * Elements. From Java code, a complex element contains a list of sub-elements 342192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * and names that represents a particular data structure. Structs used in RS 352192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * scripts are available to Java code by using the 362192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * {@code ScriptField_structname} class that is reflected from a particular 372192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * script.</p> 3845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 39032b2c2c8a3cf2c55f6f08557f2648d799766c4eStephen Hines * <p>Basic Elements are comprised of a {@link 402192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * android.support.v8.renderscript.Element.DataType} and a {@link 412192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * android.support.v8.renderscript.Element.DataKind}. The DataType encodes C 422192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * type information of an Element, while the DataKind encodes how that Element 432192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * should be interpreted by a {@link android.support.v8.renderscript.Sampler}. 442192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * Note that {@link android.support.v8.renderscript.Allocation} objects with 452192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * DataKind {@link android.support.v8.renderscript.Element.DataKind#USER} cannot 462192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * be used as input for a {@link android.support.v8.renderscript.Sampler}. In 472192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * general, {@link android.support.v8.renderscript.Allocation} objects that are 482192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * intended for use with a {@link android.support.v8.renderscript.Sampler} 492192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * should use bitmap-derived Elements such as 502192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * {@link android.support.v8.renderscript.Element#RGBA_8888} or {@link 512192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * android.support.v8.renderscript#Element.A_8}.</p> 5245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 5345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * <div class="special reference"> 5445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * <h3>Developer Guides</h3> 552192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * <p>For more information about creating an application that uses RenderScript, 562192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * read the 572192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> 582192d04dde96e02b9c908d3cc846c8c881ff54a1Stephen Hines * developer guide.</p> 5945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * </div> 6045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams **/ 6145d443665f5ce7efa934706a89883f0cc87f3513Jason Samspublic class Element extends BaseObj { 6245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int mSize; 6345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element[] mElements; 6445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams String[] mElementNames; 6545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int[] mArraySizes; 6645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int[] mOffsetInBytes; 6745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int[] mVisibleElementMap; 6845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 6945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams DataType mType; 7045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams DataKind mKind; 7145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams boolean mNormalized; 7245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int mVectorSize; 7345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 7445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams private void updateVisibleSubElements() { 7545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mElements == null) { 7645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return; 7745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 7845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 7945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int noPaddingFieldCount = 0; 8045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int fieldCount = mElementNames.length; 8145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // Find out how many elements are not padding 8245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams for (int ct = 0; ct < fieldCount; ct ++) { 8345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mElementNames[ct].charAt(0) != '#') { 8445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams noPaddingFieldCount ++; 8545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 8645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 8745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mVisibleElementMap = new int[noPaddingFieldCount]; 8845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 8945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // Make a map that points us at non-padding elements 9045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams for (int ct = 0, ctNoPadding = 0; ct < fieldCount; ct ++) { 9145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mElementNames[ct].charAt(0) != '#') { 9245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mVisibleElementMap[ctNoPadding ++] = ct; 9345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 9445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 9545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 9645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 9745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 9845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return element size in bytes 9945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 100baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray public int getBytesSize() { 101baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray return mSize; 102baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } 10345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 10445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 10545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Returns the number of vector components. 2 for float2, 4 for 10645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * float4, etc. 10745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return element vector size 10845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 109baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray public int getVectorSize() { 110baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray return mVectorSize; 111baf4b4a16ff2ab85653438b93db9af03d4375f2dTim Murray } 11245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 11345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 11445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 11545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * DataType represents the basic type information for a basic element. The 11645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * naming convention follows. For numeric types it is FLOAT, 11745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * SIGNED, or UNSIGNED followed by the _BITS where BITS is the 11845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * size of the data. BOOLEAN is a true / false (1,0) 11945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * represented in an 8 bit container. The UNSIGNED variants 12045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * with multiple bit definitions are for packed graphical data 12145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * formats and represent vectors with per vector member sizes 12245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * which are treated as a single unit for packing and alignment 12345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * purposes. 12445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 12545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * MATRIX the three matrix types contain FLOAT_32 elements and are treated 12645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * as 32 bits for alignment purposes. 12745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 12845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * RS_* objects. 32 bit opaque handles. 12945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 13045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public enum DataType { 13145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams NONE (0, 0), 13245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams //FLOAT_16 (1, 2), 13345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams FLOAT_32 (2, 4), 13445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams FLOAT_64 (3, 8), 13545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams SIGNED_8 (4, 1), 13645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams SIGNED_16 (5, 2), 13745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams SIGNED_32 (6, 4), 13845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams SIGNED_64 (7, 8), 13945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams UNSIGNED_8 (8, 1), 14045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams UNSIGNED_16 (9, 2), 14145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams UNSIGNED_32 (10, 4), 14245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams UNSIGNED_64 (11, 8), 14345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 14445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams BOOLEAN(12, 1), 14545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 14645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams UNSIGNED_5_6_5 (13, 2), 14745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams UNSIGNED_5_5_5_1 (14, 2), 14845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams UNSIGNED_4_4_4_4 (15, 2), 14945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 15045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams MATRIX_4X4 (16, 64), 15145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams MATRIX_3X3 (17, 36), 15245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams MATRIX_2X2 (18, 16), 15345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 154bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RS_ELEMENT (1000), 155bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RS_TYPE (1001), 156bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RS_ALLOCATION (1002), 157bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RS_SAMPLER (1003), 158bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang RS_SCRIPT (1004); 15945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 16045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int mID; 16145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int mSize; 16245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams DataType(int id, int size) { 16345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mID = id; 16445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mSize = size; 16545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 166bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang 167bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang DataType(int id) { 168bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang mID = id; 169bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang mSize = 4; 170bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang if (RenderScript.sPointerSize == 8) { 171bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang mSize = 32; 172bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 173bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang } 17445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 17545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 17645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 17745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * The special interpretation of the data if required. This is primarly 17845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * useful for graphical data. USER indicates no special interpretation is 17945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * expected. PIXEL is used in conjunction with the standard data types for 18045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * representing texture formats. 18145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 18245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public enum DataKind { 18345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams USER (0), 18445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 18545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams PIXEL_L (7), 18645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams PIXEL_A (8), 18745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams PIXEL_LA (9), 18845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams PIXEL_RGB (10), 18938f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams PIXEL_RGBA (11), 19038f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams PIXEL_DEPTH (12), 19138f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams PIXEL_YUV(13); 19245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 19345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int mID; 19445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams DataKind(int id) { 19545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mID = id; 19645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 19745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 19845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 19945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 20045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Return if a element is too complex for use as a data source for a Mesh or 20145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * a Program. 20245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 20345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return boolean 20445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 20545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public boolean isComplex() { 20645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mElements == null) { 20745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return false; 20845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 20945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams for (int ct=0; ct < mElements.length; ct++) { 21045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mElements[ct].mElements != null) { 21145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return true; 21245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 21345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 21445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return false; 21545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 21645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 21745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 21845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Elements could be simple, such as an int or a float, or a 21945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * structure with multiple sub elements, such as a collection of 22045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * floats, float2, float4. This function returns zero for simple 22145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * elements or the number of sub-elements otherwise. 22245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return number of sub-elements in this element 22345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 22445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public int getSubElementCount() { 22545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mVisibleElementMap == null) { 22645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return 0; 22745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 22845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mVisibleElementMap.length; 22945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 23045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 23145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 23245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * For complex elements, this function will return the 23345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * sub-element at index 23445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param index index of the sub-element to return 23545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return sub-element in this element at given index 23645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 23745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public Element getSubElement(int index) { 23845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mVisibleElementMap == null) { 23945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Element contains no sub-elements"); 24045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 24145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (index < 0 || index >= mVisibleElementMap.length) { 24245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Illegal sub-element index"); 24345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 24445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mElements[mVisibleElementMap[index]]; 24545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 24645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 24745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 24845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * For complex elements, this function will return the 24945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * sub-element name at index 25045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param index index of the sub-element 25145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return sub-element in this element at given index 25245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 25345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public String getSubElementName(int index) { 25445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mVisibleElementMap == null) { 25545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Element contains no sub-elements"); 25645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 25745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (index < 0 || index >= mVisibleElementMap.length) { 25845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Illegal sub-element index"); 25945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 26045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mElementNames[mVisibleElementMap[index]]; 26145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 26245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 26345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 26445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * For complex elements, some sub-elements could be statically 26545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * sized arrays. This function will return the array size for 26645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * sub-element at index 26745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param index index of the sub-element 26845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return array size of sub-element in this element at given index 26945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 27045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public int getSubElementArraySize(int index) { 27145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mVisibleElementMap == null) { 27245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Element contains no sub-elements"); 27345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 27445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (index < 0 || index >= mVisibleElementMap.length) { 27545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Illegal sub-element index"); 27645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 27745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mArraySizes[mVisibleElementMap[index]]; 27845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 27945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 28045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 28145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * This function specifies the location of a sub-element within 28245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * the element 28345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param index index of the sub-element 28445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return offset in bytes of sub-element in this element at given index 28545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 28645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public int getSubElementOffsetBytes(int index) { 28745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mVisibleElementMap == null) { 28845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Element contains no sub-elements"); 28945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 29045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (index < 0 || index >= mVisibleElementMap.length) { 29145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Illegal sub-element index"); 29245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 29345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mOffsetInBytes[mVisibleElementMap[index]]; 29445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 29545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 29645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 29745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return element data type 29845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 29945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public DataType getDataType() { 30045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mType; 30145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 30245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 30345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 30445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return element data kind 30545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 30645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public DataKind getDataKind() { 30745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return mKind; 30845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 30945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 31045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 31145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Utility function for returning an Element containing a single Boolean. 31245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 31345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param rs Context to which the element will belong. 31445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 31545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return Element 31645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 31745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element BOOLEAN(RenderScript rs) { 31845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_BOOLEAN == null) { 31945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_BOOLEAN = createUser(rs, DataType.BOOLEAN); 32045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 32145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_BOOLEAN; 32245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 32345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 32445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 32545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Utility function for returning an Element containing a single UNSIGNED_8. 32645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 32745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param rs Context to which the element will belong. 32845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 32945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return Element 33045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 33145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U8(RenderScript rs) { 33245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_U8 == null) { 33345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_U8 = createUser(rs, DataType.UNSIGNED_8); 33445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 33545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_U8; 33645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 33745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 33845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 33945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Utility function for returning an Element containing a single SIGNED_8. 34045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 34145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param rs Context to which the element will belong. 34245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 34345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return Element 34445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 34545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I8(RenderScript rs) { 34645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_I8 == null) { 34745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_I8 = createUser(rs, DataType.SIGNED_8); 34845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 34945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_I8; 35045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 35145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 35245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U16(RenderScript rs) { 35345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_U16 == null) { 35445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_U16 = createUser(rs, DataType.UNSIGNED_16); 35545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 35645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_U16; 35745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 35845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 35945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I16(RenderScript rs) { 36045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_I16 == null) { 36145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_I16 = createUser(rs, DataType.SIGNED_16); 36245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 36345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_I16; 36445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 36545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 36645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U32(RenderScript rs) { 36745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_U32 == null) { 36845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_U32 = createUser(rs, DataType.UNSIGNED_32); 36945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 37045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_U32; 37145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 37245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 37345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I32(RenderScript rs) { 37445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_I32 == null) { 37545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_I32 = createUser(rs, DataType.SIGNED_32); 37645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 37745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_I32; 37845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 37945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 38045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U64(RenderScript rs) { 38145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_U64 == null) { 38245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_U64 = createUser(rs, DataType.UNSIGNED_64); 38345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 38445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_U64; 38545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 38645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 38745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I64(RenderScript rs) { 38845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_I64 == null) { 38945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_I64 = createUser(rs, DataType.SIGNED_64); 39045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 39145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_I64; 39245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 39345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 39445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element F32(RenderScript rs) { 39545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_F32 == null) { 39645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_F32 = createUser(rs, DataType.FLOAT_32); 39745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 39845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_F32; 39945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 40045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 40145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element F64(RenderScript rs) { 40245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_F64 == null) { 40345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_F64 = createUser(rs, DataType.FLOAT_64); 40445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 40545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_F64; 40645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 40745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 40845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element ELEMENT(RenderScript rs) { 40945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_ELEMENT == null) { 41045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_ELEMENT = createUser(rs, DataType.RS_ELEMENT); 41145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 41245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_ELEMENT; 41345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 41445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 41545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element TYPE(RenderScript rs) { 41645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_TYPE == null) { 41745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_TYPE = createUser(rs, DataType.RS_TYPE); 41845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 41945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_TYPE; 42045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 42145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 42245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element ALLOCATION(RenderScript rs) { 42345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_ALLOCATION == null) { 42445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_ALLOCATION = createUser(rs, DataType.RS_ALLOCATION); 42545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 42645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_ALLOCATION; 42745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 42845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 42945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element SAMPLER(RenderScript rs) { 43045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_SAMPLER == null) { 43145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_SAMPLER = createUser(rs, DataType.RS_SAMPLER); 43245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 43345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_SAMPLER; 43445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 43545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 43645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element SCRIPT(RenderScript rs) { 43745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_SCRIPT == null) { 43845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_SCRIPT = createUser(rs, DataType.RS_SCRIPT); 43945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 44045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_SCRIPT; 44145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 44245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 44345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 44445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element A_8(RenderScript rs) { 44545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_A_8 == null) { 44645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_A_8 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_A); 44745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 44845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_A_8; 44945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 45045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 45145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element RGB_565(RenderScript rs) { 45245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_RGB_565 == null) { 45345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_RGB_565 = createPixel(rs, DataType.UNSIGNED_5_6_5, DataKind.PIXEL_RGB); 45445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 45545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_RGB_565; 45645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 45745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 45845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element RGB_888(RenderScript rs) { 45945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_RGB_888 == null) { 46045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_RGB_888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGB); 46145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 46245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_RGB_888; 46345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 46445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 46545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element RGBA_5551(RenderScript rs) { 46645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_RGBA_5551 == null) { 46745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_RGBA_5551 = createPixel(rs, DataType.UNSIGNED_5_5_5_1, DataKind.PIXEL_RGBA); 46845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 46945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_RGBA_5551; 47045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 47145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 47245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element RGBA_4444(RenderScript rs) { 47345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_RGBA_4444 == null) { 47445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_RGBA_4444 = createPixel(rs, DataType.UNSIGNED_4_4_4_4, DataKind.PIXEL_RGBA); 47545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 47645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_RGBA_4444; 47745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 47845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 47945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element RGBA_8888(RenderScript rs) { 48045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_RGBA_8888 == null) { 48145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_RGBA_8888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGBA); 48245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 48345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_RGBA_8888; 48445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 48545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 48645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element F32_2(RenderScript rs) { 48745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_FLOAT_2 == null) { 48845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_FLOAT_2 = createVector(rs, DataType.FLOAT_32, 2); 48945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 49045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_FLOAT_2; 49145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 49245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 49345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element F32_3(RenderScript rs) { 49445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_FLOAT_3 == null) { 49545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_FLOAT_3 = createVector(rs, DataType.FLOAT_32, 3); 49645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 49745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_FLOAT_3; 49845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 49945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 50045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element F32_4(RenderScript rs) { 50145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_FLOAT_4 == null) { 50245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_FLOAT_4 = createVector(rs, DataType.FLOAT_32, 4); 50345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 50445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_FLOAT_4; 50545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 50645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 50745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element F64_2(RenderScript rs) { 50845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_DOUBLE_2 == null) { 50945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_DOUBLE_2 = createVector(rs, DataType.FLOAT_64, 2); 51045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 51145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_DOUBLE_2; 51245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 51345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 51445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element F64_3(RenderScript rs) { 51545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_DOUBLE_3 == null) { 51645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_DOUBLE_3 = createVector(rs, DataType.FLOAT_64, 3); 51745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 51845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_DOUBLE_3; 51945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 52045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 52145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element F64_4(RenderScript rs) { 52245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_DOUBLE_4 == null) { 52345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_DOUBLE_4 = createVector(rs, DataType.FLOAT_64, 4); 52445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 52545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_DOUBLE_4; 52645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 52745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 52845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U8_2(RenderScript rs) { 52945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_UCHAR_2 == null) { 53045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_UCHAR_2 = createVector(rs, DataType.UNSIGNED_8, 2); 53145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 53245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_UCHAR_2; 53345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 53445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 53545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U8_3(RenderScript rs) { 53645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_UCHAR_3 == null) { 53745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_UCHAR_3 = createVector(rs, DataType.UNSIGNED_8, 3); 53845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 53945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_UCHAR_3; 54045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 54145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 54245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U8_4(RenderScript rs) { 54345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_UCHAR_4 == null) { 54445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_UCHAR_4 = createVector(rs, DataType.UNSIGNED_8, 4); 54545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 54645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_UCHAR_4; 54745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 54845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 54945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I8_2(RenderScript rs) { 55045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_CHAR_2 == null) { 55145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_CHAR_2 = createVector(rs, DataType.SIGNED_8, 2); 55245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 55345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_CHAR_2; 55445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 55545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 55645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I8_3(RenderScript rs) { 55745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_CHAR_3 == null) { 55845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_CHAR_3 = createVector(rs, DataType.SIGNED_8, 3); 55945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 56045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_CHAR_3; 56145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 56245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 56345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I8_4(RenderScript rs) { 56445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_CHAR_4 == null) { 56545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_CHAR_4 = createVector(rs, DataType.SIGNED_8, 4); 56645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 56745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_CHAR_4; 56845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 56945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 57045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U16_2(RenderScript rs) { 57145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_USHORT_2 == null) { 57245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_USHORT_2 = createVector(rs, DataType.UNSIGNED_16, 2); 57345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 57445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_USHORT_2; 57545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 57645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 57745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U16_3(RenderScript rs) { 57845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_USHORT_3 == null) { 57945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_USHORT_3 = createVector(rs, DataType.UNSIGNED_16, 3); 58045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 58145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_USHORT_3; 58245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 58345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 58445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U16_4(RenderScript rs) { 58545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_USHORT_4 == null) { 58645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_USHORT_4 = createVector(rs, DataType.UNSIGNED_16, 4); 58745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 58845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_USHORT_4; 58945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 59045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 59145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I16_2(RenderScript rs) { 59245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_SHORT_2 == null) { 59345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_SHORT_2 = createVector(rs, DataType.SIGNED_16, 2); 59445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 59545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_SHORT_2; 59645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 59745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 59845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I16_3(RenderScript rs) { 59945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_SHORT_3 == null) { 60045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_SHORT_3 = createVector(rs, DataType.SIGNED_16, 3); 60145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 60245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_SHORT_3; 60345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 60445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 60545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I16_4(RenderScript rs) { 60645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_SHORT_4 == null) { 60745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_SHORT_4 = createVector(rs, DataType.SIGNED_16, 4); 60845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 60945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_SHORT_4; 61045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 61145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 61245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U32_2(RenderScript rs) { 61345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_UINT_2 == null) { 61445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_UINT_2 = createVector(rs, DataType.UNSIGNED_32, 2); 61545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 61645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_UINT_2; 61745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 61845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 61945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U32_3(RenderScript rs) { 62045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_UINT_3 == null) { 62145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_UINT_3 = createVector(rs, DataType.UNSIGNED_32, 3); 62245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 62345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_UINT_3; 62445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 62545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 62645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U32_4(RenderScript rs) { 62745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_UINT_4 == null) { 62845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_UINT_4 = createVector(rs, DataType.UNSIGNED_32, 4); 62945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 63045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_UINT_4; 63145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 63245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 63345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I32_2(RenderScript rs) { 63445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_INT_2 == null) { 63545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_INT_2 = createVector(rs, DataType.SIGNED_32, 2); 63645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 63745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_INT_2; 63845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 63945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 64045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I32_3(RenderScript rs) { 64145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_INT_3 == null) { 64245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_INT_3 = createVector(rs, DataType.SIGNED_32, 3); 64345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 64445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_INT_3; 64545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 64645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 64745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I32_4(RenderScript rs) { 64845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_INT_4 == null) { 64945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_INT_4 = createVector(rs, DataType.SIGNED_32, 4); 65045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 65145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_INT_4; 65245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 65345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 65445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U64_2(RenderScript rs) { 65545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_ULONG_2 == null) { 65645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_ULONG_2 = createVector(rs, DataType.UNSIGNED_64, 2); 65745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 65845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_ULONG_2; 65945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 66045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 66145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U64_3(RenderScript rs) { 66245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_ULONG_3 == null) { 66345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_ULONG_3 = createVector(rs, DataType.UNSIGNED_64, 3); 66445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 66545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_ULONG_3; 66645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 66745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 66845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element U64_4(RenderScript rs) { 66945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_ULONG_4 == null) { 67045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_ULONG_4 = createVector(rs, DataType.UNSIGNED_64, 4); 67145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 67245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_ULONG_4; 67345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 67445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 67545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I64_2(RenderScript rs) { 67645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_LONG_2 == null) { 67745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_LONG_2 = createVector(rs, DataType.SIGNED_64, 2); 67845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 67945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_LONG_2; 68045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 68145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 68245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I64_3(RenderScript rs) { 68345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_LONG_3 == null) { 68445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_LONG_3 = createVector(rs, DataType.SIGNED_64, 3); 68545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 68645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_LONG_3; 68745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 68845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 68945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element I64_4(RenderScript rs) { 69045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_LONG_4 == null) { 69145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_LONG_4 = createVector(rs, DataType.SIGNED_64, 4); 69245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 69345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_LONG_4; 69445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 69545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 69645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element MATRIX_4X4(RenderScript rs) { 69745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_MATRIX_4X4 == null) { 69845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_MATRIX_4X4 = createUser(rs, DataType.MATRIX_4X4); 69945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 70045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_MATRIX_4X4; 70145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 70245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 70345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element MATRIX_3X3(RenderScript rs) { 70445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_MATRIX_3X3 == null) { 70545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_MATRIX_3X3 = createUser(rs, DataType.MATRIX_3X3); 70645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 70745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_MATRIX_3X3; 70845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 70945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 71045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element MATRIX_2X2(RenderScript rs) { 71145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(rs.mElement_MATRIX_2X2 == null) { 71245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams rs.mElement_MATRIX_2X2 = createUser(rs, DataType.MATRIX_2X2); 71345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 71445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return rs.mElement_MATRIX_2X2; 71545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 71645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 717bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang Element(long id, RenderScript rs, Element[] e, String[] n, int[] as) { 71845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams super(id, rs); 71945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mSize = 0; 72045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mVectorSize = 1; 72145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mElements = e; 72245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mElementNames = n; 72345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mArraySizes = as; 72445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mType = DataType.NONE; 72545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mKind = DataKind.USER; 72645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mOffsetInBytes = new int[mElements.length]; 72745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams for (int ct = 0; ct < mElements.length; ct++ ) { 72845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mOffsetInBytes[ct] = mSize; 72945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mSize += mElements[ct].mSize * mArraySizes[ct]; 73045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 73145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams updateVisibleSubElements(); 73245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 73345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 734bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang Element(long id, RenderScript rs, DataType dt, DataKind dk, boolean norm, int size) { 73545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams super(id, rs); 73645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if ((dt != DataType.UNSIGNED_5_6_5) && 73745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams (dt != DataType.UNSIGNED_4_4_4_4) && 73845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams (dt != DataType.UNSIGNED_5_5_5_1)) { 73945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (size == 3) { 74045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mSize = dt.mSize * 4; 74145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } else { 74245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mSize = dt.mSize * size; 74345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 74445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } else { 74545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mSize = dt.mSize; 74645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 74745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mType = dt; 74845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mKind = dk; 74945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mNormalized = norm; 75045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mVectorSize = size; 75145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 75245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 753bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang Element(long id, RenderScript rs) { 75445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams super(id, rs); 75545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 75645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 7576f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang /* 7586f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * Get an identical dummy Element for Compat Context 7596f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang * 7606f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang */ 7616f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang public long getDummyElement(RenderScript mRS) { 7626f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang return mRS.nIncElementCreate(mType.mID, mKind.mID, mNormalized, mVectorSize); 7636f5555db1af436bb5aad430e6e00aa5b69d5ca6cMiao Wang } 76445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 76545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Create a custom Element of the specified DataType. The DataKind will be 76645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * set to USER and the vector size to 1 indicating non-vector. 76745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 76845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param rs The context associated with the new Element. 76945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param dt The DataType for the new element. 77045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return Element 77145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 77245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams static Element createUser(RenderScript rs, DataType dt) { 77345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams DataKind dk = DataKind.USER; 77445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams boolean norm = false; 77545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int vecSize = 1; 776bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang long id = rs.nElementCreate(dt.mID, dk.mID, norm, vecSize); 77745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return new Element(id, rs, dt, dk, norm, vecSize); 77845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 77945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 78045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 78145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Create a custom vector element of the specified DataType and vector size. 78245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * DataKind will be set to USER. Only primitive types (FLOAT_32, FLOAT_64, 78345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * SIGNED_8, SIGNED_16, SIGNED_32, SIGNED_64, UNSIGNED_8, UNSIGNED_16, 78445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * UNSIGNED_32, UNSIGNED_64, BOOLEAN) are supported. 78545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 78645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param rs The context associated with the new Element. 78745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param dt The DataType for the new Element. 78845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param size Vector size for the new Element. Range 2-4 inclusive 78945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * supported. 79045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 79145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return Element 79245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 79345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element createVector(RenderScript rs, DataType dt, int size) { 79445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (size < 2 || size > 4) { 79545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Vector size out of range 2-4."); 79645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 79745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 79845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams switch (dt) { 79945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // Support only primitive integer/float/boolean types as vectors. 80045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case FLOAT_32: 80145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case FLOAT_64: 80245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case SIGNED_8: 80345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case SIGNED_16: 80445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case SIGNED_32: 80545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case SIGNED_64: 80645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case UNSIGNED_8: 80745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case UNSIGNED_16: 80845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case UNSIGNED_32: 80945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case UNSIGNED_64: 81045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case BOOLEAN: { 81145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams DataKind dk = DataKind.USER; 81245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams boolean norm = false; 813bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang long id = rs.nElementCreate(dt.mID, dk.mID, norm, size); 81445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return new Element(id, rs, dt, dk, norm, size); 81545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 81645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 81745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams default: { 81845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Cannot create vector of " + 81945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams "non-primitive type."); 82045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 82145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 82245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 82345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 82445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 82545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Create a new pixel Element type. A matching DataType and DataKind must 82645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * be provided. The DataType and DataKind must contain the same number of 82745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * components. Vector size will be set to 1. 82845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 82945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param rs The context associated with the new Element. 83045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param dt The DataType for the new element. 83145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param dk The DataKind to specify the mapping of each component in the 83245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * DataType. 83345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 83445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return Element 83545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 83645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static Element createPixel(RenderScript rs, DataType dt, DataKind dk) { 83745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (!(dk == DataKind.PIXEL_L || 83845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams dk == DataKind.PIXEL_A || 83945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams dk == DataKind.PIXEL_LA || 84045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams dk == DataKind.PIXEL_RGB || 84138f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams dk == DataKind.PIXEL_RGBA || 84238f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams dk == DataKind.PIXEL_DEPTH || 84338f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams dk == DataKind.PIXEL_YUV)) { 84445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Unsupported DataKind"); 84545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 84645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (!(dt == DataType.UNSIGNED_8 || 84745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams dt == DataType.UNSIGNED_16 || 84845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams dt == DataType.UNSIGNED_5_6_5 || 84945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams dt == DataType.UNSIGNED_4_4_4_4 || 85045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams dt == DataType.UNSIGNED_5_5_5_1)) { 85145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Unsupported DataType"); 85245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 85345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (dt == DataType.UNSIGNED_5_6_5 && dk != DataKind.PIXEL_RGB) { 85445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 85545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 85645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (dt == DataType.UNSIGNED_5_5_5_1 && dk != DataKind.PIXEL_RGBA) { 85745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 85845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 85945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (dt == DataType.UNSIGNED_4_4_4_4 && dk != DataKind.PIXEL_RGBA) { 86045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 86145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 86238f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams if (dt == DataType.UNSIGNED_16 && 86338f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams dk != DataKind.PIXEL_DEPTH) { 86438f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 86538f02dc6d04d04fff070e7f2146e728102dbe252Jason Sams } 86645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 86745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int size = 1; 86845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams switch (dk) { 86945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case PIXEL_LA: 87045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams size = 2; 87145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams break; 87245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case PIXEL_RGB: 87345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams size = 3; 87445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams break; 87545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams case PIXEL_RGBA: 87645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams size = 4; 87745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams break; 87845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 87945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 88045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams boolean norm = true; 881bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang long id = rs.nElementCreate(dt.mID, dk.mID, norm, size); 88245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return new Element(id, rs, dt, dk, norm, size); 88345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 88445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 88545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 88645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Check if the current Element is compatible with another Element. 88745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Primitive Elements are compatible if they share the same underlying 88845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * size and type (i.e. U8 is compatible with A_8). User-defined Elements 88945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * must be equal in order to be compatible. This requires strict name 89045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * equivalence for all sub-Elements (in addition to structural equivalence). 89145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 89245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param e The Element to check compatibility with. 89345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 89445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return boolean true if the Elements are compatible, otherwise false. 89545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 89645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public boolean isCompatible(Element e) { 89745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // Try strict BaseObj equality to start with. 89845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (this.equals(e)) { 89945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return true; 90045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 90145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 90245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // Ignore mKind because it is allowed to be different (user vs. pixel). 90345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // We also ignore mNormalized because it can be different. The mType 90445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // field must not be NONE since we require name equivalence for 90545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // all user-created Elements. 90645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return ((mSize == e.mSize) && 90745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams (mType != DataType.NONE) && 90845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams (mType == e.mType) && 90945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams (mVectorSize == e.mVectorSize)); 91045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 91145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 91245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 91345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Builder class for producing complex elements with matching field and name 91445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * pairs. The builder starts empty. The order in which elements are added 91545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * is retained for the layout in memory. 91645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 91745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 91845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public static class Builder { 919a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 92045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams RenderScript mRS; 92145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element[] mElements; 92245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams String[] mElementNames; 92345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int[] mArraySizes; 92445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int mCount; 92545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int mSkipPadding; 92645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 92745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 92845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Create a builder object. 92945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 93045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param rs 93145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 93245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public Builder(RenderScript rs) { 93345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mRS = rs; 93445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mCount = 0; 93545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mElements = new Element[8]; 93645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mElementNames = new String[8]; 93745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mArraySizes = new int[8]; 93845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 93945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 94045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 94145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Add an array of elements to this element. 94245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 94345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param element 94445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param name 94545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param arraySize 94645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 94745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public Builder add(Element element, String name, int arraySize) { 94845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (arraySize < 1) { 94945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams throw new RSIllegalArgumentException("Array size cannot be less than 1."); 95045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 95145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 95245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams // Skip padding fields after a vector 3 type. 95345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (mSkipPadding != 0) { 95445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (name.startsWith("#padding_")) { 95545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mSkipPadding = 0; 95645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return this; 95745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 95845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 95945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 96045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if (element.mVectorSize == 3) { 96145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mSkipPadding = 1; 96245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } else { 96345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mSkipPadding = 0; 96445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 96545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 96645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams if(mCount == mElements.length) { 96745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element[] e = new Element[mCount + 8]; 96845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams String[] s = new String[mCount + 8]; 96945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int[] as = new int[mCount + 8]; 97045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams System.arraycopy(mElements, 0, e, 0, mCount); 97145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams System.arraycopy(mElementNames, 0, s, 0, mCount); 97245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams System.arraycopy(mArraySizes, 0, as, 0, mCount); 97345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mElements = e; 97445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mElementNames = s; 97545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mArraySizes = as; 97645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 97745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mElements[mCount] = element; 97845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mElementNames[mCount] = name; 97945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mArraySizes[mCount] = arraySize; 98045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mCount++; 981a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 98245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return this; 98345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 98445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 98545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 98645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Add a single element to this Element. 98745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 98845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param element 98945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @param name 99045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 99145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public Builder add(Element element, String name) { 99245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return add(element, name, 1); 99345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 99445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 99545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams /** 99645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * Create the element from this builder. 99745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 99845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * 99945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams * @return Element 100045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams */ 100145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams public Element create() { 100245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams mRS.validate(); 100345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams Element[] ein = new Element[mCount]; 100445d443665f5ce7efa934706a89883f0cc87f3513Jason Sams String[] sin = new String[mCount]; 100545d443665f5ce7efa934706a89883f0cc87f3513Jason Sams int[] asin = new int[mCount]; 100645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams java.lang.System.arraycopy(mElements, 0, ein, 0, mCount); 100745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams java.lang.System.arraycopy(mElementNames, 0, sin, 0, mCount); 100845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams java.lang.System.arraycopy(mArraySizes, 0, asin, 0, mCount); 100945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 1010bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang long[] ids = new long[ein.length]; 101145d443665f5ce7efa934706a89883f0cc87f3513Jason Sams for (int ct = 0; ct < ein.length; ct++ ) { 101245d443665f5ce7efa934706a89883f0cc87f3513Jason Sams ids[ct] = ein[ct].getID(mRS); 101345d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 1014a5e8cafe9173abee2b47e7c927210a22934a30e5Jason Sams 1015bec39b6de685a7dddb1925c7e9f83fae20388de3Miao Wang long id = mRS.nElementCreate2(ids, sin, asin); 101645d443665f5ce7efa934706a89883f0cc87f3513Jason Sams return new Element(id, mRS, ein, sin, asin); 101745d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 101845d443665f5ce7efa934706a89883f0cc87f3513Jason Sams } 101945d443665f5ce7efa934706a89883f0cc87f3513Jason Sams} 102045d443665f5ce7efa934706a89883f0cc87f3513Jason Sams 1021