Sampler.java revision eb4dd08ec132f83745b8b28fa7da58eb4478b5b9
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 199c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/** 20c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * Sampler object that defines how Allocations can be read as textures within a 21c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * kernel. Samplers are used in conjunction with the {@code rsSample} runtime 22c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * function to return values from normalized coordinates. 23c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * 24c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * Any Allocation used with a Sampler must have been created with {@link 25c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Allocation#USAGE_GRAPHICS_TEXTURE}; using a Sampler on 26c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * an {@link android.renderscript.Allocation} that was not created with {@link 27c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * android.renderscript.Allocation#USAGE_GRAPHICS_TEXTURE} is undefined. 280835d42be9b215f845e30db03211c86670cfa12aJason Sams **/ 290835d42be9b215f845e30db03211c86670cfa12aJason Samspublic class Sampler extends BaseObj { 300835d42be9b215f845e30db03211c86670cfa12aJason Sams public enum Value { 310835d42be9b215f845e30db03211c86670cfa12aJason Sams NEAREST (0), 320835d42be9b215f845e30db03211c86670cfa12aJason Sams LINEAR (1), 330835d42be9b215f845e30db03211c86670cfa12aJason Sams LINEAR_MIP_LINEAR (2), 340857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk LINEAR_MIP_NEAREST (5), 350835d42be9b215f845e30db03211c86670cfa12aJason Sams WRAP (3), 366b9b2caf2bf977508e223792bb5eba75091c232dTim Murray CLAMP (4), 376b9b2caf2bf977508e223792bb5eba75091c232dTim Murray MIRRORED_REPEAT (6); 380835d42be9b215f845e30db03211c86670cfa12aJason Sams 390835d42be9b215f845e30db03211c86670cfa12aJason Sams int mID; 400835d42be9b215f845e30db03211c86670cfa12aJason Sams Value(int id) { 410835d42be9b215f845e30db03211c86670cfa12aJason Sams mID = id; 420835d42be9b215f845e30db03211c86670cfa12aJason Sams } 430835d42be9b215f845e30db03211c86670cfa12aJason Sams } 440835d42be9b215f845e30db03211c86670cfa12aJason Sams 457d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mMin; 467d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mMag; 477d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mWrapS; 487d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mWrapT; 497d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mWrapR; 507d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk float mAniso; 517d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 520e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat Sampler(long id, RenderScript rs) { 530de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 54eb4dd08ec132f83745b8b28fa7da58eb4478b5b9Yang Ni guard.open("destroy"); 550835d42be9b215f845e30db03211c86670cfa12aJason Sams } 560835d42be9b215f845e30db03211c86670cfa12aJason Sams 579c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 587d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return minification setting for the sampler 597d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 607d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getMinification() { 617d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mMin; 627d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 637d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 649c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 657d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return magnification setting for the sampler 667d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 677d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getMagnification() { 687d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mMag; 697d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 707d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 719c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 727d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return S wrapping mode for the sampler 737d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getWrapS() { 757d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mWrapS; 767d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 777d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 789c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return T wrapping mode for the sampler 807d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 817d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getWrapT() { 827d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mWrapT; 837d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 847d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 859c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 867d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return anisotropy setting for the sampler 877d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 887d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public float getAnisotropy() { 897d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mAniso; 907d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 917d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 929c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 93bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to nearest and wrap modes set to 94bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * clamp. 95bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 96f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 97bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 98bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 99bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1004d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_NEAREST(RenderScript rs) { 1014d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_CLAMP_NEAREST == null) { 1024d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 103b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.NEAREST); 104b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.NEAREST); 1054d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.CLAMP); 1064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.CLAMP); 1074d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_CLAMP_NEAREST = b.create(); 1084d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1094d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_NEAREST; 1104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1129c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 113bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to linear and wrap modes set to 114bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * clamp. 115bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 116f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 117bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 118bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 119bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1204d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_LINEAR(RenderScript rs) { 1214d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_CLAMP_LINEAR == null) { 1224d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 123b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR); 124b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 1254d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.CLAMP); 1264d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.CLAMP); 1274d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_CLAMP_LINEAR = b.create(); 1284d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1294d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_LINEAR; 1304d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1314d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1329c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1336b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with mag set to linear, min linear mipmap linear, and 1346b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * wrap modes set to clamp. 135bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 136f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 137bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 138bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 139bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1404d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_LINEAR_MIP_LINEAR(RenderScript rs) { 1414d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) { 1424d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 143b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR_MIP_LINEAR); 144b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 1454d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.CLAMP); 1464d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.CLAMP); 1474d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_CLAMP_LINEAR_MIP_LINEAR = b.create(); 1484d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1494d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_LINEAR_MIP_LINEAR; 1504d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1514d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1529c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 153bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to nearest and wrap modes set to 154bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * wrap. 155bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 156f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 157bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 158bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 159bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1604d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_NEAREST(RenderScript rs) { 1614d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_WRAP_NEAREST == null) { 1624d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 163b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.NEAREST); 164b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.NEAREST); 1654d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.WRAP); 1664d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.WRAP); 1674d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_WRAP_NEAREST = b.create(); 1684d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1694d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_NEAREST; 1704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1729c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1736b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with min and mag set to linear and wrap modes set to 174bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * wrap. 175bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 176f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 177bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 178bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 179bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1804d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_LINEAR(RenderScript rs) { 1814d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_WRAP_LINEAR == null) { 1824d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 183b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR); 184b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 1854d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.WRAP); 1864d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.WRAP); 1874d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_WRAP_LINEAR = b.create(); 1884d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1894d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_LINEAR; 1904d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1914d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1929c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1936b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with mag set to linear, min linear mipmap linear, and 1946b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * wrap modes set to wrap. 195bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 196f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 197bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 198bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 199bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 2004d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_LINEAR_MIP_LINEAR(RenderScript rs) { 2014d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) { 2024d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 203b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR_MIP_LINEAR); 204b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 2054d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.WRAP); 2064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.WRAP); 2074d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_WRAP_LINEAR_MIP_LINEAR = b.create(); 2084d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2094d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_LINEAR_MIP_LINEAR; 2104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 2126b9b2caf2bf977508e223792bb5eba75091c232dTim Murray /** 2136b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with min and mag set to nearest and wrap modes set to 2146b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * mirrored repeat. 2156b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2166b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @param rs Context to which the sampler will belong. 2176b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2186b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @return Sampler 2196b9b2caf2bf977508e223792bb5eba75091c232dTim Murray */ 2206b9b2caf2bf977508e223792bb5eba75091c232dTim Murray public static Sampler MIRRORED_REPEAT_NEAREST(RenderScript rs) { 2216b9b2caf2bf977508e223792bb5eba75091c232dTim Murray if(rs.mSampler_MIRRORED_REPEAT_NEAREST == null) { 2226b9b2caf2bf977508e223792bb5eba75091c232dTim Murray Builder b = new Builder(rs); 2236b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setMinification(Value.NEAREST); 2246b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setMagnification(Value.NEAREST); 2256b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setWrapS(Value.MIRRORED_REPEAT); 2266b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setWrapT(Value.MIRRORED_REPEAT); 2276b9b2caf2bf977508e223792bb5eba75091c232dTim Murray rs.mSampler_MIRRORED_REPEAT_NEAREST = b.create(); 2286b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2296b9b2caf2bf977508e223792bb5eba75091c232dTim Murray return rs.mSampler_MIRRORED_REPEAT_NEAREST; 2306b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2316b9b2caf2bf977508e223792bb5eba75091c232dTim Murray 2326b9b2caf2bf977508e223792bb5eba75091c232dTim Murray /** 2336b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with min and mag set to linear and wrap modes set to 2346b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * mirrored repeat. 2356b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2366b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @param rs Context to which the sampler will belong. 2376b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2386b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @return Sampler 2396b9b2caf2bf977508e223792bb5eba75091c232dTim Murray */ 2406b9b2caf2bf977508e223792bb5eba75091c232dTim Murray public static Sampler MIRRORED_REPEAT_LINEAR(RenderScript rs) { 2416b9b2caf2bf977508e223792bb5eba75091c232dTim Murray if(rs.mSampler_MIRRORED_REPEAT_LINEAR == null) { 2426b9b2caf2bf977508e223792bb5eba75091c232dTim Murray Builder b = new Builder(rs); 2436b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setMinification(Value.LINEAR); 2446b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setMagnification(Value.LINEAR); 2456b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setWrapS(Value.MIRRORED_REPEAT); 2466b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setWrapT(Value.MIRRORED_REPEAT); 2476b9b2caf2bf977508e223792bb5eba75091c232dTim Murray rs.mSampler_MIRRORED_REPEAT_LINEAR = b.create(); 2486b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2496b9b2caf2bf977508e223792bb5eba75091c232dTim Murray return rs.mSampler_MIRRORED_REPEAT_LINEAR; 2506b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2516b9b2caf2bf977508e223792bb5eba75091c232dTim Murray 2526b9b2caf2bf977508e223792bb5eba75091c232dTim Murray /** 2536b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with min and mag set to linear and wrap modes set to 2546b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * mirrored repeat. 2556b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2566b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @param rs Context to which the sampler will belong. 2576b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2586b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @return Sampler 2596b9b2caf2bf977508e223792bb5eba75091c232dTim Murray */ 2606b9b2caf2bf977508e223792bb5eba75091c232dTim Murray public static Sampler MIRRORED_REPEAT_LINEAR_MIP_LINEAR(RenderScript rs) { 2616b9b2caf2bf977508e223792bb5eba75091c232dTim Murray if(rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR == null) { 2626b9b2caf2bf977508e223792bb5eba75091c232dTim Murray Builder b = new Builder(rs); 2636b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setMinification(Value.LINEAR_MIP_LINEAR); 2646b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setMagnification(Value.LINEAR); 2656b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setWrapS(Value.MIRRORED_REPEAT); 2666b9b2caf2bf977508e223792bb5eba75091c232dTim Murray b.setWrapT(Value.MIRRORED_REPEAT); 2676b9b2caf2bf977508e223792bb5eba75091c232dTim Murray rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR = b.create(); 2686b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2696b9b2caf2bf977508e223792bb5eba75091c232dTim Murray return rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR; 2706b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 2729c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 273c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * Builder for creating non-standard samplers. This is only necessary if 274c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * a Sampler with different min and mag modes is desired. 275bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 2760835d42be9b215f845e30db03211c86670cfa12aJason Sams public static class Builder { 2770835d42be9b215f845e30db03211c86670cfa12aJason Sams RenderScript mRS; 2780835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mMin; 2790835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mMag; 2800835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapS; 2810835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapT; 2820835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapR; 283f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk float mAniso; 2840835d42be9b215f845e30db03211c86670cfa12aJason Sams 2850835d42be9b215f845e30db03211c86670cfa12aJason Sams public Builder(RenderScript rs) { 2860835d42be9b215f845e30db03211c86670cfa12aJason Sams mRS = rs; 2870835d42be9b215f845e30db03211c86670cfa12aJason Sams mMin = Value.NEAREST; 2880835d42be9b215f845e30db03211c86670cfa12aJason Sams mMag = Value.NEAREST; 2890835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapS = Value.WRAP; 2900835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapT = Value.WRAP; 2910835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapR = Value.WRAP; 292f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk mAniso = 1.0f; 2930835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2940835d42be9b215f845e30db03211c86670cfa12aJason Sams 295b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setMinification(Value v) { 2968bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.NEAREST || 2978bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams v == Value.LINEAR || 2980857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk v == Value.LINEAR_MIP_LINEAR || 2990857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk v == Value.LINEAR_MIP_NEAREST) { 3008bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mMin = v; 3018bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 3028bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 3038bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 3040835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3050835d42be9b215f845e30db03211c86670cfa12aJason Sams 306b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setMagnification(Value v) { 3078bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.NEAREST || v == Value.LINEAR) { 3088bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mMag = v; 3098bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 3108bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 3118bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 3120835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3130835d42be9b215f845e30db03211c86670cfa12aJason Sams 3140835d42be9b215f845e30db03211c86670cfa12aJason Sams public void setWrapS(Value v) { 3156b9b2caf2bf977508e223792bb5eba75091c232dTim Murray if (v == Value.WRAP || v == Value.CLAMP || v == Value.MIRRORED_REPEAT) { 3168bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mWrapS = v; 3178bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 3188bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 3198bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 3200835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3210835d42be9b215f845e30db03211c86670cfa12aJason Sams 3220835d42be9b215f845e30db03211c86670cfa12aJason Sams public void setWrapT(Value v) { 3236b9b2caf2bf977508e223792bb5eba75091c232dTim Murray if (v == Value.WRAP || v == Value.CLAMP || v == Value.MIRRORED_REPEAT) { 3248bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mWrapT = v; 3258bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 3268bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 3278bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 3280835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3290835d42be9b215f845e30db03211c86670cfa12aJason Sams 330f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk public void setAnisotropy(float v) { 331f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk if(v >= 0.0f) { 332f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk mAniso = v; 333f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } else { 334f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk throw new IllegalArgumentException("Invalid value"); 335f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } 336f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } 337f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk 3380835d42be9b215f845e30db03211c86670cfa12aJason Sams public Sampler create() { 339771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 3400e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat long id = mRS.nSamplerCreate(mMag.mID, mMin.mID, 3417d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mWrapS.mID, mWrapT.mID, mWrapR.mID, mAniso); 3427d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Sampler sampler = new Sampler(id, mRS); 3437d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mMin = mMin; 3447d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mMag = mMag; 3457d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapS = mWrapS; 3467d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapT = mWrapT; 3477d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapR = mWrapR; 3487d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mAniso = mAniso; 3497d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return sampler; 3500835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3510835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3520835d42be9b215f845e30db03211c86670cfa12aJason Sams 3530835d42be9b215f845e30db03211c86670cfa12aJason Sams} 3540835d42be9b215f845e30db03211c86670cfa12aJason Sams 355