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); 546484b6be5ca5233614d0a8991a5d909543824fc7Yang 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) { 10133703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_CLAMP_NEAREST == null) { 10233703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni synchronized (rs) { 10333703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_CLAMP_NEAREST == null) { 10433703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni Builder b = new Builder(rs); 10533703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMinification(Value.NEAREST); 10633703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMagnification(Value.NEAREST); 10733703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapS(Value.CLAMP); 10833703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapT(Value.CLAMP); 10933703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni rs.mSampler_CLAMP_NEAREST = b.create(); 11033703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 11133703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 1124d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1134d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_NEAREST; 1144d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1154d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1169c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 117bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to linear and wrap modes set to 118bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * clamp. 119bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 120f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 121bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 122bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 123bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1244d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_LINEAR(RenderScript rs) { 12533703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_CLAMP_LINEAR == null) { 12633703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni synchronized (rs) { 12733703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_CLAMP_LINEAR == null) { 12833703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni Builder b = new Builder(rs); 12933703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMinification(Value.LINEAR); 13033703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMagnification(Value.LINEAR); 13133703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapS(Value.CLAMP); 13233703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapT(Value.CLAMP); 13333703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni rs.mSampler_CLAMP_LINEAR = b.create(); 13433703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 13533703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 1364d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1374d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_LINEAR; 1384d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1394d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1409c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1416b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with mag set to linear, min linear mipmap linear, and 1426b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * wrap modes set to clamp. 143bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 144f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 145bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 146bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 147bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1484d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_LINEAR_MIP_LINEAR(RenderScript rs) { 14933703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) { 15033703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni synchronized (rs) { 15133703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) { 15233703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni Builder b = new Builder(rs); 15333703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMinification(Value.LINEAR_MIP_LINEAR); 15433703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMagnification(Value.LINEAR); 15533703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapS(Value.CLAMP); 15633703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapT(Value.CLAMP); 15733703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni rs.mSampler_CLAMP_LINEAR_MIP_LINEAR = b.create(); 15833703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 15933703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 1604d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1614d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_LINEAR_MIP_LINEAR; 1624d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1634d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1649c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 165bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to nearest and wrap modes set to 166bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * wrap. 167bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 168f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 169bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 170bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 171bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_NEAREST(RenderScript rs) { 17333703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_WRAP_NEAREST == null) { 17433703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni synchronized (rs) { 17533703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_WRAP_NEAREST == null) { 17633703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni Builder b = new Builder(rs); 17733703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMinification(Value.NEAREST); 17833703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMagnification(Value.NEAREST); 17933703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapS(Value.WRAP); 18033703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapT(Value.WRAP); 18133703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni rs.mSampler_WRAP_NEAREST = b.create(); 18233703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 18333703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 1844d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1854d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_NEAREST; 1864d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1874d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1889c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 1896b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with min and mag set to linear and wrap modes set to 190bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * wrap. 191bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 192f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 193bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 194bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 195bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1964d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_LINEAR(RenderScript rs) { 19733703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_WRAP_LINEAR == null) { 19833703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni synchronized (rs) { 19933703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_WRAP_LINEAR == null) { 20033703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni Builder b = new Builder(rs); 20133703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMinification(Value.LINEAR); 20233703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMagnification(Value.LINEAR); 20333703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapS(Value.WRAP); 20433703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapT(Value.WRAP); 20533703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni rs.mSampler_WRAP_LINEAR = b.create(); 20633703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 20733703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 2084d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2094d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_LINEAR; 2104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 2129c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 2136b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with mag set to linear, min linear mipmap linear, and 2146b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * wrap modes set to wrap. 215bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 216f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 217bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 218bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 219bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 2204d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_LINEAR_MIP_LINEAR(RenderScript rs) { 22133703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) { 22233703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni synchronized (rs) { 22333703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) { 22433703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni Builder b = new Builder(rs); 22533703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMinification(Value.LINEAR_MIP_LINEAR); 22633703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMagnification(Value.LINEAR); 22733703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapS(Value.WRAP); 22833703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapT(Value.WRAP); 22933703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni rs.mSampler_WRAP_LINEAR_MIP_LINEAR = b.create(); 23033703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 23133703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 2324d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2334d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_LINEAR_MIP_LINEAR; 2344d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2354d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 2366b9b2caf2bf977508e223792bb5eba75091c232dTim Murray /** 2376b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with min and mag set to nearest and wrap modes set to 2386b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * mirrored repeat. 2396b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2406b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @param rs Context to which the sampler will belong. 2416b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2426b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @return Sampler 2436b9b2caf2bf977508e223792bb5eba75091c232dTim Murray */ 2446b9b2caf2bf977508e223792bb5eba75091c232dTim Murray public static Sampler MIRRORED_REPEAT_NEAREST(RenderScript rs) { 24533703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_MIRRORED_REPEAT_NEAREST == null) { 24633703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni synchronized (rs) { 24733703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_MIRRORED_REPEAT_NEAREST == null) { 24833703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni Builder b = new Builder(rs); 24933703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMinification(Value.NEAREST); 25033703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMagnification(Value.NEAREST); 25133703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapS(Value.MIRRORED_REPEAT); 25233703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapT(Value.MIRRORED_REPEAT); 25333703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni rs.mSampler_MIRRORED_REPEAT_NEAREST = b.create(); 25433703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 25533703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 2566b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2576b9b2caf2bf977508e223792bb5eba75091c232dTim Murray return rs.mSampler_MIRRORED_REPEAT_NEAREST; 2586b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2596b9b2caf2bf977508e223792bb5eba75091c232dTim Murray 2606b9b2caf2bf977508e223792bb5eba75091c232dTim Murray /** 2616b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with min and mag set to linear and wrap modes set to 2626b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * mirrored repeat. 2636b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2646b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @param rs Context to which the sampler will belong. 2656b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2666b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @return Sampler 2676b9b2caf2bf977508e223792bb5eba75091c232dTim Murray */ 2686b9b2caf2bf977508e223792bb5eba75091c232dTim Murray public static Sampler MIRRORED_REPEAT_LINEAR(RenderScript rs) { 26933703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_MIRRORED_REPEAT_LINEAR == null) { 27033703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni synchronized (rs) { 27133703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_MIRRORED_REPEAT_LINEAR == null) { 27233703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni Builder b = new Builder(rs); 27333703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMinification(Value.LINEAR); 27433703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMagnification(Value.LINEAR); 27533703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapS(Value.MIRRORED_REPEAT); 27633703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapT(Value.MIRRORED_REPEAT); 27733703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni rs.mSampler_MIRRORED_REPEAT_LINEAR = b.create(); 27833703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 27933703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 2806b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2816b9b2caf2bf977508e223792bb5eba75091c232dTim Murray return rs.mSampler_MIRRORED_REPEAT_LINEAR; 2826b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 2836b9b2caf2bf977508e223792bb5eba75091c232dTim Murray 2846b9b2caf2bf977508e223792bb5eba75091c232dTim Murray /** 2856b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * Retrieve a sampler with min and mag set to linear and wrap modes set to 2866b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * mirrored repeat. 2876b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2886b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @param rs Context to which the sampler will belong. 2896b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * 2906b9b2caf2bf977508e223792bb5eba75091c232dTim Murray * @return Sampler 2916b9b2caf2bf977508e223792bb5eba75091c232dTim Murray */ 2926b9b2caf2bf977508e223792bb5eba75091c232dTim Murray public static Sampler MIRRORED_REPEAT_LINEAR_MIP_LINEAR(RenderScript rs) { 29333703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR == null) { 29433703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni synchronized (rs) { 29533703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni if (rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR == null) { 29633703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni Builder b = new Builder(rs); 29733703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMinification(Value.LINEAR_MIP_LINEAR); 29833703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setMagnification(Value.LINEAR); 29933703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapS(Value.MIRRORED_REPEAT); 30033703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni b.setWrapT(Value.MIRRORED_REPEAT); 30133703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR = b.create(); 30233703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 30333703f0c4e9b16bda5fd72e71d7d89359ee0db17Yang Ni } 3046b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 3056b9b2caf2bf977508e223792bb5eba75091c232dTim Murray return rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR; 3066b9b2caf2bf977508e223792bb5eba75091c232dTim Murray } 3074d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 3089c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 309c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * Builder for creating non-standard samplers. This is only necessary if 310c11e25c4e653124def1fb18e203b894f42106cbeTim Murray * a Sampler with different min and mag modes is desired. 311bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 3120835d42be9b215f845e30db03211c86670cfa12aJason Sams public static class Builder { 3130835d42be9b215f845e30db03211c86670cfa12aJason Sams RenderScript mRS; 3140835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mMin; 3150835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mMag; 3160835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapS; 3170835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapT; 3180835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapR; 319f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk float mAniso; 3200835d42be9b215f845e30db03211c86670cfa12aJason Sams 3210835d42be9b215f845e30db03211c86670cfa12aJason Sams public Builder(RenderScript rs) { 3220835d42be9b215f845e30db03211c86670cfa12aJason Sams mRS = rs; 3230835d42be9b215f845e30db03211c86670cfa12aJason Sams mMin = Value.NEAREST; 3240835d42be9b215f845e30db03211c86670cfa12aJason Sams mMag = Value.NEAREST; 3250835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapS = Value.WRAP; 3260835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapT = Value.WRAP; 3270835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapR = Value.WRAP; 328f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk mAniso = 1.0f; 3290835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3300835d42be9b215f845e30db03211c86670cfa12aJason Sams 331b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setMinification(Value v) { 3328bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.NEAREST || 3338bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams v == Value.LINEAR || 3340857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk v == Value.LINEAR_MIP_LINEAR || 3350857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk v == Value.LINEAR_MIP_NEAREST) { 3368bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mMin = v; 3378bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 3388bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 3398bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 3400835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3410835d42be9b215f845e30db03211c86670cfa12aJason Sams 342b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setMagnification(Value v) { 3438bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.NEAREST || v == Value.LINEAR) { 3448bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mMag = v; 3458bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 3468bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 3478bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 3480835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3490835d42be9b215f845e30db03211c86670cfa12aJason Sams 3500835d42be9b215f845e30db03211c86670cfa12aJason Sams public void setWrapS(Value v) { 3516b9b2caf2bf977508e223792bb5eba75091c232dTim Murray if (v == Value.WRAP || v == Value.CLAMP || v == Value.MIRRORED_REPEAT) { 3528bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mWrapS = v; 3538bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 3548bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 3558bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 3560835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3570835d42be9b215f845e30db03211c86670cfa12aJason Sams 3580835d42be9b215f845e30db03211c86670cfa12aJason Sams public void setWrapT(Value v) { 3596b9b2caf2bf977508e223792bb5eba75091c232dTim Murray if (v == Value.WRAP || v == Value.CLAMP || v == Value.MIRRORED_REPEAT) { 3608bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mWrapT = v; 3618bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 3628bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 3638bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 3640835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3650835d42be9b215f845e30db03211c86670cfa12aJason Sams 366f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk public void setAnisotropy(float v) { 367f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk if(v >= 0.0f) { 368f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk mAniso = v; 369f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } else { 370f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk throw new IllegalArgumentException("Invalid value"); 371f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } 372f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } 373f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk 3740835d42be9b215f845e30db03211c86670cfa12aJason Sams public Sampler create() { 375771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 3760e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat long id = mRS.nSamplerCreate(mMag.mID, mMin.mID, 3777d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mWrapS.mID, mWrapT.mID, mWrapR.mID, mAniso); 3787d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Sampler sampler = new Sampler(id, mRS); 3797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mMin = mMin; 3807d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mMag = mMag; 3817d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapS = mWrapS; 3827d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapT = mWrapT; 3837d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapR = mWrapR; 3847d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mAniso = mAniso; 3857d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return sampler; 3860835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3870835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3880835d42be9b215f845e30db03211c86670cfa12aJason Sams 3890835d42be9b215f845e30db03211c86670cfa12aJason Sams} 3900835d42be9b215f845e30db03211c86670cfa12aJason Sams 391