Type.java revision bf6ef8d78fffbce6c1849a4a28fb3f4401ad039e
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/** 24b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * @hide 25b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams * 26a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Type is an allocation template. It consists of an Element and one or more 27a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * dimensions. It describes only the layout of memory but does not allocate and 28a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * storage for the data thus described. 29a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 30a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * A Type consists of several dimensions. Those are X, Y, Z, LOD (level of 31a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * detail), Faces (faces of a cube map). The X,Y,Z dimensions can be assigned 32a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * any positive integral value within the constraints of available memory. A 33a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * single dimension allocation would have an X dimension of greater than zero 34a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * while the Y and Z dimensions would be zero to indicate not present. In this 35a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * regard an allocation of x=10, y=1 would be considered 2 dimensionsal while 36a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * x=10, y=0 would be considered 1 dimensional. 37a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 38a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * The LOD and Faces dimensions are booleans to indicate present or not present. 39a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 40b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams **/ 41b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Samspublic class Type extends BaseObj { 42768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mDimX; 43768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mDimY; 44768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mDimZ; 45bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean mDimMipmaps; 46768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams boolean mDimFaces; 47768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int mElementCount; 481bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams Element mElement; 49768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 50a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 51a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the element associated with this Type. 52a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 53a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Element 54a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 55e17964e150e459bacced5658ae36fe1c56082e37Jason Sams public Element getElement() { 56e17964e150e459bacced5658ae36fe1c56082e37Jason Sams return mElement; 57e17964e150e459bacced5658ae36fe1c56082e37Jason Sams } 581bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams 59a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 60a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the value of the X dimension. 61a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 62a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 63a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 64768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public int getX() { 65768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimX; 66768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 67a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 68a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 69a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the value of the Y dimension or 0 for a 1D allocation. 70a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 71a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 72a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 73768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public int getY() { 74768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimY; 75768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 76a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 77a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 78a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the value of the Z dimension or 0 for a 1D or 2D allocation. 79a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 80a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 81a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 82768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams public int getZ() { 83768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimZ; 84768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 85a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 86a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 87a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return if the Type has a mipmap chain. 88a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 89a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return boolean 90a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 91bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public boolean hasMipmaps() { 92bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return mDimMipmaps; 93768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 94a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 95a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 96a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return if the Type is a cube map. 97a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 98a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return boolean 99a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 100bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public boolean hasFaces() { 101768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mDimFaces; 102768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 103a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 104a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 105a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Return the total number of accessable cells in the Type. 106a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 107a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return int 108a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 109bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public int getCount() { 110768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams return mElementCount; 111768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 112768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 113768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams void calcElementCount() { 114bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean hasLod = hasMipmaps(); 115768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int x = getX(); 116768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int y = getY(); 117768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int z = getZ(); 118768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int faces = 1; 119bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (hasFaces()) { 120768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams faces = 6; 121768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 122bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (x == 0) { 123768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams x = 1; 124768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 125bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (y == 0) { 126768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams y = 1; 127768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 128bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (z == 0) { 129768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams z = 1; 130768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 131768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 132768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams int count = x * y * z * faces; 133bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (hasLod && (x > 1) && (y > 1) && (z > 1)) { 134768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if(x > 1) { 135768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams x >>= 1; 136768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 137768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if(y > 1) { 138768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams y >>= 1; 139768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 140768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams if(z > 1) { 141768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams z >>= 1; 142768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 143768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 144768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams count += x * y * z * faces; 145768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 146768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams mElementCount = count; 147768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams } 148768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 149768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams 150b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams Type(int id, RenderScript rs) { 1510de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 15243ee06857bb7f99446d1d84f8789016c5d105558Jason Sams } 15343ee06857bb7f99446d1d84f8789016c5d105558Jason Sams 154dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk @Override 155dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk void updateFromNative() { 156dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // We have 6 integer to obtain mDimX; mDimY; mDimZ; 157dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk // mDimLOD; mDimFaces; mElement; 158dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int[] dataBuffer = new int[6]; 15906d69de78845659e6904ae4964e606a7f1a6a4a8Jason Sams mRS.nTypeGetNativeData(getID(), dataBuffer); 160dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 161dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimX = dataBuffer[0]; 162dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimY = dataBuffer[1]; 163dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimZ = dataBuffer[2]; 164bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimMipmaps = dataBuffer[3] == 1 ? true : false; 165dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mDimFaces = dataBuffer[4] == 1 ? true : false; 166dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 167dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk int elementID = dataBuffer[5]; 168dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk if(elementID != 0) { 1690de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk mElement = new Element(elementID, mRS); 170dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk mElement.updateFromNative(); 171dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 172dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk calcElementCount(); 173dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk } 174dfac814c18f73dd7289f9927edca3e3b6ec6bc00Alex Sakhartchouk 175a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 176a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Builder class for Type. 177a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 178a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 179b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams public static class Builder { 180b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams RenderScript mRS; 181bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDimX = 1; 182bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDimY; 183bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int mDimZ; 184bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean mDimMipmaps; 185bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams boolean mDimFaces; 186b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 187bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams Element mElement; 188b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 189a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 190a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Create a new builder object. 191a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 192a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param rs 193a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param e The element for the type to be created. 194a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 19522534176fb5c1257130ef4ee589739ca42766a32Jason Sams public Builder(RenderScript rs, Element e) { 196bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams e.checkValid(); 19722534176fb5c1257130ef4ee589739ca42766a32Jason Sams mRS = rs; 19822534176fb5c1257130ef4ee589739ca42766a32Jason Sams mElement = e; 199b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 200b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 201a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 202a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Add a dimension to the Type. 203a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 204a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 205a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param d 206a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @param value 207a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 208bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setX(int value) { 2093c0dfbab807a459622aeade4940daddf482dec66Jason Sams if(value < 1) { 210bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension X are not valid."); 2113c0dfbab807a459622aeade4940daddf482dec66Jason Sams } 212bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimX = value; 213bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 214bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 2153b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams 216bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setY(int value) { 217bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if(value < 1) { 218bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension Y are not valid."); 21922534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 220bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimY = value; 221bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 222bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 223bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 224bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setMipmaps(boolean value) { 225bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimMipmaps = value; 226bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 22722534176fb5c1257130ef4ee589739ca42766a32Jason Sams } 22822534176fb5c1257130ef4ee589739ca42766a32Jason Sams 229bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams public Builder setFaces(boolean value) { 230bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams mDimFaces = value; 231bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams return this; 232bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams } 233bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 234bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 235a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams /** 236a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * Validate structure and create a new type. 237a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * 238a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams * @return Type 239a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams */ 2403b9c52ab8c1ab240d2299358d01a8efbe392d111Jason Sams public Type create() { 241bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimZ > 0) { 242bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if ((mDimX < 1) || (mDimY < 1)) { 243a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("Both X and Y dimension required when Z is present."); 244a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 245bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimFaces) { 246a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("Cube maps not supported with 3D types."); 247a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 248a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 249bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimY > 0) { 250bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimX < 1) { 251a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("X dimension required when Y is present."); 252a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 253a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 254bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimFaces) { 255bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams if (mDimY < 1) { 256a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams throw new RSInvalidStateException("Cube maps require 2D Types."); 257a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 258a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams } 259a1b13ed0912a7e08f9848196b4ca64dcb5db9d0bJason Sams 260bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams int id = mRS.nTypeCreate(mElement.getID(), mDimX, mDimY, mDimZ, mDimMipmaps, mDimFaces); 261bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams Type t = new Type(id, mRS); 262bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mElement = mElement; 263bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimX = mDimX; 264bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimY = mDimY; 265bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimZ = mDimZ; 266bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimMipmaps = mDimMipmaps; 267bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams t.mDimFaces = mDimFaces; 268bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams 269768bc02d815a94ad29146f1ed60c847d1af118ccJason Sams t.calcElementCount(); 2701bada8cd6e4f340de93cff4a2439835fc3b1456cJason Sams return t; 271b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 272b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams } 273b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams 274b8c5a84e7c23746a3fc26013e0880d3d95ca6588Jason Sams} 275