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/** 3111518acc8c416023d8c2192b441a1767205676d9Robert Ly * Sampler object which defines how data is extracted from textures. Samplers 3211518acc8c416023d8c2192b441a1767205676d9Robert Ly * are attached to Program objects (currently only ProgramFragment) when those objects 33bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * need to access texture data. 340835d42be9b215f845e30db03211c86670cfa12aJason Sams **/ 350835d42be9b215f845e30db03211c86670cfa12aJason Samspublic class Sampler extends BaseObj { 360835d42be9b215f845e30db03211c86670cfa12aJason Sams public enum Value { 370835d42be9b215f845e30db03211c86670cfa12aJason Sams NEAREST (0), 380835d42be9b215f845e30db03211c86670cfa12aJason Sams LINEAR (1), 390835d42be9b215f845e30db03211c86670cfa12aJason Sams LINEAR_MIP_LINEAR (2), 400857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk LINEAR_MIP_NEAREST (5), 410835d42be9b215f845e30db03211c86670cfa12aJason Sams WRAP (3), 420835d42be9b215f845e30db03211c86670cfa12aJason Sams CLAMP (4); 430835d42be9b215f845e30db03211c86670cfa12aJason Sams 440835d42be9b215f845e30db03211c86670cfa12aJason Sams int mID; 450835d42be9b215f845e30db03211c86670cfa12aJason Sams Value(int id) { 460835d42be9b215f845e30db03211c86670cfa12aJason Sams mID = id; 470835d42be9b215f845e30db03211c86670cfa12aJason Sams } 480835d42be9b215f845e30db03211c86670cfa12aJason Sams } 490835d42be9b215f845e30db03211c86670cfa12aJason Sams 507d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mMin; 517d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mMag; 527d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mWrapS; 537d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mWrapT; 547d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Value mWrapR; 557d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk float mAniso; 567d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 570835d42be9b215f845e30db03211c86670cfa12aJason Sams Sampler(int id, RenderScript rs) { 580de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk super(id, rs); 590835d42be9b215f845e30db03211c86670cfa12aJason Sams } 600835d42be9b215f845e30db03211c86670cfa12aJason Sams 619c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 627d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return minification setting for the sampler 637d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 647d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getMinification() { 657d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mMin; 667d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 677d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 689c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 697d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return magnification setting for the sampler 707d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 717d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getMagnification() { 727d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mMag; 737d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 759c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 767d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return S wrapping mode for the sampler 777d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 787d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getWrapS() { 797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mWrapS; 807d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 817d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 829c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 837d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return T wrapping mode for the sampler 847d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 857d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getWrapT() { 867d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mWrapT; 877d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 887d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 899c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 907d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return anisotropy setting for the sampler 917d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 927d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public float getAnisotropy() { 937d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mAniso; 947d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 957d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 969c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 97bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to nearest and wrap modes set to 98bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * clamp. 99bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 100f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 101bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 102bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 103bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_NEAREST(RenderScript rs) { 1054d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_CLAMP_NEAREST == null) { 1064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 107b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.NEAREST); 108b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.NEAREST); 1094d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.CLAMP); 1104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.CLAMP); 1114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_CLAMP_NEAREST = b.create(); 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) { 1254d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_CLAMP_LINEAR == null) { 1264d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 127b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR); 128b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 1294d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.CLAMP); 1304d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.CLAMP); 1314d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_CLAMP_LINEAR = b.create(); 1324d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1334d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_LINEAR; 1344d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1354d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1369c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 137bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with ag set to linear, min linear mipmap linear, and 138bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * to and wrap modes set to clamp. 139bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 140f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 141bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 142bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 143bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1444d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_LINEAR_MIP_LINEAR(RenderScript rs) { 1454d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) { 1464d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 147b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR_MIP_LINEAR); 148b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 1494d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.CLAMP); 1504d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.CLAMP); 1514d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_CLAMP_LINEAR_MIP_LINEAR = b.create(); 1524d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1534d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_LINEAR_MIP_LINEAR; 1544d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1554d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1569c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 157bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to nearest and wrap modes set to 158bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * wrap. 159bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 160f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 161bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 162bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 163bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1644d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_NEAREST(RenderScript rs) { 1654d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_WRAP_NEAREST == null) { 1664d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 167b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.NEAREST); 168b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.NEAREST); 1694d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.WRAP); 1704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.WRAP); 1714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_WRAP_NEAREST = b.create(); 1724d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1734d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_NEAREST; 1744d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1754d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1769c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 177bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to nearest and wrap modes set to 178bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * wrap. 179bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 180f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 181bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 182bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 183bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1844d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_LINEAR(RenderScript rs) { 1854d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_WRAP_LINEAR == null) { 1864d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 187b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR); 188b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 1894d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.WRAP); 1904d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.WRAP); 1914d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_WRAP_LINEAR = b.create(); 1924d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1934d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_LINEAR; 1944d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1954d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 1969c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 197bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with ag set to linear, min linear mipmap linear, and 198bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * to and wrap modes set to wrap. 199bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 200f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 201bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 202bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 203bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 2044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_LINEAR_MIP_LINEAR(RenderScript rs) { 2054d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) { 2064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 207b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR_MIP_LINEAR); 208b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 2094d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.WRAP); 2104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.WRAP); 2114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_WRAP_LINEAR_MIP_LINEAR = b.create(); 2124d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2134d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_LINEAR_MIP_LINEAR; 2144d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2154d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 2164d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 2179c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines /** 218bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Builder for creating non-standard samplers. Usefull if mix and match of 219bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * wrap modes is necesary or if anisotropic filtering is desired. 220bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 221bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 2220835d42be9b215f845e30db03211c86670cfa12aJason Sams public static class Builder { 2230835d42be9b215f845e30db03211c86670cfa12aJason Sams RenderScript mRS; 2240835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mMin; 2250835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mMag; 2260835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapS; 2270835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapT; 2280835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapR; 229f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk float mAniso; 2300835d42be9b215f845e30db03211c86670cfa12aJason Sams 2310835d42be9b215f845e30db03211c86670cfa12aJason Sams public Builder(RenderScript rs) { 2320835d42be9b215f845e30db03211c86670cfa12aJason Sams mRS = rs; 2330835d42be9b215f845e30db03211c86670cfa12aJason Sams mMin = Value.NEAREST; 2340835d42be9b215f845e30db03211c86670cfa12aJason Sams mMag = Value.NEAREST; 2350835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapS = Value.WRAP; 2360835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapT = Value.WRAP; 2370835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapR = Value.WRAP; 238f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk mAniso = 1.0f; 2390835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2400835d42be9b215f845e30db03211c86670cfa12aJason Sams 241b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setMinification(Value v) { 2428bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.NEAREST || 2438bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams v == Value.LINEAR || 2440857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk v == Value.LINEAR_MIP_LINEAR || 2450857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk v == Value.LINEAR_MIP_NEAREST) { 2468bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mMin = v; 2478bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 2488bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 2498bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 2500835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2510835d42be9b215f845e30db03211c86670cfa12aJason Sams 252b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setMagnification(Value v) { 2538bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.NEAREST || v == Value.LINEAR) { 2548bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mMag = v; 2558bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 2568bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 2578bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 2580835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2590835d42be9b215f845e30db03211c86670cfa12aJason Sams 2600835d42be9b215f845e30db03211c86670cfa12aJason Sams public void setWrapS(Value v) { 2618bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.WRAP || v == Value.CLAMP) { 2628bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mWrapS = v; 2638bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 2648bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 2658bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 2660835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2670835d42be9b215f845e30db03211c86670cfa12aJason Sams 2680835d42be9b215f845e30db03211c86670cfa12aJason Sams public void setWrapT(Value v) { 2698bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.WRAP || v == Value.CLAMP) { 2708bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mWrapT = v; 2718bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 2728bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 2738bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 2740835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2750835d42be9b215f845e30db03211c86670cfa12aJason Sams 276f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk public void setAnisotropy(float v) { 277f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk if(v >= 0.0f) { 278f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk mAniso = v; 279f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } else { 280f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk throw new IllegalArgumentException("Invalid value"); 281f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } 282f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } 283f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk 2840835d42be9b215f845e30db03211c86670cfa12aJason Sams public Sampler create() { 285771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 286918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk int id = mRS.nSamplerCreate(mMag.mID, mMin.mID, 2877d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mWrapS.mID, mWrapT.mID, mWrapR.mID, mAniso); 2887d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Sampler sampler = new Sampler(id, mRS); 2897d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mMin = mMin; 2907d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mMag = mMag; 2917d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapS = mWrapS; 2927d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapT = mWrapT; 2937d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapR = mWrapR; 2947d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mAniso = mAniso; 2957d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return sampler; 2960835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2970835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2980835d42be9b215f845e30db03211c86670cfa12aJason Sams 2990835d42be9b215f845e30db03211c86670cfa12aJason Sams} 3000835d42be9b215f845e30db03211c86670cfa12aJason Sams 301