198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/* 298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Copyright (C) 2012 The Android Open Source Project 398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * you may not use this file except in compliance with the License. 698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * You may obtain a copy of the License at 798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 1098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Unless required by applicable law or agreed to in writing, software 1198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * See the License for the specific language governing permissions and 1498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * limitations under the License. 1598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 1698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 1798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspackage android.support.v8.renderscript; 1898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 1998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 2098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport java.lang.reflect.Field; 2198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samsimport android.util.Log; 2298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 2398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams/** 2498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <p>Type is an allocation template. It consists of an Element and one or more 2598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * dimensions. It describes only the layout of memory but does not allocate any 2698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * storage for the data that is described.</p> 2798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 2898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <p>A Type consists of several dimensions. Those are X, Y, Z, LOD (level of 2998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * detail), Faces (faces of a cube map). The X,Y,Z dimensions can be assigned 3098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * any positive integral value within the constraints of available memory. A 3198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * single dimension allocation would have an X dimension of greater than zero 3298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * while the Y and Z dimensions would be zero to indicate not present. In this 3398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * regard an allocation of x=10, y=1 would be considered 2 dimensionsal while 3498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * x=10, y=0 would be considered 1 dimensional.</p> 3598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 3698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <p>The LOD and Faces dimensions are booleans to indicate present or not present.</p> 3798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 3898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <div class="special reference"> 3998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <h3>Developer Guides</h3> 4098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <p>For more information about creating an application that uses Renderscript, read the 4198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p> 4298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * </div> 4398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams **/ 4498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Samspublic class Type extends BaseObj { 4598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDimX; 4698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDimY; 4798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDimZ; 4898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean mDimMipmaps; 4998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean mDimFaces; 5098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mElementCount; 5198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement; 5298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 5398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public enum CubemapFace { 5498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams POSITIVE_X (0), 5598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams NEGATIVE_X (1), 5698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams POSITIVE_Y (2), 5798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams NEGATIVE_Y (3), 5898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams POSITIVE_Z (4), 5998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams NEGATIVE_Z (5); 6098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 6198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mID; 6298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams CubemapFace(int id) { 6398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mID = id; 6498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 6598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 6698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 6798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 6898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return the element associated with this Type. 6998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 7098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return Element 7198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 7298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Element getElement() { 7398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mElement; 7498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 7598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 7698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 7798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return the value of the X dimension. 7898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 7998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return int 8098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 8198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public int getX() { 8298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mDimX; 8398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 8498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 8598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 8698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return the value of the Y dimension or 0 for a 1D allocation. 8798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 8898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return int 8998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 9098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public int getY() { 9198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mDimY; 9298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 9398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 9498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 9598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return the value of the Z dimension or 0 for a 1D or 2D allocation. 9698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 9798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return int 9898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 9998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public int getZ() { 10098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mDimZ; 10198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 10298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 10398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 10498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return if the Type has a mipmap chain. 10598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 10698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return boolean 10798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 10898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public boolean hasMipmaps() { 10998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mDimMipmaps; 11098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 11198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 11298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 11398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return if the Type is a cube map. 11498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 11598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return boolean 11698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 11798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public boolean hasFaces() { 11898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mDimFaces; 11998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 12098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 12198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 12298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Return the total number of accessable cells in the Type. 12398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 12498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return int 12598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 12698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public int getCount() { 12798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return mElementCount; 12898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 12998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 13098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams void calcElementCount() { 13198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean hasLod = hasMipmaps(); 13298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int x = getX(); 13398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int y = getY(); 13498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int z = getZ(); 13598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int faces = 1; 13698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (hasFaces()) { 13798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams faces = 6; 13898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 13998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (x == 0) { 14098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams x = 1; 14198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 14298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (y == 0) { 14398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams y = 1; 14498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 14598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (z == 0) { 14698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams z = 1; 14798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 14898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 14998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int count = x * y * z * faces; 15098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 15198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams while (hasLod && ((x > 1) || (y > 1) || (z > 1))) { 15298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(x > 1) { 15398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams x >>= 1; 15498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 15598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(y > 1) { 15698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams y >>= 1; 15798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 15898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(z > 1) { 15998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams z >>= 1; 16098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 16198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 16298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams count += x * y * z * faces; 16398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 16498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mElementCount = count; 16598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 16698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 16798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 16898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Type(int id, RenderScript rs) { 16998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams super(id, rs); 17098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 17198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 17298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 17398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Builder class for Type. 17498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 17598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 17698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public static class Builder { 17798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams RenderScript mRS; 17898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDimX = 1; 17998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDimY; 18098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int mDimZ; 18198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean mDimMipmaps; 18298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams boolean mDimFaces; 18398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 18498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Element mElement; 18598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 18698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 18798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Create a new builder object. 18898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 18998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param rs 19098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param e The element for the type to be created. 19198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 19298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder(RenderScript rs, Element e) { 19398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams e.checkValid(); 19498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mRS = rs; 19598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mElement = e; 19698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 19798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 19898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 19998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Add a dimension to the Type. 20098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 20198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 20298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @param value 20398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 20498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder setX(int value) { 20598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(value < 1) { 20698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension X are not valid."); 20798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 20898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mDimX = value; 20998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return this; 21098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 21198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 21298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder setY(int value) { 21398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if(value < 1) { 21498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSIllegalArgumentException("Values of less than 1 for Dimension Y are not valid."); 21598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 21698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mDimY = value; 21798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return this; 21898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 21998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 22098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder setMipmaps(boolean value) { 22198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mDimMipmaps = value; 22298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return this; 22398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 22498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 22598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Builder setFaces(boolean value) { 22698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mDimFaces = value; 22798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return this; 22898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 22998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 23098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 23198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams /** 23298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * Validate structure and create a new type. 23398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * 23498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams * @return Type 23598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams */ 23698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams public Type create() { 23798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mDimZ > 0) { 23898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if ((mDimX < 1) || (mDimY < 1)) { 23998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSInvalidStateException("Both X and Y dimension required when Z is present."); 24098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 24198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mDimFaces) { 24298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSInvalidStateException("Cube maps not supported with 3D types."); 24398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 24498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 24598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mDimY > 0) { 24698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mDimX < 1) { 24798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSInvalidStateException("X dimension required when Y is present."); 24898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 24998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 25098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mDimFaces) { 25198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams if (mDimY < 1) { 25298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams throw new RSInvalidStateException("Cube maps require 2D Types."); 25398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 25498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 25598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 25698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams int id = mRS.nTypeCreate(mElement.getID(mRS), 25798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams mDimX, mDimY, mDimZ, mDimMipmaps, mDimFaces); 25898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams Type t = new Type(id, mRS); 25998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.mElement = mElement; 26098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.mDimX = mDimX; 26198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.mDimY = mDimY; 26298a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.mDimZ = mDimZ; 26398a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.mDimMipmaps = mDimMipmaps; 26498a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.mDimFaces = mDimFaces; 26598a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 26698a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams t.calcElementCount(); 26798a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams return t; 26898a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 26998a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams } 27098a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams 27198a281354fe06d1f970d0521c9a08d9eb0aa1a45Jason Sams} 272