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) { 1016bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_CLAMP_NEAREST == null) { 1026bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 1036bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_CLAMP_NEAREST == null) { 1046bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni Builder b = new Builder(rs); 1056bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMinification(Value.NEAREST); 1066bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMagnification(Value.NEAREST); 1076bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapS(Value.CLAMP); 1086bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapT(Value.CLAMP); 1096bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mSampler_CLAMP_NEAREST = b.create(); 1106bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 1116bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang 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) { 1256bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_CLAMP_LINEAR == null) { 1266bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 1276bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_CLAMP_LINEAR == null) { 1286bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni Builder b = new Builder(rs); 1296bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMinification(Value.LINEAR); 1306bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMagnification(Value.LINEAR); 1316bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapS(Value.CLAMP); 1326bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapT(Value.CLAMP); 1336bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mSampler_CLAMP_LINEAR = b.create(); 1346bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 1356bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang 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) { 1496bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) { 1506bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 1516bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) { 1526bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni Builder b = new Builder(rs); 1536bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMinification(Value.LINEAR_MIP_LINEAR); 1546bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMagnification(Value.LINEAR); 1556bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapS(Value.CLAMP); 1566bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapT(Value.CLAMP); 1576bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mSampler_CLAMP_LINEAR_MIP_LINEAR = b.create(); 1586bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 1596bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang 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) { 1736bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_WRAP_NEAREST == null) { 1746bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 1756bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_WRAP_NEAREST == null) { 1766bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni Builder b = new Builder(rs); 1776bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMinification(Value.NEAREST); 1786bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMagnification(Value.NEAREST); 1796bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapS(Value.WRAP); 1806bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapT(Value.WRAP); 1816bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mSampler_WRAP_NEAREST = b.create(); 1826bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 1836bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang 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) { 1976bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_WRAP_LINEAR == null) { 1986bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 1996bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_WRAP_LINEAR == null) { 2006bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni Builder b = new Builder(rs); 2016bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMinification(Value.LINEAR); 2026bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMagnification(Value.LINEAR); 2036bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapS(Value.WRAP); 2046bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapT(Value.WRAP); 2056bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mSampler_WRAP_LINEAR = b.create(); 2066bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 2076bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang 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) { 2216bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) { 2226bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 2236bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) { 2246bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni Builder b = new Builder(rs); 2256bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMinification(Value.LINEAR_MIP_LINEAR); 2266bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMagnification(Value.LINEAR); 2276bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapS(Value.WRAP); 2286bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapT(Value.WRAP); 2296bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mSampler_WRAP_LINEAR_MIP_LINEAR = b.create(); 2306bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 2316bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang 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) { 2456bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_MIRRORED_REPEAT_NEAREST == null) { 2466bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 2476bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_MIRRORED_REPEAT_NEAREST == null) { 2486bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni Builder b = new Builder(rs); 2496bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMinification(Value.NEAREST); 2506bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMagnification(Value.NEAREST); 2516bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapS(Value.MIRRORED_REPEAT); 2526bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapT(Value.MIRRORED_REPEAT); 2536bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mSampler_MIRRORED_REPEAT_NEAREST = b.create(); 2546bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 2556bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang 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) { 2696bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_MIRRORED_REPEAT_LINEAR == null) { 2706bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 2716bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_MIRRORED_REPEAT_LINEAR == null) { 2726bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni Builder b = new Builder(rs); 2736bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMinification(Value.LINEAR); 2746bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMagnification(Value.LINEAR); 2756bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapS(Value.MIRRORED_REPEAT); 2766bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapT(Value.MIRRORED_REPEAT); 2776bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mSampler_MIRRORED_REPEAT_LINEAR = b.create(); 2786bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 2796bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang 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) { 2936bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR == null) { 2946bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni synchronized (rs) { 2956bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni if (rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR == null) { 2966bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni Builder b = new Builder(rs); 2976bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMinification(Value.LINEAR_MIP_LINEAR); 2986bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setMagnification(Value.LINEAR); 2996bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapS(Value.MIRRORED_REPEAT); 3006bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni b.setWrapT(Value.MIRRORED_REPEAT); 3016bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR = b.create(); 3026bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang Ni } 3036bdfe0fc5c0845f91cf3ccad961d270ed2a49aa1Yang 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