198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/* 2ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray * Copyright (C) 2013 The Android Open Source Project 398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * you may not use this file except in compliance with the License. 698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * You may obtain a copy of the License at 798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 1098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Unless required by applicable law or agreed to in writing, software 1198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * See the License for the specific language governing permissions and 1498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * limitations under the License. 1598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 1698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 1798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspackage android.support.v8.renderscript; 1898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 1998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport java.lang.reflect.Field; 20ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 2198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.util.Log; 2298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 2398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/** 247d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * <p>An Element represents one item within an {@link 2560c5b31f4448410221de043873b94797732afa66Stephen Hines * android.support.v8.renderscript.Allocation}. An Element is roughly 2660c5b31f4448410221de043873b94797732afa66Stephen Hines * equivalent to a C type in a RenderScript kernel. Elements may be basic or 2760c5b31f4448410221de043873b94797732afa66Stephen Hines * complex. Some basic elements are</p> <ul> <li>A single float value 2860c5b31f4448410221de043873b94797732afa66Stephen Hines * (equivalent to a float in a kernel)</li> <li>A four-element float vector 2960c5b31f4448410221de043873b94797732afa66Stephen Hines * (equivalent to a float4 in a kernel)</li> <li>An unsigned 32-bit integer 3060c5b31f4448410221de043873b94797732afa66Stephen Hines * (equivalent to an unsigned int in a kernel)</li> <li>A single signed 8-bit 3160c5b31f4448410221de043873b94797732afa66Stephen Hines * integer (equivalent to a char in a kernel)</li> </ul> <p>A complex element is 3260c5b31f4448410221de043873b94797732afa66Stephen Hines * roughly equivalent to a C struct and contains a number of basic or complex 3360c5b31f4448410221de043873b94797732afa66Stephen Hines * Elements. From Java code, a complex element contains a list of sub-elements 3460c5b31f4448410221de043873b94797732afa66Stephen Hines * and names that represents a particular data structure. Structs used in RS 3560c5b31f4448410221de043873b94797732afa66Stephen Hines * scripts are available to Java code by using the 3660c5b31f4448410221de043873b94797732afa66Stephen Hines * {@code ScriptField_structname} class that is reflected from a particular 3760c5b31f4448410221de043873b94797732afa66Stephen Hines * script.</p> 3898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 397d435ae5ba100be5710b685653cc351cab159c11Stephen Hines * <p>Basic Elements are comprised of a {@link 4060c5b31f4448410221de043873b94797732afa66Stephen Hines * android.support.v8.renderscript.Element.DataType} and a {@link 4160c5b31f4448410221de043873b94797732afa66Stephen Hines * android.support.v8.renderscript.Element.DataKind}. The DataType encodes C 4260c5b31f4448410221de043873b94797732afa66Stephen Hines * type information of an Element, while the DataKind encodes how that Element 4360c5b31f4448410221de043873b94797732afa66Stephen Hines * should be interpreted by a {@link android.support.v8.renderscript.Sampler}. 4460c5b31f4448410221de043873b94797732afa66Stephen Hines * Note that {@link android.support.v8.renderscript.Allocation} objects with 4560c5b31f4448410221de043873b94797732afa66Stephen Hines * DataKind {@link android.support.v8.renderscript.Element.DataKind#USER} cannot 4660c5b31f4448410221de043873b94797732afa66Stephen Hines * be used as input for a {@link android.support.v8.renderscript.Sampler}. In 4760c5b31f4448410221de043873b94797732afa66Stephen Hines * general, {@link android.support.v8.renderscript.Allocation} objects that are 4860c5b31f4448410221de043873b94797732afa66Stephen Hines * intended for use with a {@link android.support.v8.renderscript.Sampler} 4960c5b31f4448410221de043873b94797732afa66Stephen Hines * should use bitmap-derived Elements such as 5060c5b31f4448410221de043873b94797732afa66Stephen Hines * {@link android.support.v8.renderscript.Element#RGBA_8888} or {@link 5160c5b31f4448410221de043873b94797732afa66Stephen Hines * android.support.v8.renderscript#Element.A_8}.</p> 5298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 5398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <div class="special reference"> 5498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <h3>Developer Guides</h3> 5560c5b31f4448410221de043873b94797732afa66Stephen Hines * <p>For more information about creating an application that uses RenderScript, 5660c5b31f4448410221de043873b94797732afa66Stephen Hines * read the 5760c5b31f4448410221de043873b94797732afa66Stephen Hines * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> 5860c5b31f4448410221de043873b94797732afa66Stephen Hines * developer guide.</p> 5998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * </div> 6098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams **/ 6198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspublic class Element extends BaseObj { 6298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mSize; 6398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element[] mElements; 6498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams String[] mElementNames; 6598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int[] mArraySizes; 6698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int[] mOffsetInBytes; 6798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int[] mVisibleElementMap; 6898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 6998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams DataType mType; 7098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams DataKind mKind; 7198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean mNormalized; 7298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mVectorSize; 7398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 7498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams private void updateVisibleSubElements() { 7598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mElements == null) { 7698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return; 7798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 7898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 7998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int noPaddingFieldCount = 0; 8098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int fieldCount = mElementNames.length; 8198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // Find out how many elements are not padding 8298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams for (int ct = 0; ct < fieldCount; ct ++) { 8398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mElementNames[ct].charAt(0) != '#') { 8498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams noPaddingFieldCount ++; 8598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 8698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 8798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mVisibleElementMap = new int[noPaddingFieldCount]; 8898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 8998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // Make a map that points us at non-padding elements 9098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams for (int ct = 0, ctNoPadding = 0; ct < fieldCount; ct ++) { 9198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mElementNames[ct].charAt(0) != '#') { 9298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mVisibleElementMap[ctNoPadding ++] = ct; 9398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 9498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 9598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 9698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 9798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 9898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return element size in bytes 9998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 100ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray public int getBytesSize() { 101ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray return mSize; 102ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 10398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 10498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 10598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Returns the number of vector components. 2 for float2, 4 for 10698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * float4, etc. 10798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return element vector size 10898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 109ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray public int getVectorSize() { 110ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray return mVectorSize; 111ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 11298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 11398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 11498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 11598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * DataType represents the basic type information for a basic element. The 11698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * naming convention follows. For numeric types it is FLOAT, 11798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * SIGNED, or UNSIGNED followed by the _BITS where BITS is the 11898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * size of the data. BOOLEAN is a true / false (1,0) 11998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * represented in an 8 bit container. The UNSIGNED variants 12098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * with multiple bit definitions are for packed graphical data 12198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * formats and represent vectors with per vector member sizes 12298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * which are treated as a single unit for packing and alignment 12398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * purposes. 12498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 12598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * MATRIX the three matrix types contain FLOAT_32 elements and are treated 12698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * as 32 bits for alignment purposes. 12798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 12898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * RS_* objects. 32 bit opaque handles. 12998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 13098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public enum DataType { 13198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams NONE (0, 0), 13298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams //FLOAT_16 (1, 2), 13398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams FLOAT_32 (2, 4), 13498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams FLOAT_64 (3, 8), 13598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams SIGNED_8 (4, 1), 13698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams SIGNED_16 (5, 2), 13798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams SIGNED_32 (6, 4), 13898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams SIGNED_64 (7, 8), 13998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams UNSIGNED_8 (8, 1), 14098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams UNSIGNED_16 (9, 2), 14198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams UNSIGNED_32 (10, 4), 14298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams UNSIGNED_64 (11, 8), 14398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 14498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams BOOLEAN(12, 1), 14598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 14698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams UNSIGNED_5_6_5 (13, 2), 14798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams UNSIGNED_5_5_5_1 (14, 2), 14898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams UNSIGNED_4_4_4_4 (15, 2), 14998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 15098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams MATRIX_4X4 (16, 64), 15198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams MATRIX_3X3 (17, 36), 15298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams MATRIX_2X2 (18, 16), 15398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 15498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RS_ELEMENT (1000, 4), 15598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RS_TYPE (1001, 4), 15698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RS_ALLOCATION (1002, 4), 15798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RS_SAMPLER (1003, 4), 15898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RS_SCRIPT (1004, 4); 15998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 16098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mID; 16198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mSize; 16298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams DataType(int id, int size) { 16398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mID = id; 16498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mSize = size; 16598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 16698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 16798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 16898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 16998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * The special interpretation of the data if required. This is primarly 17098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * useful for graphical data. USER indicates no special interpretation is 17198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * expected. PIXEL is used in conjunction with the standard data types for 17298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * representing texture formats. 17398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 17498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public enum DataKind { 17598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams USER (0), 17698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 17798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams PIXEL_L (7), 17898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams PIXEL_A (8), 17998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams PIXEL_LA (9), 18098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams PIXEL_RGB (10), 181f681be1f0ec328acaa311478887352a456d52be8Jason Sams PIXEL_RGBA (11), 182f681be1f0ec328acaa311478887352a456d52be8Jason Sams PIXEL_DEPTH (12), 183f681be1f0ec328acaa311478887352a456d52be8Jason Sams PIXEL_YUV(13); 18498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 18598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mID; 18698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams DataKind(int id) { 18798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mID = id; 18898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 18998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 19098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 19198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 19298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return if a element is too complex for use as a data source for a Mesh or 19398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * a Program. 19498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 19598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return boolean 19698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 19798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public boolean isComplex() { 19898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mElements == null) { 19998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return false; 20098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 20198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams for (int ct=0; ct < mElements.length; ct++) { 20298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mElements[ct].mElements != null) { 20398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return true; 20498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 20598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 20698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return false; 20798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 20898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 20998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 21098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Elements could be simple, such as an int or a float, or a 21198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * structure with multiple sub elements, such as a collection of 21298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * floats, float2, float4. This function returns zero for simple 21398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * elements or the number of sub-elements otherwise. 21498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return number of sub-elements in this element 21598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 21698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public int getSubElementCount() { 21798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mVisibleElementMap == null) { 21898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return 0; 21998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 22098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mVisibleElementMap.length; 22198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 22298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 22398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 22498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * For complex elements, this function will return the 22598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * sub-element at index 22698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param index index of the sub-element to return 22798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return sub-element in this element at given index 22898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 22998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Element getSubElement(int index) { 23098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mVisibleElementMap == null) { 23198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Element contains no sub-elements"); 23298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 23398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (index < 0 || index >= mVisibleElementMap.length) { 23498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Illegal sub-element index"); 23598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 23698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mElements[mVisibleElementMap[index]]; 23798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 23898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 23998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 24098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * For complex elements, this function will return the 24198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * sub-element name at index 24298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param index index of the sub-element 24398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return sub-element in this element at given index 24498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 24598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public String getSubElementName(int index) { 24698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mVisibleElementMap == null) { 24798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Element contains no sub-elements"); 24898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 24998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (index < 0 || index >= mVisibleElementMap.length) { 25098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Illegal sub-element index"); 25198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 25298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mElementNames[mVisibleElementMap[index]]; 25398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 25498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 25598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 25698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * For complex elements, some sub-elements could be statically 25798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * sized arrays. This function will return the array size for 25898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * sub-element at index 25998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param index index of the sub-element 26098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return array size of sub-element in this element at given index 26198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 26298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public int getSubElementArraySize(int index) { 26398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mVisibleElementMap == null) { 26498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Element contains no sub-elements"); 26598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 26698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (index < 0 || index >= mVisibleElementMap.length) { 26798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Illegal sub-element index"); 26898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 26998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mArraySizes[mVisibleElementMap[index]]; 27098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 27198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 27298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 27398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * This function specifies the location of a sub-element within 27498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * the element 27598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param index index of the sub-element 27698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return offset in bytes of sub-element in this element at given index 27798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 27898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public int getSubElementOffsetBytes(int index) { 27998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mVisibleElementMap == null) { 28098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Element contains no sub-elements"); 28198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 28298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (index < 0 || index >= mVisibleElementMap.length) { 28398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Illegal sub-element index"); 28498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 28598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mOffsetInBytes[mVisibleElementMap[index]]; 28698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 28798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 28898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 28998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return element data type 29098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 29198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public DataType getDataType() { 29298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mType; 29398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 29498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 29598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 29698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return element data kind 29798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 29898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public DataKind getDataKind() { 29998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mKind; 30098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 30198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 30298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 30398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Utility function for returning an Element containing a single Boolean. 30498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 30598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param rs Context to which the element will belong. 30698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 30798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return Element 30898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 30998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element BOOLEAN(RenderScript rs) { 31098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_BOOLEAN == null) { 31198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_BOOLEAN = createUser(rs, DataType.BOOLEAN); 31298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 31398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_BOOLEAN; 31498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 31598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 31698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 31798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Utility function for returning an Element containing a single UNSIGNED_8. 31898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 31998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param rs Context to which the element will belong. 32098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 32198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return Element 32298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 32398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U8(RenderScript rs) { 32498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_U8 == null) { 32598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_U8 = createUser(rs, DataType.UNSIGNED_8); 32698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 32798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_U8; 32898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 32998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 33098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 33198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Utility function for returning an Element containing a single SIGNED_8. 33298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 33398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param rs Context to which the element will belong. 33498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 33598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return Element 33698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 33798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I8(RenderScript rs) { 33898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_I8 == null) { 33998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_I8 = createUser(rs, DataType.SIGNED_8); 34098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 34198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_I8; 34298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 34398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 34498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U16(RenderScript rs) { 34598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_U16 == null) { 34698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_U16 = createUser(rs, DataType.UNSIGNED_16); 34798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 34898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_U16; 34998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 35098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 35198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I16(RenderScript rs) { 35298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_I16 == null) { 35398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_I16 = createUser(rs, DataType.SIGNED_16); 35498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 35598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_I16; 35698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 35798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 35898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U32(RenderScript rs) { 35998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_U32 == null) { 36098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_U32 = createUser(rs, DataType.UNSIGNED_32); 36198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 36298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_U32; 36398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 36498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 36598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I32(RenderScript rs) { 36698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_I32 == null) { 36798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_I32 = createUser(rs, DataType.SIGNED_32); 36898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 36998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_I32; 37098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 37198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 37298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U64(RenderScript rs) { 37398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_U64 == null) { 37498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_U64 = createUser(rs, DataType.UNSIGNED_64); 37598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 37698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_U64; 37798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 37898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 37998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I64(RenderScript rs) { 38098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_I64 == null) { 38198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_I64 = createUser(rs, DataType.SIGNED_64); 38298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 38398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_I64; 38498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 38598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 38698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element F32(RenderScript rs) { 38798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_F32 == null) { 38898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_F32 = createUser(rs, DataType.FLOAT_32); 38998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 39098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_F32; 39198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 39298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 39398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element F64(RenderScript rs) { 39498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_F64 == null) { 39598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_F64 = createUser(rs, DataType.FLOAT_64); 39698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 39798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_F64; 39898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 39998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 40098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element ELEMENT(RenderScript rs) { 40198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_ELEMENT == null) { 40298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_ELEMENT = createUser(rs, DataType.RS_ELEMENT); 40398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 40498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_ELEMENT; 40598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 40698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 40798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element TYPE(RenderScript rs) { 40898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_TYPE == null) { 40998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_TYPE = createUser(rs, DataType.RS_TYPE); 41098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 41198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_TYPE; 41298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 41398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 41498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element ALLOCATION(RenderScript rs) { 41598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_ALLOCATION == null) { 41698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_ALLOCATION = createUser(rs, DataType.RS_ALLOCATION); 41798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 41898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_ALLOCATION; 41998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 42098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 42198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element SAMPLER(RenderScript rs) { 42298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_SAMPLER == null) { 42398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_SAMPLER = createUser(rs, DataType.RS_SAMPLER); 42498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 42598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_SAMPLER; 42698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 42798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 42898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element SCRIPT(RenderScript rs) { 42998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_SCRIPT == null) { 43098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_SCRIPT = createUser(rs, DataType.RS_SCRIPT); 43198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 43298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_SCRIPT; 43398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 43498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 43598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 43698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element A_8(RenderScript rs) { 43798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_A_8 == null) { 43898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_A_8 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_A); 43998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 44098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_A_8; 44198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 44298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 44398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element RGB_565(RenderScript rs) { 44498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_RGB_565 == null) { 44598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_RGB_565 = createPixel(rs, DataType.UNSIGNED_5_6_5, DataKind.PIXEL_RGB); 44698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 44798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_RGB_565; 44898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 44998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 45098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element RGB_888(RenderScript rs) { 45198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_RGB_888 == null) { 45298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_RGB_888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGB); 45398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 45498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_RGB_888; 45598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 45698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 45798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element RGBA_5551(RenderScript rs) { 45898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_RGBA_5551 == null) { 45998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_RGBA_5551 = createPixel(rs, DataType.UNSIGNED_5_5_5_1, DataKind.PIXEL_RGBA); 46098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 46198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_RGBA_5551; 46298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 46398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 46498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element RGBA_4444(RenderScript rs) { 46598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_RGBA_4444 == null) { 46698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_RGBA_4444 = createPixel(rs, DataType.UNSIGNED_4_4_4_4, DataKind.PIXEL_RGBA); 46798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 46898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_RGBA_4444; 46998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 47098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 47198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element RGBA_8888(RenderScript rs) { 47298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_RGBA_8888 == null) { 47398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_RGBA_8888 = createPixel(rs, DataType.UNSIGNED_8, DataKind.PIXEL_RGBA); 47498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 47598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_RGBA_8888; 47698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 47798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 47898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element F32_2(RenderScript rs) { 47998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_FLOAT_2 == null) { 48098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_FLOAT_2 = createVector(rs, DataType.FLOAT_32, 2); 48198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 48298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_FLOAT_2; 48398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 48498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 48598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element F32_3(RenderScript rs) { 48698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_FLOAT_3 == null) { 48798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_FLOAT_3 = createVector(rs, DataType.FLOAT_32, 3); 48898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 48998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_FLOAT_3; 49098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 49198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 49298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element F32_4(RenderScript rs) { 49398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_FLOAT_4 == null) { 49498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_FLOAT_4 = createVector(rs, DataType.FLOAT_32, 4); 49598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 49698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_FLOAT_4; 49798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 49898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 49998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element F64_2(RenderScript rs) { 50098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_DOUBLE_2 == null) { 50198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_DOUBLE_2 = createVector(rs, DataType.FLOAT_64, 2); 50298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 50398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_DOUBLE_2; 50498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 50598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 50698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element F64_3(RenderScript rs) { 50798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_DOUBLE_3 == null) { 50898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_DOUBLE_3 = createVector(rs, DataType.FLOAT_64, 3); 50998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 51098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_DOUBLE_3; 51198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 51298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 51398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element F64_4(RenderScript rs) { 51498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_DOUBLE_4 == null) { 51598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_DOUBLE_4 = createVector(rs, DataType.FLOAT_64, 4); 51698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 51798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_DOUBLE_4; 51898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 51998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 52098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U8_2(RenderScript rs) { 52198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_UCHAR_2 == null) { 52298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_UCHAR_2 = createVector(rs, DataType.UNSIGNED_8, 2); 52398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 52498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_UCHAR_2; 52598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 52698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 52798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U8_3(RenderScript rs) { 52898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_UCHAR_3 == null) { 52998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_UCHAR_3 = createVector(rs, DataType.UNSIGNED_8, 3); 53098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 53198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_UCHAR_3; 53298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 53398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 53498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U8_4(RenderScript rs) { 53598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_UCHAR_4 == null) { 53698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_UCHAR_4 = createVector(rs, DataType.UNSIGNED_8, 4); 53798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 53898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_UCHAR_4; 53998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 54098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 54198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I8_2(RenderScript rs) { 54298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_CHAR_2 == null) { 54398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_CHAR_2 = createVector(rs, DataType.SIGNED_8, 2); 54498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 54598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_CHAR_2; 54698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 54798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 54898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I8_3(RenderScript rs) { 54998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_CHAR_3 == null) { 55098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_CHAR_3 = createVector(rs, DataType.SIGNED_8, 3); 55198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 55298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_CHAR_3; 55398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 55498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 55598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I8_4(RenderScript rs) { 55698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_CHAR_4 == null) { 55798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_CHAR_4 = createVector(rs, DataType.SIGNED_8, 4); 55898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 55998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_CHAR_4; 56098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 56198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 56298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U16_2(RenderScript rs) { 56398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_USHORT_2 == null) { 56498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_USHORT_2 = createVector(rs, DataType.UNSIGNED_16, 2); 56598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 56698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_USHORT_2; 56798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 56898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 56998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U16_3(RenderScript rs) { 57098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_USHORT_3 == null) { 57198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_USHORT_3 = createVector(rs, DataType.UNSIGNED_16, 3); 57298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 57398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_USHORT_3; 57498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 57598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 57698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U16_4(RenderScript rs) { 57798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_USHORT_4 == null) { 57898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_USHORT_4 = createVector(rs, DataType.UNSIGNED_16, 4); 57998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 58098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_USHORT_4; 58198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 58298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 58398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I16_2(RenderScript rs) { 58498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_SHORT_2 == null) { 58598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_SHORT_2 = createVector(rs, DataType.SIGNED_16, 2); 58698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 58798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_SHORT_2; 58898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 58998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 59098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I16_3(RenderScript rs) { 59198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_SHORT_3 == null) { 59298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_SHORT_3 = createVector(rs, DataType.SIGNED_16, 3); 59398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 59498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_SHORT_3; 59598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 59698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 59798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I16_4(RenderScript rs) { 59898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_SHORT_4 == null) { 59998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_SHORT_4 = createVector(rs, DataType.SIGNED_16, 4); 60098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 60198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_SHORT_4; 60298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 60398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 60498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U32_2(RenderScript rs) { 60598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_UINT_2 == null) { 60698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_UINT_2 = createVector(rs, DataType.UNSIGNED_32, 2); 60798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 60898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_UINT_2; 60998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 61098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 61198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U32_3(RenderScript rs) { 61298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_UINT_3 == null) { 61398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_UINT_3 = createVector(rs, DataType.UNSIGNED_32, 3); 61498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 61598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_UINT_3; 61698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 61798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 61898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U32_4(RenderScript rs) { 61998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_UINT_4 == null) { 62098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_UINT_4 = createVector(rs, DataType.UNSIGNED_32, 4); 62198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 62298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_UINT_4; 62398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 62498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 62598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I32_2(RenderScript rs) { 62698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_INT_2 == null) { 62798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_INT_2 = createVector(rs, DataType.SIGNED_32, 2); 62898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 62998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_INT_2; 63098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 63198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 63298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I32_3(RenderScript rs) { 63398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_INT_3 == null) { 63498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_INT_3 = createVector(rs, DataType.SIGNED_32, 3); 63598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 63698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_INT_3; 63798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 63898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 63998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I32_4(RenderScript rs) { 64098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_INT_4 == null) { 64198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_INT_4 = createVector(rs, DataType.SIGNED_32, 4); 64298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 64398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_INT_4; 64498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 64598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 64698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U64_2(RenderScript rs) { 64798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_ULONG_2 == null) { 64898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_ULONG_2 = createVector(rs, DataType.UNSIGNED_64, 2); 64998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 65098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_ULONG_2; 65198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 65298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 65398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U64_3(RenderScript rs) { 65498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_ULONG_3 == null) { 65598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_ULONG_3 = createVector(rs, DataType.UNSIGNED_64, 3); 65698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 65798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_ULONG_3; 65898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 65998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 66098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element U64_4(RenderScript rs) { 66198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_ULONG_4 == null) { 66298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_ULONG_4 = createVector(rs, DataType.UNSIGNED_64, 4); 66398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 66498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_ULONG_4; 66598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 66698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 66798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I64_2(RenderScript rs) { 66898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_LONG_2 == null) { 66998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_LONG_2 = createVector(rs, DataType.SIGNED_64, 2); 67098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 67198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_LONG_2; 67298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 67398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 67498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I64_3(RenderScript rs) { 67598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_LONG_3 == null) { 67698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_LONG_3 = createVector(rs, DataType.SIGNED_64, 3); 67798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 67898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_LONG_3; 67998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 68098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 68198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element I64_4(RenderScript rs) { 68298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_LONG_4 == null) { 68398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_LONG_4 = createVector(rs, DataType.SIGNED_64, 4); 68498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 68598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_LONG_4; 68698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 68798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 68898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element MATRIX_4X4(RenderScript rs) { 68998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_MATRIX_4X4 == null) { 69098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_MATRIX_4X4 = createUser(rs, DataType.MATRIX_4X4); 69198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 69298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_MATRIX_4X4; 69398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 69498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 69598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element MATRIX_3X3(RenderScript rs) { 69698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_MATRIX_3X3 == null) { 69798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_MATRIX_3X3 = createUser(rs, DataType.MATRIX_3X3); 69898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 69998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_MATRIX_3X3; 70098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 70198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 70298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element MATRIX_2X2(RenderScript rs) { 70398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(rs.mElement_MATRIX_2X2 == null) { 70498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams rs.mElement_MATRIX_2X2 = createUser(rs, DataType.MATRIX_2X2); 70598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 70698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return rs.mElement_MATRIX_2X2; 70798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 70898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 70998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element(int id, RenderScript rs, Element[] e, String[] n, int[] as) { 71098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams super(id, rs); 71198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mSize = 0; 71298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mVectorSize = 1; 71398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mElements = e; 71498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mElementNames = n; 71598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mArraySizes = as; 71698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mType = DataType.NONE; 71798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mKind = DataKind.USER; 71898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mOffsetInBytes = new int[mElements.length]; 71998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams for (int ct = 0; ct < mElements.length; ct++ ) { 72098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mOffsetInBytes[ct] = mSize; 72198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mSize += mElements[ct].mSize * mArraySizes[ct]; 72298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 72398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams updateVisibleSubElements(); 72498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 72598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 72698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element(int id, RenderScript rs, DataType dt, DataKind dk, boolean norm, int size) { 72798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams super(id, rs); 72898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if ((dt != DataType.UNSIGNED_5_6_5) && 72998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams (dt != DataType.UNSIGNED_4_4_4_4) && 73098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams (dt != DataType.UNSIGNED_5_5_5_1)) { 73198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (size == 3) { 73298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mSize = dt.mSize * 4; 73398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } else { 73498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mSize = dt.mSize * size; 73598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 73698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } else { 73798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mSize = dt.mSize; 73898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 73998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mType = dt; 74098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mKind = dk; 74198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mNormalized = norm; 74298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mVectorSize = size; 74398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 74498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 74598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element(int id, RenderScript rs) { 74698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams super(id, rs); 74798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 74898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 74998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 75098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Create a custom Element of the specified DataType. The DataKind will be 75198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * set to USER and the vector size to 1 indicating non-vector. 75298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 75398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param rs The context associated with the new Element. 75498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param dt The DataType for the new element. 75598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return Element 75698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 75798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams static Element createUser(RenderScript rs, DataType dt) { 758ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray if (rs.isNative) { 759ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray RenderScriptThunker rst = (RenderScriptThunker)rs; 760ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray return ElementThunker.create(rst, dt); 761ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 76298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams DataKind dk = DataKind.USER; 76398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean norm = false; 76498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int vecSize = 1; 76598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int id = rs.nElementCreate(dt.mID, dk.mID, norm, vecSize); 76698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return new Element(id, rs, dt, dk, norm, vecSize); 76798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 76898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 76998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 77098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Create a custom vector element of the specified DataType and vector size. 77198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * DataKind will be set to USER. Only primitive types (FLOAT_32, FLOAT_64, 77298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * SIGNED_8, SIGNED_16, SIGNED_32, SIGNED_64, UNSIGNED_8, UNSIGNED_16, 77398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * UNSIGNED_32, UNSIGNED_64, BOOLEAN) are supported. 77498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 77598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param rs The context associated with the new Element. 77698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param dt The DataType for the new Element. 77798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param size Vector size for the new Element. Range 2-4 inclusive 77898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * supported. 77998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 78098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return Element 78198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 78298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element createVector(RenderScript rs, DataType dt, int size) { 783ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray if (rs.isNative) { 784ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray RenderScriptThunker rst = (RenderScriptThunker)rs; 785ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray return ElementThunker.createVector(rst, dt, size); 786ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 78798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (size < 2 || size > 4) { 78898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Vector size out of range 2-4."); 78998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 79098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 79198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams switch (dt) { 79298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // Support only primitive integer/float/boolean types as vectors. 79398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case FLOAT_32: 79498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case FLOAT_64: 79598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case SIGNED_8: 79698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case SIGNED_16: 79798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case SIGNED_32: 79898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case SIGNED_64: 79998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case UNSIGNED_8: 80098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case UNSIGNED_16: 80198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case UNSIGNED_32: 80298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case UNSIGNED_64: 80398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case BOOLEAN: { 80498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams DataKind dk = DataKind.USER; 80598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean norm = false; 80698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int id = rs.nElementCreate(dt.mID, dk.mID, norm, size); 80798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return new Element(id, rs, dt, dk, norm, size); 80898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 80998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 81098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams default: { 81198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Cannot create vector of " + 81298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams "non-primitive type."); 81398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 81498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 81598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 81698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 81798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 81898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Create a new pixel Element type. A matching DataType and DataKind must 81998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * be provided. The DataType and DataKind must contain the same number of 82098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * components. Vector size will be set to 1. 82198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 82298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param rs The context associated with the new Element. 82398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param dt The DataType for the new element. 82498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param dk The DataKind to specify the mapping of each component in the 82598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * DataType. 82698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 82798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return Element 82898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 82998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static Element createPixel(RenderScript rs, DataType dt, DataKind dk) { 830ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray if (rs.isNative) { 831ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray RenderScriptThunker rst = (RenderScriptThunker)rs; 832ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray return ElementThunker.createPixel(rst, dt, dk); 833ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 834ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 83598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (!(dk == DataKind.PIXEL_L || 83698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams dk == DataKind.PIXEL_A || 83798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams dk == DataKind.PIXEL_LA || 83898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams dk == DataKind.PIXEL_RGB || 839f681be1f0ec328acaa311478887352a456d52be8Jason Sams dk == DataKind.PIXEL_RGBA || 840f681be1f0ec328acaa311478887352a456d52be8Jason Sams dk == DataKind.PIXEL_DEPTH || 841f681be1f0ec328acaa311478887352a456d52be8Jason Sams dk == DataKind.PIXEL_YUV)) { 84298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Unsupported DataKind"); 84398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 84498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (!(dt == DataType.UNSIGNED_8 || 84598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams dt == DataType.UNSIGNED_16 || 84698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams dt == DataType.UNSIGNED_5_6_5 || 84798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams dt == DataType.UNSIGNED_4_4_4_4 || 84898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams dt == DataType.UNSIGNED_5_5_5_1)) { 84998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Unsupported DataType"); 85098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 85198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (dt == DataType.UNSIGNED_5_6_5 && dk != DataKind.PIXEL_RGB) { 85298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 85398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 85498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (dt == DataType.UNSIGNED_5_5_5_1 && dk != DataKind.PIXEL_RGBA) { 85598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 85698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 85798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (dt == DataType.UNSIGNED_4_4_4_4 && dk != DataKind.PIXEL_RGBA) { 85898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 85998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 860f681be1f0ec328acaa311478887352a456d52be8Jason Sams if (dt == DataType.UNSIGNED_16 && 861f681be1f0ec328acaa311478887352a456d52be8Jason Sams dk != DataKind.PIXEL_DEPTH) { 862f681be1f0ec328acaa311478887352a456d52be8Jason Sams throw new RSIllegalArgumentException("Bad kind and type combo"); 863f681be1f0ec328acaa311478887352a456d52be8Jason Sams } 86498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 86598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int size = 1; 86698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams switch (dk) { 86798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case PIXEL_LA: 86898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams size = 2; 86998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams break; 87098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case PIXEL_RGB: 87198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams size = 3; 87298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams break; 87398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams case PIXEL_RGBA: 87498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams size = 4; 87598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams break; 87698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 87798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 87898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean norm = true; 87998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int id = rs.nElementCreate(dt.mID, dk.mID, norm, size); 88098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return new Element(id, rs, dt, dk, norm, size); 88198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 88298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 88398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 88498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Check if the current Element is compatible with another Element. 88598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Primitive Elements are compatible if they share the same underlying 88698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * size and type (i.e. U8 is compatible with A_8). User-defined Elements 88798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * must be equal in order to be compatible. This requires strict name 88898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * equivalence for all sub-Elements (in addition to structural equivalence). 88998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 89098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param e The Element to check compatibility with. 89198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 89298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return boolean true if the Elements are compatible, otherwise false. 89398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 89498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public boolean isCompatible(Element e) { 89598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // Try strict BaseObj equality to start with. 89698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (this.equals(e)) { 89798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return true; 89898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 89998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 90098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // Ignore mKind because it is allowed to be different (user vs. pixel). 90198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // We also ignore mNormalized because it can be different. The mType 90298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // field must not be NONE since we require name equivalence for 90398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // all user-created Elements. 90498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return ((mSize == e.mSize) && 90598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams (mType != DataType.NONE) && 90698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams (mType == e.mType) && 90798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams (mVectorSize == e.mVectorSize)); 90898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 90998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 91098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 91198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Builder class for producing complex elements with matching field and name 91298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * pairs. The builder starts empty. The order in which elements are added 91398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * is retained for the layout in memory. 91498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 91598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 91698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static class Builder { 917ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray ElementThunker.BuilderThunker mT; 918ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 91998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RenderScript mRS; 92098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element[] mElements; 92198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams String[] mElementNames; 92298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int[] mArraySizes; 92398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mCount; 92498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mSkipPadding; 92598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 92698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 92798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Create a builder object. 92898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 92998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param rs 93098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 93198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder(RenderScript rs) { 932ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray if (rs.isNative) { 933ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray RenderScriptThunker rst = (RenderScriptThunker)rs; 934ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mT = new ElementThunker.BuilderThunker(rs); 935ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 93698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS = rs; 93798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mCount = 0; 93898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mElements = new Element[8]; 93998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mElementNames = new String[8]; 94098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mArraySizes = new int[8]; 94198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 94298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 94398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 94498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Add an array of elements to this element. 94598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 94698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param element 94798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param name 94898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param arraySize 94998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 95098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder add(Element element, String name, int arraySize) { 951ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray if (mT != null) { 952ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray mT.add(element, name, arraySize); 953ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray return this; 954ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 955ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 95698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (arraySize < 1) { 95798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Array size cannot be less than 1."); 95898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 95998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 96098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams // Skip padding fields after a vector 3 type. 96198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mSkipPadding != 0) { 96298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (name.startsWith("#padding_")) { 96398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mSkipPadding = 0; 96498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return this; 96598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 96698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 96798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 96898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (element.mVectorSize == 3) { 96998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mSkipPadding = 1; 97098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } else { 97198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mSkipPadding = 0; 97298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 97398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 97498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(mCount == mElements.length) { 97598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element[] e = new Element[mCount + 8]; 97698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams String[] s = new String[mCount + 8]; 97798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int[] as = new int[mCount + 8]; 97898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams System.arraycopy(mElements, 0, e, 0, mCount); 97998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams System.arraycopy(mElementNames, 0, s, 0, mCount); 98098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams System.arraycopy(mArraySizes, 0, as, 0, mCount); 98198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mElements = e; 98298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mElementNames = s; 98398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mArraySizes = as; 98498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 98598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mElements[mCount] = element; 98698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mElementNames[mCount] = name; 98798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mArraySizes[mCount] = arraySize; 98898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mCount++; 989ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 99098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return this; 99198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 99298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 99398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 99498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Add a single element to this Element. 99598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 99698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param element 99798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param name 99898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 99998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder add(Element element, String name) { 100098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return add(element, name, 1); 100198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 100298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 100398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 100498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Create the element from this builder. 100598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 100698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 100798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return Element 100898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 100998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Element create() { 1010ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray if (mT != null) { 1011ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray return mT.create(mRS); 1012ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray } 1013ce8b0e674c93035013d1c33aaabc9bb6ceffde0fTim Murray 101498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS.validate(); 101598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element[] ein = new Element[mCount]; 101698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams String[] sin = new String[mCount]; 101798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int[] asin = new int[mCount]; 101898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams java.lang.System.arraycopy(mElements, 0, ein, 0, mCount); 101998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams java.lang.System.arraycopy(mElementNames, 0, sin, 0, mCount); 102098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams java.lang.System.arraycopy(mArraySizes, 0, asin, 0, mCount); 102198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 102298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int[] ids = new int[ein.length]; 102398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams for (int ct = 0; ct < ein.length; ct++ ) { 102498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams ids[ct] = ein[ct].getID(mRS); 102598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 1026ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 102798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int id = mRS.nElementCreate2(ids, sin, asin); 102898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return new Element(id, mRS, ein, sin, asin); 102998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 103098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 103198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams} 103298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 1033