Type.java revision 11518acc8c416023d8c2192b441a1767205676d9
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 23b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams/** 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 * 38b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams **/ 39b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samspublic class Type extends BaseObj { 40768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mDimX; 41768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mDimY; 42768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mDimZ; 43bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean mDimMipmaps; 44768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams boolean mDimFaces; 45768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mElementCount; 461bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams Element mElement; 47768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 4849a05d7b82956009f03acbb92a064eed054eb031Jason Sams public enum CubemapFace { 4949a05d7b82956009f03acbb92a064eed054eb031Jason Sams POSITVE_X (0), 5049a05d7b82956009f03acbb92a064eed054eb031Jason Sams NEGATIVE_X (1), 5149a05d7b82956009f03acbb92a064eed054eb031Jason Sams POSITVE_Y (2), 5249a05d7b82956009f03acbb92a064eed054eb031Jason Sams NEGATIVE_Y (3), 5349a05d7b82956009f03acbb92a064eed054eb031Jason Sams POSITVE_Z (4), 5449a05d7b82956009f03acbb92a064eed054eb031Jason Sams NEGATIVE_Z (5); 5549a05d7b82956009f03acbb92a064eed054eb031Jason Sams 5649a05d7b82956009f03acbb92a064eed054eb031Jason Sams int mID; 5749a05d7b82956009f03acbb92a064eed054eb031Jason Sams CubemapFace(int id) { 5849a05d7b82956009f03acbb92a064eed054eb031Jason Sams mID = id; 5949a05d7b82956009f03acbb92a064eed054eb031Jason Sams } 6049a05d7b82956009f03acbb92a064eed054eb031Jason Sams } 6149a05d7b82956009f03acbb92a064eed054eb031Jason Sams 62a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 63a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the element associated with this Type. 64a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 65a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 66a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 67e17964e150e459bacced5658ae36fe1c56082e37Jason Sams public Element getElement() { 68e17964e150e459bacced5658ae36fe1c56082e37Jason Sams return mElement; 69e17964e150e459bacced5658ae36fe1c56082e37Jason Sams } 701bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams 71a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 72a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the value of the X dimension. 73a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 74a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 75a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 76768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public int getX() { 77768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimX; 78768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 79a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 80a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 81a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the value of the Y dimension or 0 for a 1D allocation. 82a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 83a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 84a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 85768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public int getY() { 86768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimY; 87768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 88a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 89a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 90a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the value of the Z dimension or 0 for a 1D or 2D allocation. 91a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 92a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 93a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 94768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public int getZ() { 95768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimZ; 96768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 97a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 98a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 99a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return if the Type has a mipmap chain. 100a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 101a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return boolean 102a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 103bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public boolean hasMipmaps() { 104bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return mDimMipmaps; 105768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 106a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 107a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 108a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return if the Type is a cube map. 109a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 110a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return boolean 111a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 112bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public boolean hasFaces() { 113768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimFaces; 114768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 115a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 116a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 117a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the total number of accessable cells in the Type. 118a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 119a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 120a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 121bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public int getCount() { 122768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mElementCount; 123768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 124768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 125768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams void calcElementCount() { 126bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean hasLod = hasMipmaps(); 127768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int x = getX(); 128768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int y = getY(); 129768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int z = getZ(); 130768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int faces = 1; 131bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (hasFaces()) { 132768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams faces = 6; 133768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 134bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (x == 0) { 135768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams x = 1; 136768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 137bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (y == 0) { 138768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams y = 1; 139768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 140bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (z == 0) { 141768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams z = 1; 142768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 143768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 144768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int count = x * y * z * faces; 145bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (hasLod && (x > 1) && (y > 1) && (z > 1)) { 146768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if(x > 1) { 147768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams x >>= 1; 148768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 149768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if(y > 1) { 150768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams y >>= 1; 151768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 152768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if(z > 1) { 153768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams z >>= 1; 154768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 155768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 156768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams count += x * y * z * faces; 157768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 158768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams mElementCount = count; 159768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 160768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 161768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 162b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams Type(int id, RenderScript rs) { 1630de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 16443ee06857bb7f99446d1d84f8789016c5d105558Jason Sams } 16543ee06857bb7f99446d1d84f8789016c5d105558Jason Sams 166dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk @Override 167dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk void updateFromNative() { 168dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // We have 6 integer to obtain mDimX; mDimY; mDimZ; 169dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // mDimLOD; mDimFaces; mElement; 170dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int[] dataBuffer = new int[6]; 17106d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams mRS.nTypeGetNativeData(getID(), dataBuffer); 172dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 173dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimX = dataBuffer[0]; 174dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimY = dataBuffer[1]; 175dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimZ = dataBuffer[2]; 176bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimMipmaps = dataBuffer[3] == 1 ? true : false; 177dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimFaces = dataBuffer[4] == 1 ? true : false; 178dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 179dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int elementID = dataBuffer[5]; 180dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(elementID != 0) { 1810de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mElement = new Element(elementID, mRS); 182dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElement.updateFromNative(); 183dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 184dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk calcElementCount(); 185dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 186dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 187a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 188a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Builder class for Type. 189a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 190a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 191b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public static class Builder { 192b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams RenderScript mRS; 193bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDimX = 1; 194bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDimY; 195bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDimZ; 196bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean mDimMipmaps; 197bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean mDimFaces; 198b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 199bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams Element mElement; 200b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 201a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 202a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a new builder object. 203a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 204a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs 205a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param e The element for the type to be created. 206a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 20722534176fb5c1257130ef4ee589739ca42766a32Jason Sams public Builder(RenderScript rs, Element e) { 208bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams e.checkValid(); 20922534176fb5c1257130ef4ee589739ca42766a32Jason Sams mRS = rs; 21022534176fb5c1257130ef4ee589739ca42766a32Jason Sams mElement = e; 211b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 212b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 213a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 214a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Add a dimension to the Type. 215a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 216a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 217a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param value 218a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 219bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setX(int value) { 2203c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(value < 1) { 221bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension X are not valid."); 2223c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 223bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimX = value; 224bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 225bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 2263b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams 227bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setY(int value) { 228bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if(value < 1) { 229bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension Y are not valid."); 23022534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 231bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimY = value; 232bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 233bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 234bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 235bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setMipmaps(boolean value) { 236bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimMipmaps = value; 237bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 23822534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 23922534176fb5c1257130ef4ee589739ca42766a32Jason Sams 240bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setFaces(boolean value) { 241bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimFaces = value; 242bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 243bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 244bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 245bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 246a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 247a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Validate structure and create a new type. 248a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 249a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Type 250a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 2513b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams public Type create() { 252bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimZ > 0) { 253bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if ((mDimX < 1) || (mDimY < 1)) { 254a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("Both X and Y dimension required when Z is present."); 255a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 256bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimFaces) { 257a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("Cube maps not supported with 3D types."); 258a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 259a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 260bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimY > 0) { 261bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimX < 1) { 262a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("X dimension required when Y is present."); 263a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 264a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 265bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimFaces) { 266bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimY < 1) { 267a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("Cube maps require 2D Types."); 268a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 269a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 270a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 271bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int id = mRS.nTypeCreate(mElement.getID(), mDimX, mDimY, mDimZ, mDimMipmaps, mDimFaces); 272bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams Type t = new Type(id, mRS); 273bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mElement = mElement; 274bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimX = mDimX; 275bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimY = mDimY; 276bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimZ = mDimZ; 277bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimMipmaps = mDimMipmaps; 278bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimFaces = mDimFaces; 279bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 280768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams t.calcElementCount(); 2811bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams return t; 282b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 283b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 284b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 285b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams} 286