1b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams/* 2b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * Copyright (C) 2008 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 19dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 2043ee06857bb7f99446d1d84f8789016c5d105558Jason Samsimport java.lang.reflect.Field; 21dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchoukimport android.util.Log; 2243ee06857bb7f99446d1d84f8789016c5d105558Jason Sams 239c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 2411518acc8c416023d8c2192b441a1767205676d9Robert Ly * <p>Type is an allocation template. It consists of an Element and one or more 2511518acc8c416023d8c2192b441a1767205676d9Robert Ly * dimensions. It describes only the layout of memory but does not allocate any 2611518acc8c416023d8c2192b441a1767205676d9Robert Ly * storage for the data that is described.</p> 27a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 2811518acc8c416023d8c2192b441a1767205676d9Robert Ly * <p>A Type consists of several dimensions. Those are X, Y, Z, LOD (level of 29a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * detail), Faces (faces of a cube map). The X,Y,Z dimensions can be assigned 30a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * any positive integral value within the constraints of available memory. A 31a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * single dimension allocation would have an X dimension of greater than zero 32a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * while the Y and Z dimensions would be zero to indicate not present. In this 33a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * regard an allocation of x=10, y=1 would be considered 2 dimensionsal while 3411518acc8c416023d8c2192b441a1767205676d9Robert Ly * x=10, y=0 would be considered 1 dimensional.</p> 35a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 3611518acc8c416023d8c2192b441a1767205676d9Robert Ly * <p>The LOD and Faces dimensions are booleans to indicate present or not present.</p> 37a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 383aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <div class="special reference"> 393aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <h3>Developer Guides</h3> 403aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * <p>For more information about creating an application that uses Renderscript, read the 41b47fa1699a02a96d5da8e175966e9584c6bd5565Scott Main * <a href="{@docRoot}guide/topics/renderscript/index.html">Renderscript</a> developer guide.</p> 423aef8e1d1b2f0b87d470bcccf37ba4ebb6560c45Joe Fernandez * </div> 43b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams **/ 44b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samspublic class Type extends BaseObj { 45768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mDimX; 46768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mDimY; 47768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mDimZ; 48bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean mDimMipmaps; 49768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams boolean mDimFaces; 50768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mElementCount; 511bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams Element mElement; 52768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 5349a05d7b82956009f03acbb92a064eed054eb031Jason Sams public enum CubemapFace { 5420fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines POSITIVE_X (0), 5549a05d7b82956009f03acbb92a064eed054eb031Jason Sams NEGATIVE_X (1), 5620fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines POSITIVE_Y (2), 5749a05d7b82956009f03acbb92a064eed054eb031Jason Sams NEGATIVE_Y (3), 5820fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines POSITIVE_Z (4), 5920fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines NEGATIVE_Z (5), 6020fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines @Deprecated 6120fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines POSITVE_X (0), 6220fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines @Deprecated 6320fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines POSITVE_Y (2), 6420fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines @Deprecated 6520fbd01335f3a41ab78e0bb9f70124665afb1e3bStephen Hines POSITVE_Z (4); 6649a05d7b82956009f03acbb92a064eed054eb031Jason Sams 6749a05d7b82956009f03acbb92a064eed054eb031Jason Sams int mID; 6849a05d7b82956009f03acbb92a064eed054eb031Jason Sams CubemapFace(int id) { 6949a05d7b82956009f03acbb92a064eed054eb031Jason Sams mID = id; 7049a05d7b82956009f03acbb92a064eed054eb031Jason Sams } 7149a05d7b82956009f03acbb92a064eed054eb031Jason Sams } 7249a05d7b82956009f03acbb92a064eed054eb031Jason Sams 739c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 74a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the element associated with this Type. 75a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 76a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 77a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 78e17964e150e459bacced5658ae36fe1c56082e37Jason Sams public Element getElement() { 79e17964e150e459bacced5658ae36fe1c56082e37Jason Sams return mElement; 80e17964e150e459bacced5658ae36fe1c56082e37Jason Sams } 811bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams 829c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 83a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the value of the X dimension. 84a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 85a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 86a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 87768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public int getX() { 88768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimX; 89768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 90a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 919c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 92a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the value of the Y dimension or 0 for a 1D allocation. 93a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 94a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 95a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 96768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public int getY() { 97768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimY; 98768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 99a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 1009c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 101a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the value of the Z dimension or 0 for a 1D or 2D allocation. 102a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 103a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 104a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 105768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public int getZ() { 106768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimZ; 107768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 108a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 1099c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 110a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return if the Type has a mipmap chain. 111a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 112a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return boolean 113a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 114bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public boolean hasMipmaps() { 115bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return mDimMipmaps; 116768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 117a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 1189c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 119a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return if the Type is a cube map. 120a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 121a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return boolean 122a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 123bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public boolean hasFaces() { 124768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimFaces; 125768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 126a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 1279c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 128a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the total number of accessable cells in the Type. 129a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 130a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 131a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 132bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public int getCount() { 133768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mElementCount; 134768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 135768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 136768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams void calcElementCount() { 137bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean hasLod = hasMipmaps(); 138768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int x = getX(); 139768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int y = getY(); 140768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int z = getZ(); 141768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int faces = 1; 142bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (hasFaces()) { 143768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams faces = 6; 144768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 145bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (x == 0) { 146768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams x = 1; 147768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 148bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (y == 0) { 149768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams y = 1; 150768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 151bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (z == 0) { 152768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams z = 1; 153768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 154768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 155768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int count = x * y * z * faces; 1569ea30a69d5c1d5b137b0186116eb74261b3b5a5eAlex Sakhartchouk 1579ea30a69d5c1d5b137b0186116eb74261b3b5a5eAlex Sakhartchouk while (hasLod && ((x > 1) || (y > 1) || (z > 1))) { 158768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if(x > 1) { 159768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams x >>= 1; 160768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 161768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if(y > 1) { 162768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams y >>= 1; 163768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 164768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if(z > 1) { 165768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams z >>= 1; 166768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 167768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 168768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams count += x * y * z * faces; 169768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 170768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams mElementCount = count; 171768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 172768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 173768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 174b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams Type(int id, RenderScript rs) { 1750de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 17643ee06857bb7f99446d1d84f8789016c5d105558Jason Sams } 17743ee06857bb7f99446d1d84f8789016c5d105558Jason Sams 178dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk @Override 179dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk void updateFromNative() { 180dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // We have 6 integer to obtain mDimX; mDimY; mDimZ; 181dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // mDimLOD; mDimFaces; mElement; 182dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int[] dataBuffer = new int[6]; 183e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mRS.nTypeGetNativeData(getID(mRS), dataBuffer); 184dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 185dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimX = dataBuffer[0]; 186dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimY = dataBuffer[1]; 187dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimZ = dataBuffer[2]; 188bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimMipmaps = dataBuffer[3] == 1 ? true : false; 189dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimFaces = dataBuffer[4] == 1 ? true : false; 190dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 191dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int elementID = dataBuffer[5]; 192dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(elementID != 0) { 1930de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mElement = new Element(elementID, mRS); 194dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElement.updateFromNative(); 195dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 196dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk calcElementCount(); 197dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 198dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 1999c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 200a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Builder class for Type. 201a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 202a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 203b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public static class Builder { 204b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams RenderScript mRS; 205bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDimX = 1; 206bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDimY; 207bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDimZ; 208bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean mDimMipmaps; 209bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean mDimFaces; 210b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 211bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams Element mElement; 212b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 2139c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 214a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a new builder object. 215a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 216a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs 217a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param e The element for the type to be created. 218a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 21922534176fb5c1257130ef4ee589739ca42766a32Jason Sams public Builder(RenderScript rs, Element e) { 220bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams e.checkValid(); 22122534176fb5c1257130ef4ee589739ca42766a32Jason Sams mRS = rs; 22222534176fb5c1257130ef4ee589739ca42766a32Jason Sams mElement = e; 223b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 224b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 2259c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 226a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Add a dimension to the Type. 227a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 228a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 229a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param value 230a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 231bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setX(int value) { 2323c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(value < 1) { 233bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension X are not valid."); 2343c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 235bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimX = value; 236bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 237bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 2383b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams 239bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setY(int value) { 240bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if(value < 1) { 241bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension Y are not valid."); 24222534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 243bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimY = value; 244bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 245bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 246bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 247bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setMipmaps(boolean value) { 248bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimMipmaps = value; 249bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 25022534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 25122534176fb5c1257130ef4ee589739ca42766a32Jason Sams 252bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setFaces(boolean value) { 253bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimFaces = value; 254bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 255bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 256bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 257bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 2589c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 259a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Validate structure and create a new type. 260a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 261a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Type 262a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 2633b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams public Type create() { 264bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimZ > 0) { 265bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if ((mDimX < 1) || (mDimY < 1)) { 266a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("Both X and Y dimension required when Z is present."); 267a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 268bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimFaces) { 269a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("Cube maps not supported with 3D types."); 270a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 271a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 272bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimY > 0) { 273bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimX < 1) { 274a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("X dimension required when Y is present."); 275a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 276a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 277bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimFaces) { 278bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimY < 1) { 279a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("Cube maps require 2D Types."); 280a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 281a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 282a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 283e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams int id = mRS.nTypeCreate(mElement.getID(mRS), 284e07694b24f7d12d72b084b6651356681ebd0efd6Jason Sams mDimX, mDimY, mDimZ, mDimMipmaps, mDimFaces); 285bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams Type t = new Type(id, mRS); 286bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mElement = mElement; 287bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimX = mDimX; 288bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimY = mDimY; 289bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimZ = mDimZ; 290bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimMipmaps = mDimMipmaps; 291bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimFaces = mDimFaces; 292bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 293768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams t.calcElementCount(); 2941bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams return t; 295b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 296b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 297b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 298b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams} 299