1b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams/* 2dd6c8b34f172ba699954e4d3095dba8c0fd5e930Jason Sams * Copyright (C) 2013 The Android Open Source Project 3b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * 4b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * you may not use this file except in compliance with the License. 6b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * You may obtain a copy of the License at 7b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * 8b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * 10b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * Unless required by applicable law or agreed to in writing, software 11b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * See the License for the specific language governing permissions and 14b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * limitations under the License. 15b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams */ 16b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 17b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samspackage android.renderscript; 18b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 199c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 20c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>A Type describes the {@link android.renderscript.Element} and dimensions used for an {@link 21c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Allocation} or a parallel operation. Types are created through {@link 22c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Type.Builder}.</p> 23a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 24c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>A Type always includes an {@link android.renderscript.Element} and an X 25c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * dimension. A Type may be multidimensional, up to three dimensions. A nonzero 26c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * value in the Y or Z dimensions indicates that the dimension is present. Note 27c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * that a Type with only a given X dimension and a Type with the same X 28c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * dimension but Y = 1 are not equivalent.</p> 29a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 30c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>A Type also supports inclusion of level of detail (LOD) or cube map 31c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * faces. LOD and cube map faces are booleans to indicate present or not 32c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * present. </p> 33c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * 34ccadaf1eb48c70a3eb5722ecbd0144d165bcd963Eino-Ville Talvala * <p>A Type also supports YUV format information to support an 35ccadaf1eb48c70a3eb5722ecbd0144d165bcd963Eino-Ville Talvala * {@link android.renderscript.Allocation} in a YUV format. The YUV formats 36ccadaf1eb48c70a3eb5722ecbd0144d165bcd963Eino-Ville Talvala * supported are {@link android.graphics.ImageFormat#YV12}, 37ccadaf1eb48c70a3eb5722ecbd0144d165bcd963Eino-Ville Talvala * {@link android.graphics.ImageFormat#NV21}, and 38ccadaf1eb48c70a3eb5722ecbd0144d165bcd963Eino-Ville Talvala * {@link android.graphics.ImageFormat#YUV_420_888}</p> 39a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 403aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference"> 413aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3> 42c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <p>For more information about creating an application that uses RenderScript, read the 43c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * <a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer guide.</p> 443aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div> 45b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams **/ 46b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samspublic class Type extends BaseObj { 47768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mDimX; 48768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mDimY; 49768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mDimZ; 50bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean mDimMipmaps; 51768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams boolean mDimFaces; 528140d7b0f62a6e5b54e318c959f2d501f7ee6784Jason Sams int mDimYuv; 53768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mElementCount; 541bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams Element mElement; 5546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams int mArrays[]; 5646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 5746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams static final int mMaxArrays = 4; 58768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 5949a05d7b82956009f03acbb92a064eed054eb031Jason Sams public enum CubemapFace { 6020fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines POSITIVE_X (0), 6149a05d7b82956009f03acbb92a064eed054eb031Jason Sams NEGATIVE_X (1), 6220fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines POSITIVE_Y (2), 6349a05d7b82956009f03acbb92a064eed054eb031Jason Sams NEGATIVE_Y (3), 6420fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines POSITIVE_Z (4), 6520fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines NEGATIVE_Z (5), 6620fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines @Deprecated 6720fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines POSITVE_X (0), 6820fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines @Deprecated 6920fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines POSITVE_Y (2), 7020fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines @Deprecated 7120fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines POSITVE_Z (4); 7249a05d7b82956009f03acbb92a064eed054eb031Jason Sams 7349a05d7b82956009f03acbb92a064eed054eb031Jason Sams int mID; 7449a05d7b82956009f03acbb92a064eed054eb031Jason Sams CubemapFace(int id) { 7549a05d7b82956009f03acbb92a064eed054eb031Jason Sams mID = id; 7649a05d7b82956009f03acbb92a064eed054eb031Jason Sams } 7749a05d7b82956009f03acbb92a064eed054eb031Jason Sams } 7849a05d7b82956009f03acbb92a064eed054eb031Jason Sams 799c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 80a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the element associated with this Type. 81a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 82a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 83a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 84e17964e150e459bacced5658ae36fe1c56082e37Jason Sams public Element getElement() { 85e17964e150e459bacced5658ae36fe1c56082e37Jason Sams return mElement; 86e17964e150e459bacced5658ae36fe1c56082e37Jason Sams } 871bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams 889c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 89a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the value of the X dimension. 90a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 91a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 92a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 93768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public int getX() { 94768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimX; 95768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 96a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 979c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 98a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the value of the Y dimension or 0 for a 1D allocation. 99a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 100a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 101a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 102768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public int getY() { 103768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimY; 104768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 105a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 1069c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 107a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the value of the Z dimension or 0 for a 1D or 2D allocation. 108a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 109a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 110a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 111768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public int getZ() { 112768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimZ; 113768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 114a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 1159c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1165a722cf8b2dc7c6b4acc937a6d68bc88e1702d78Jason Sams * Get the YUV format 1175a722cf8b2dc7c6b4acc937a6d68bc88e1702d78Jason Sams * 11802d56d90e01e20db8424de94a14fe59dc94f19c0Jason Sams * 1195a722cf8b2dc7c6b4acc937a6d68bc88e1702d78Jason Sams * @return int 1205a722cf8b2dc7c6b4acc937a6d68bc88e1702d78Jason Sams */ 1215a722cf8b2dc7c6b4acc937a6d68bc88e1702d78Jason Sams public int getYuv() { 1225a722cf8b2dc7c6b4acc937a6d68bc88e1702d78Jason Sams return mDimYuv; 1235a722cf8b2dc7c6b4acc937a6d68bc88e1702d78Jason Sams } 1245a722cf8b2dc7c6b4acc937a6d68bc88e1702d78Jason Sams 1255a722cf8b2dc7c6b4acc937a6d68bc88e1702d78Jason Sams /** 126a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return if the Type has a mipmap chain. 127a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 128a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return boolean 129a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 130bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public boolean hasMipmaps() { 131bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return mDimMipmaps; 132768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 133a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 1349c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 135a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return if the Type is a cube map. 136a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 137a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return boolean 138a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 139bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public boolean hasFaces() { 140768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimFaces; 141768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 142a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 1439c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 144a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the total number of accessable cells in the Type. 145a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 146a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 147a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 148bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public int getCount() { 149768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mElementCount; 150768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 151768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 15246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams /** 153d016266de2cefe12853dbf4a81292b96bb4150b1Jason Sams * @hide 1546a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams * Return the dimension of the specified array. 1556a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams * 1566a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams * @param arrayNum The array dimension to query 1576a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams * @return int 1586a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams */ 1596a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams public int getArray(int arrayNum) { 1606a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams if ((arrayNum < 0) || (arrayNum >= mMaxArrays)) { 16146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams throw new RSIllegalArgumentException("Array dimension out of range."); 16246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 16346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 1646a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams if (mArrays == null || arrayNum >= mArrays.length) { 16546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams // Dimension in range but no array for that dimension allocated 16646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams return 0; 16746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 16846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 1696a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams return mArrays[arrayNum]; 17046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 17146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 17246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams /** 173d016266de2cefe12853dbf4a81292b96bb4150b1Jason Sams * @hide 1746a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams * Return the number of array dimensions. 1756a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams * 1766a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams * @return int 1776a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams */ 17846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams public int getArrayCount() { 17946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (mArrays != null) return mArrays.length; 18046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams return 0; 18146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 18246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 183768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams void calcElementCount() { 184bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean hasLod = hasMipmaps(); 185768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int x = getX(); 186768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int y = getY(); 187768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int z = getZ(); 188768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int faces = 1; 189bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (hasFaces()) { 190768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams faces = 6; 191768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 192bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (x == 0) { 193768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams x = 1; 194768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 195bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (y == 0) { 196768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams y = 1; 197768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 198bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (z == 0) { 199768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams z = 1; 200768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 201768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 202768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int count = x * y * z * faces; 2039ea30a69d5c1d5b137b0186116eb74261b3b5a5eAlex Sakhartchouk 2049ea30a69d5c1d5b137b0186116eb74261b3b5a5eAlex Sakhartchouk while (hasLod && ((x > 1) || (y > 1) || (z > 1))) { 205768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if(x > 1) { 206768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams x >>= 1; 207768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 208768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if(y > 1) { 209768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams y >>= 1; 210768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 211768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if(z > 1) { 212768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams z >>= 1; 213768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 214768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 215768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams count += x * y * z * faces; 216768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 21746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 21846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (mArrays != null) { 21946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams for (int ct = 0; ct < mArrays.length; ct++) { 22046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams count *= mArrays[ct]; 22146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 22246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 22346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 224768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams mElementCount = count; 225768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 226768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 227768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 228460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray Type(long id, RenderScript rs) { 2290de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 2306484b6be5ca5233614d0a8991a5d909543824fc7Yang Ni guard.open("destroy"); 23143ee06857bb7f99446d1d84f8789016c5d105558Jason Sams } 23243ee06857bb7f99446d1d84f8789016c5d105558Jason Sams 233dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk @Override 234dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk void updateFromNative() { 2359807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat // We have 6 integer/long to obtain mDimX; mDimY; mDimZ; 236dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // mDimLOD; mDimFaces; mElement; 2379807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat long[] dataBuffer = new long[6]; 2389807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat mRS.nTypeGetNativeData(getID(mRS), dataBuffer); 239dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 2409807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat mDimX = (int)dataBuffer[0]; 2419807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat mDimY = (int)dataBuffer[1]; 2429807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat mDimZ = (int)dataBuffer[2]; 243bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimMipmaps = dataBuffer[3] == 1 ? true : false; 244dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimFaces = dataBuffer[4] == 1 ? true : false; 245dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 2469807155b11a25fb6068edc9b1cd82928ac2f05deAshok Bhat long elementID = dataBuffer[5]; 247dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(elementID != 0) { 2480de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mElement = new Element(elementID, mRS); 249dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElement.updateFromNative(); 250dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 251dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk calcElementCount(); 252dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 253dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 2549c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 255ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * Utility function for creating basic 1D types. The type is 256ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * created without mipmaps enabled. 257ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * 258ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @param rs The RenderScript context 259ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @param e The Element for the Type 260ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @param dimX The X dimension, must be > 0 261ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * 262ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @return Type 263ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams */ 264ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams static public Type createX(RenderScript rs, Element e, int dimX) { 265ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams if (dimX < 1) { 266ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams throw new RSInvalidStateException("Dimension must be >= 1."); 267ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams } 268ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams 269460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long id = rs.nTypeCreate(e.getID(rs), dimX, 0, 0, false, false, 0); 270ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams Type t = new Type(id, rs); 271ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams t.mElement = e; 272ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams t.mDimX = dimX; 273ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams t.calcElementCount(); 274ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams return t; 275ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams } 276ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams 277ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams /** 278ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * Utility function for creating basic 2D types. The type is 279ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * created without mipmaps or cubemaps. 280ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * 281ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @param rs The RenderScript context 282ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @param e The Element for the Type 283ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @param dimX The X dimension, must be > 0 284ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @param dimY The Y dimension, must be > 0 285ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * 286ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @return Type 287ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams */ 288ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams static public Type createXY(RenderScript rs, Element e, int dimX, int dimY) { 289ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams if ((dimX < 1) || (dimY < 1)) { 290ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams throw new RSInvalidStateException("Dimension must be >= 1."); 291ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams } 292ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams 293460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long id = rs.nTypeCreate(e.getID(rs), dimX, dimY, 0, false, false, 0); 294ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams Type t = new Type(id, rs); 295ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams t.mElement = e; 296ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams t.mDimX = dimX; 297ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams t.mDimY = dimY; 298ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams t.calcElementCount(); 299ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams return t; 300ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams } 301ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams 302ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams /** 303ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * Utility function for creating basic 3D types. The type is 304ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * created without mipmaps. 305ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * 306ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @param rs The RenderScript context 307ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @param e The Element for the Type 308ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @param dimX The X dimension, must be > 0 309ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @param dimY The Y dimension, must be > 0 310ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @param dimZ The Z dimension, must be > 0 311ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * 312ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams * @return Type 313ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams */ 314ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams static public Type createXYZ(RenderScript rs, Element e, int dimX, int dimY, int dimZ) { 315ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams if ((dimX < 1) || (dimY < 1) || (dimZ < 1)) { 316ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams throw new RSInvalidStateException("Dimension must be >= 1."); 317ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams } 318ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams 319460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long id = rs.nTypeCreate(e.getID(rs), dimX, dimY, dimZ, false, false, 0); 320ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams Type t = new Type(id, rs); 321ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams t.mElement = e; 322ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams t.mDimX = dimX; 323ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams t.mDimY = dimY; 324ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams t.mDimZ = dimZ; 325ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams t.calcElementCount(); 326ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams return t; 327ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams } 328ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams 329ec44e5dc2f961c4f728babdd17bc4f2b7742750fJason Sams /** 330a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Builder class for Type. 331a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 332a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 333b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public static class Builder { 334b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams RenderScript mRS; 335bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDimX = 1; 336bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDimY; 337bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDimZ; 338bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean mDimMipmaps; 339bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean mDimFaces; 340b109cc78616abee7291eb42094cd156b5db3355dJason Sams int mYuv; 34146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams int[] mArray = new int[mMaxArrays]; 342b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 343bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams Element mElement; 344b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 3459c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 346a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a new builder object. 347a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 348a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs 349a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param e The element for the type to be created. 350a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 35122534176fb5c1257130ef4ee589739ca42766a32Jason Sams public Builder(RenderScript rs, Element e) { 352bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams e.checkValid(); 35322534176fb5c1257130ef4ee589739ca42766a32Jason Sams mRS = rs; 35422534176fb5c1257130ef4ee589739ca42766a32Jason Sams mElement = e; 355b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 356b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 3579c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 358a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Add a dimension to the Type. 359a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 360a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 361a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param value 362a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 363bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setX(int value) { 3643c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(value < 1) { 365bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension X are not valid."); 3663c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 367bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimX = value; 368bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 369bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 3703b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams 371bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setY(int value) { 372bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if(value < 1) { 373bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension Y are not valid."); 37422534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 375bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimY = value; 376bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 377bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 378bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 379d1c306a9e66f8e541f866a6f3740959ed8cc70a6Jason Sams public Builder setZ(int value) { 380d1c306a9e66f8e541f866a6f3740959ed8cc70a6Jason Sams if(value < 1) { 381d1c306a9e66f8e541f866a6f3740959ed8cc70a6Jason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension Z are not valid."); 382d1c306a9e66f8e541f866a6f3740959ed8cc70a6Jason Sams } 383d1c306a9e66f8e541f866a6f3740959ed8cc70a6Jason Sams mDimZ = value; 384d1c306a9e66f8e541f866a6f3740959ed8cc70a6Jason Sams return this; 385d1c306a9e66f8e541f866a6f3740959ed8cc70a6Jason Sams } 386d1c306a9e66f8e541f866a6f3740959ed8cc70a6Jason Sams 38746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams /** 388d016266de2cefe12853dbf4a81292b96bb4150b1Jason Sams * @hide 3896a420b5e0be235d35f319118eb4920f74a61dc5eJason Sams * Adds an array dimension to the builder 39046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams * 39146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams * @param dim 39246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams * @param value 39346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams * 39446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams * @return Builder 39546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams */ 39646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams public Builder setArray(int dim, int value) { 39746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if(dim < 0 || dim >= mMaxArrays) { 39846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams throw new RSIllegalArgumentException("Array dimension out of range."); 39946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 40046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams mArray[dim] = value; 40146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams return this; 40246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 40346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 404bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setMipmaps(boolean value) { 405bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimMipmaps = value; 406bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 40722534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 40822534176fb5c1257130ef4ee589739ca42766a32Jason Sams 409bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setFaces(boolean value) { 410bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimFaces = value; 411bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 412bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 413bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 414b109cc78616abee7291eb42094cd156b5db3355dJason Sams /** 415c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * Set the YUV layout for a Type. 416b109cc78616abee7291eb42094cd156b5db3355dJason Sams * 417ccadaf1eb48c70a3eb5722ecbd0144d165bcd963Eino-Ville Talvala * @param yuvFormat {@link android.graphics.ImageFormat#YV12}, {@link android.graphics.ImageFormat#NV21}, or 418ccadaf1eb48c70a3eb5722ecbd0144d165bcd963Eino-Ville Talvala * {@link android.graphics.ImageFormat#YUV_420_888}. 419b109cc78616abee7291eb42094cd156b5db3355dJason Sams */ 420b109cc78616abee7291eb42094cd156b5db3355dJason Sams public Builder setYuvFormat(int yuvFormat) { 421b109cc78616abee7291eb42094cd156b5db3355dJason Sams switch (yuvFormat) { 422b109cc78616abee7291eb42094cd156b5db3355dJason Sams case android.graphics.ImageFormat.NV21: 423b109cc78616abee7291eb42094cd156b5db3355dJason Sams case android.graphics.ImageFormat.YV12: 424ccadaf1eb48c70a3eb5722ecbd0144d165bcd963Eino-Ville Talvala case android.graphics.ImageFormat.YUV_420_888: 425b109cc78616abee7291eb42094cd156b5db3355dJason Sams break; 426b109cc78616abee7291eb42094cd156b5db3355dJason Sams 427b109cc78616abee7291eb42094cd156b5db3355dJason Sams default: 428ccadaf1eb48c70a3eb5722ecbd0144d165bcd963Eino-Ville Talvala throw new RSIllegalArgumentException( 429ccadaf1eb48c70a3eb5722ecbd0144d165bcd963Eino-Ville Talvala "Only ImageFormat.NV21, .YV12, and .YUV_420_888 are supported.."); 430b109cc78616abee7291eb42094cd156b5db3355dJason Sams } 431b109cc78616abee7291eb42094cd156b5db3355dJason Sams 432b109cc78616abee7291eb42094cd156b5db3355dJason Sams mYuv = yuvFormat; 433b109cc78616abee7291eb42094cd156b5db3355dJason Sams return this; 434b109cc78616abee7291eb42094cd156b5db3355dJason Sams } 435b109cc78616abee7291eb42094cd156b5db3355dJason Sams 436bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 4379c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 438c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * Validate structure and create a new Type. 439a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 440a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Type 441a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 4423b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams public Type create() { 443bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimZ > 0) { 444bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if ((mDimX < 1) || (mDimY < 1)) { 445a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("Both X and Y dimension required when Z is present."); 446a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 447bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimFaces) { 448a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("Cube maps not supported with 3D types."); 449a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 450a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 451bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimY > 0) { 452bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimX < 1) { 453a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("X dimension required when Y is present."); 454a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 455a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 456bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimFaces) { 457bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimY < 1) { 458a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("Cube maps require 2D Types."); 459a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 460a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 461a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 462b109cc78616abee7291eb42094cd156b5db3355dJason Sams if (mYuv != 0) { 463b109cc78616abee7291eb42094cd156b5db3355dJason Sams if ((mDimZ != 0) || mDimFaces || mDimMipmaps) { 464b109cc78616abee7291eb42094cd156b5db3355dJason Sams throw new RSInvalidStateException("YUV only supports basic 2D."); 465b109cc78616abee7291eb42094cd156b5db3355dJason Sams } 466b109cc78616abee7291eb42094cd156b5db3355dJason Sams } 467b109cc78616abee7291eb42094cd156b5db3355dJason Sams 46846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams int[] arrays = null; 46946ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams for (int ct = mMaxArrays - 1; ct >= 0; ct--) { 47046ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if (mArray[ct] != 0 && arrays == null) { 47146ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams arrays = new int[ct]; 47246ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 47346ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams if ((mArray[ct] == 0) && (arrays != null)) { 47446ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams throw new RSInvalidStateException("Array dimensions must be contigous from 0."); 47546ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 47646ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams } 47746ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams 478460a04971c494fec39ffcb38e873bb8fdd82d113Tim Murray long id = mRS.nTypeCreate(mElement.getID(mRS), 479b109cc78616abee7291eb42094cd156b5db3355dJason Sams mDimX, mDimY, mDimZ, mDimMipmaps, mDimFaces, mYuv); 480bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams Type t = new Type(id, mRS); 481bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mElement = mElement; 482bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimX = mDimX; 483bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimY = mDimY; 484bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimZ = mDimZ; 485bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimMipmaps = mDimMipmaps; 486bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimFaces = mDimFaces; 487b109cc78616abee7291eb42094cd156b5db3355dJason Sams t.mDimYuv = mYuv; 48846ba27e3fdcf1ce3b940e8b2ec90fcd2c9b7fe43Jason Sams t.mArrays = arrays; 489bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 490768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams t.calcElementCount(); 4911bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams return t; 492b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 493b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 494b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 495b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams} 496