10835d42be9b215f845e30db03211c86670cfa12aJason Sams/* 20835d42be9b215f845e30db03211c86670cfa12aJason Sams * Copyright (C) 2008 The Android Open Source Project 30835d42be9b215f845e30db03211c86670cfa12aJason Sams * 40835d42be9b215f845e30db03211c86670cfa12aJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 50835d42be9b215f845e30db03211c86670cfa12aJason Sams * you may not use this file except in compliance with the License. 60835d42be9b215f845e30db03211c86670cfa12aJason Sams * You may obtain a copy of the License at 70835d42be9b215f845e30db03211c86670cfa12aJason Sams * 80835d42be9b215f845e30db03211c86670cfa12aJason Sams * http://www.apache.org/licenses/LICENSE-2.0 90835d42be9b215f845e30db03211c86670cfa12aJason Sams * 100835d42be9b215f845e30db03211c86670cfa12aJason Sams * Unless required by applicable law or agreed to in writing, software 110835d42be9b215f845e30db03211c86670cfa12aJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 120835d42be9b215f845e30db03211c86670cfa12aJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130835d42be9b215f845e30db03211c86670cfa12aJason Sams * See the License for the specific language governing permissions and 140835d42be9b215f845e30db03211c86670cfa12aJason Sams * limitations under the License. 150835d42be9b215f845e30db03211c86670cfa12aJason Sams */ 160835d42be9b215f845e30db03211c86670cfa12aJason Sams 170835d42be9b215f845e30db03211c86670cfa12aJason Samspackage android.renderscript; 180835d42be9b215f845e30db03211c86670cfa12aJason Sams 190835d42be9b215f845e30db03211c86670cfa12aJason Sams 200835d42be9b215f845e30db03211c86670cfa12aJason Samsimport java.io.IOException; 210835d42be9b215f845e30db03211c86670cfa12aJason Samsimport java.io.InputStream; 220835d42be9b215f845e30db03211c86670cfa12aJason Sams 230835d42be9b215f845e30db03211c86670cfa12aJason Samsimport android.content.res.Resources; 240835d42be9b215f845e30db03211c86670cfa12aJason Samsimport android.os.Bundle; 250835d42be9b215f845e30db03211c86670cfa12aJason Samsimport android.util.Log; 260835d42be9b215f845e30db03211c86670cfa12aJason Sams 270835d42be9b215f845e30db03211c86670cfa12aJason Samsimport android.graphics.Bitmap; 280835d42be9b215f845e30db03211c86670cfa12aJason Samsimport android.graphics.BitmapFactory; 290835d42be9b215f845e30db03211c86670cfa12aJason Sams 309c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 31c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * Sampler object that defines how Allocations can be read as textures within a 32c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * kernel. Samplers are used in conjunction with the {@code rsSample} runtime 33c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * function to return values from normalized coordinates. 34c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * 35c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * Any Allocation used with a Sampler must have been created with {@link 36c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Allocation#USAGE_GRAPHICS_TEXTURE}; using a Sampler on 37c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * an {@link android.renderscript.Allocation} that was not created with {@link 38c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Allocation#USAGE_GRAPHICS_TEXTURE} is undefined. 390835d42be9b215f845e30db03211c86670cfa12aJason Sams **/ 400835d42be9b215f845e30db03211c86670cfa12aJason Samspublic class Sampler extends BaseObj { 410835d42be9b215f845e30db03211c86670cfa12aJason Sams public enum Value { 420835d42be9b215f845e30db03211c86670cfa12aJason Sams NEAREST (0), 430835d42be9b215f845e30db03211c86670cfa12aJason Sams LINEAR (1), 440835d42be9b215f845e30db03211c86670cfa12aJason Sams LINEAR_MIP_LINEAR (2), 450857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk LINEAR_MIP_NEAREST (5), 460835d42be9b215f845e30db03211c86670cfa12aJason Sams WRAP (3), 476b9b2caf2bf977508e223792bb5eba75091c232dTim Murray CLAMP (4), 486b9b2caf2bf977508e223792bb5eba75091c232dTim Murray MIRRORED_REPEAT (6); 490835d42be9b215f845e30db03211c86670cfa12aJason Sams 500835d42be9b215f845e30db03211c86670cfa12aJason Sams int mID; 510835d42be9b215f845e30db03211c86670cfa12aJason Sams Value(int id) { 520835d42be9b215f845e30db03211c86670cfa12aJason Sams mID = id; 530835d42be9b215f845e30db03211c86670cfa12aJason Sams } 540835d42be9b215f845e30db03211c86670cfa12aJason Sams } 550835d42be9b215f845e30db03211c86670cfa12aJason Sams 567d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mMin; 577d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mMag; 587d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mWrapS; 597d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mWrapT; 607d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mWrapR; 617d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk float mAniso; 627d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 630835d42be9b215f845e30db03211c86670cfa12aJason Sams Sampler(int id, RenderScript rs) { 640de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 650835d42be9b215f845e30db03211c86670cfa12aJason Sams } 660835d42be9b215f845e30db03211c86670cfa12aJason Sams 679c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 687d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return minification setting for the sampler 697d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 707d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getMinification() { 717d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mMin; 727d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 737d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 749c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 757d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return magnification setting for the sampler 767d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 777d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getMagnification() { 787d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mMag; 797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 807d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 819c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 827d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return S wrapping mode for the sampler 837d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 847d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getWrapS() { 857d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mWrapS; 867d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 877d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 889c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 897d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return T wrapping mode for the sampler 907d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 917d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getWrapT() { 927d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mWrapT; 937d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 947d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 959c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 967d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return anisotropy setting for the sampler 977d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 987d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public float getAnisotropy() { 997d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mAniso; 1007d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 1017d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 1029c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 103bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to nearest and wrap modes set to 104bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * clamp. 105bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 106f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 107bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 108bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 109bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_NEAREST(RenderScript rs) { 1114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_CLAMP_NEAREST == null) { 1124d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 113b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.NEAREST); 114b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.NEAREST); 1154d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.CLAMP); 1164d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.CLAMP); 1174d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_CLAMP_NEAREST = b.create(); 1184d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1194d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_NEAREST; 1204d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1214d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1229c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 123bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to linear and wrap modes set to 124bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * clamp. 125bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 126f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 127bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 128bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 129bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1304d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_LINEAR(RenderScript rs) { 1314d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_CLAMP_LINEAR == null) { 1324d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 133b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR); 134b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 1354d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.CLAMP); 1364d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.CLAMP); 1374d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_CLAMP_LINEAR = b.create(); 1384d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1394d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_LINEAR; 1404d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1414d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1429c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1436b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with mag set to linear, min linear mipmap linear, and 1446b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * wrap modes set to clamp. 145bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 146f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 147bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 148bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 149bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1504d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_LINEAR_MIP_LINEAR(RenderScript rs) { 1514d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) { 1524d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 153b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR_MIP_LINEAR); 154b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 1554d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.CLAMP); 1564d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.CLAMP); 1574d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_CLAMP_LINEAR_MIP_LINEAR = b.create(); 1584d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1594d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_LINEAR_MIP_LINEAR; 1604d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1614d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1629c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 163bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to nearest and wrap modes set to 164bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * wrap. 165bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 166f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 167bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 168bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 169bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_NEAREST(RenderScript rs) { 1714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_WRAP_NEAREST == null) { 1724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 173b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.NEAREST); 174b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.NEAREST); 1754d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.WRAP); 1764d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.WRAP); 1774d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_WRAP_NEAREST = b.create(); 1784d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1794d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_NEAREST; 1804d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1814d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1829c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1836b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with min and mag set to linear and wrap modes set to 184bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * wrap. 185bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 186f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 187bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 188bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 189bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1904d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_LINEAR(RenderScript rs) { 1914d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_WRAP_LINEAR == null) { 1924d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 193b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR); 194b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 1954d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.WRAP); 1964d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.WRAP); 1974d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_WRAP_LINEAR = b.create(); 1984d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1994d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_LINEAR; 2004d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2014d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 2029c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 2036b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with mag set to linear, min linear mipmap linear, and 2046b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * wrap modes set to wrap. 205bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 206f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 207bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 208bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 209bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 2104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_LINEAR_MIP_LINEAR(RenderScript rs) { 2114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) { 2124d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 213b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR_MIP_LINEAR); 214b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 2154d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.WRAP); 2164d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.WRAP); 2174d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_WRAP_LINEAR_MIP_LINEAR = b.create(); 2184d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2194d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_LINEAR_MIP_LINEAR; 2204d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2214d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 2226b9b2caf2bf977508e223792bb5eba75091c232dTim Murray /** 2236b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with min and mag set to nearest and wrap modes set to 2246b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * mirrored repeat. 2256b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2266b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @param rs Context to which the sampler will belong. 2276b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2286b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @return Sampler 2296b9b2caf2bf977508e223792bb5eba75091c232dTim Murray */ 2306b9b2caf2bf977508e223792bb5eba75091c232dTim Murray public static Sampler MIRRORED_REPEAT_NEAREST(RenderScript rs) { 2316b9b2caf2bf977508e223792bb5eba75091c232dTim Murray if(rs.mSampler_MIRRORED_REPEAT_NEAREST == null) { 2326b9b2caf2bf977508e223792bb5eba75091c232dTim Murray Builder b = new Builder(rs); 2336b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setMinification(Value.NEAREST); 2346b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setMagnification(Value.NEAREST); 2356b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setWrapS(Value.MIRRORED_REPEAT); 2366b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setWrapT(Value.MIRRORED_REPEAT); 2376b9b2caf2bf977508e223792bb5eba75091c232dTim Murray rs.mSampler_MIRRORED_REPEAT_NEAREST = b.create(); 2386b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2396b9b2caf2bf977508e223792bb5eba75091c232dTim Murray return rs.mSampler_MIRRORED_REPEAT_NEAREST; 2406b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2416b9b2caf2bf977508e223792bb5eba75091c232dTim Murray 2426b9b2caf2bf977508e223792bb5eba75091c232dTim Murray /** 2436b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with min and mag set to linear and wrap modes set to 2446b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * mirrored repeat. 2456b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2466b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @param rs Context to which the sampler will belong. 2476b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2486b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @return Sampler 2496b9b2caf2bf977508e223792bb5eba75091c232dTim Murray */ 2506b9b2caf2bf977508e223792bb5eba75091c232dTim Murray public static Sampler MIRRORED_REPEAT_LINEAR(RenderScript rs) { 2516b9b2caf2bf977508e223792bb5eba75091c232dTim Murray if(rs.mSampler_MIRRORED_REPEAT_LINEAR == null) { 2526b9b2caf2bf977508e223792bb5eba75091c232dTim Murray Builder b = new Builder(rs); 2536b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setMinification(Value.LINEAR); 2546b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setMagnification(Value.LINEAR); 2556b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setWrapS(Value.MIRRORED_REPEAT); 2566b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setWrapT(Value.MIRRORED_REPEAT); 2576b9b2caf2bf977508e223792bb5eba75091c232dTim Murray rs.mSampler_MIRRORED_REPEAT_LINEAR = b.create(); 2586b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2596b9b2caf2bf977508e223792bb5eba75091c232dTim Murray return rs.mSampler_MIRRORED_REPEAT_LINEAR; 2606b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2616b9b2caf2bf977508e223792bb5eba75091c232dTim Murray 2626b9b2caf2bf977508e223792bb5eba75091c232dTim Murray /** 2636b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with min and mag set to linear and wrap modes set to 2646b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * mirrored repeat. 2656b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2666b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @param rs Context to which the sampler will belong. 2676b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2686b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @return Sampler 2696b9b2caf2bf977508e223792bb5eba75091c232dTim Murray */ 2706b9b2caf2bf977508e223792bb5eba75091c232dTim Murray public static Sampler MIRRORED_REPEAT_LINEAR_MIP_LINEAR(RenderScript rs) { 2716b9b2caf2bf977508e223792bb5eba75091c232dTim Murray if(rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR == null) { 2726b9b2caf2bf977508e223792bb5eba75091c232dTim Murray Builder b = new Builder(rs); 2736b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setMinification(Value.LINEAR_MIP_LINEAR); 2746b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setMagnification(Value.LINEAR); 2756b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setWrapS(Value.MIRRORED_REPEAT); 2766b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setWrapT(Value.MIRRORED_REPEAT); 2776b9b2caf2bf977508e223792bb5eba75091c232dTim Murray rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR = b.create(); 2786b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2796b9b2caf2bf977508e223792bb5eba75091c232dTim Murray return rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR; 2806b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2814d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 2829c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 283c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * Builder for creating non-standard samplers. This is only necessary if 284c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * a Sampler with different min and mag modes is desired. 285bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 2860835d42be9b215f845e30db03211c86670cfa12aJason Sams public static class Builder { 2870835d42be9b215f845e30db03211c86670cfa12aJason Sams RenderScript mRS; 2880835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mMin; 2890835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mMag; 2900835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapS; 2910835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapT; 2920835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapR; 293f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk float mAniso; 2940835d42be9b215f845e30db03211c86670cfa12aJason Sams 2950835d42be9b215f845e30db03211c86670cfa12aJason Sams public Builder(RenderScript rs) { 2960835d42be9b215f845e30db03211c86670cfa12aJason Sams mRS = rs; 2970835d42be9b215f845e30db03211c86670cfa12aJason Sams mMin = Value.NEAREST; 2980835d42be9b215f845e30db03211c86670cfa12aJason Sams mMag = Value.NEAREST; 2990835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapS = Value.WRAP; 3000835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapT = Value.WRAP; 3010835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapR = Value.WRAP; 302f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk mAniso = 1.0f; 3030835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3040835d42be9b215f845e30db03211c86670cfa12aJason Sams 305b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setMinification(Value v) { 3068bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.NEAREST || 3078bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams v == Value.LINEAR || 3080857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk v == Value.LINEAR_MIP_LINEAR || 3090857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk v == Value.LINEAR_MIP_NEAREST) { 3108bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mMin = v; 3118bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 3128bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 3138bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 3140835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3150835d42be9b215f845e30db03211c86670cfa12aJason Sams 316b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setMagnification(Value v) { 3178bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.NEAREST || v == Value.LINEAR) { 3188bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mMag = v; 3198bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 3208bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 3218bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 3220835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3230835d42be9b215f845e30db03211c86670cfa12aJason Sams 3240835d42be9b215f845e30db03211c86670cfa12aJason Sams public void setWrapS(Value v) { 3256b9b2caf2bf977508e223792bb5eba75091c232dTim Murray if (v == Value.WRAP || v == Value.CLAMP || v == Value.MIRRORED_REPEAT) { 3268bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mWrapS = v; 3278bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 3288bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 3298bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 3300835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3310835d42be9b215f845e30db03211c86670cfa12aJason Sams 3320835d42be9b215f845e30db03211c86670cfa12aJason Sams public void setWrapT(Value v) { 3336b9b2caf2bf977508e223792bb5eba75091c232dTim Murray if (v == Value.WRAP || v == Value.CLAMP || v == Value.MIRRORED_REPEAT) { 3348bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mWrapT = v; 3358bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 3368bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 3378bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 3380835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3390835d42be9b215f845e30db03211c86670cfa12aJason Sams 340f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk public void setAnisotropy(float v) { 341f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk if(v >= 0.0f) { 342f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk mAniso = v; 343f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } else { 344f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk throw new IllegalArgumentException("Invalid value"); 345f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } 346f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } 347f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk 3480835d42be9b215f845e30db03211c86670cfa12aJason Sams public Sampler create() { 349771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 350918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk int id = mRS.nSamplerCreate(mMag.mID, mMin.mID, 3517d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mWrapS.mID, mWrapT.mID, mWrapR.mID, mAniso); 3527d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Sampler sampler = new Sampler(id, mRS); 3537d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mMin = mMin; 3547d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mMag = mMag; 3557d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapS = mWrapS; 3567d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapT = mWrapT; 3577d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapR = mWrapR; 3587d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mAniso = mAniso; 3597d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return sampler; 3600835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3610835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3620835d42be9b215f845e30db03211c86670cfa12aJason Sams 3630835d42be9b215f845e30db03211c86670cfa12aJason Sams} 3640835d42be9b215f845e30db03211c86670cfa12aJason Sams 365