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 300835d42be9b215f845e30db03211c86670cfa12aJason Sams/** 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 61bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams /** 627d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @hide 637d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return minification setting for the sampler 647d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 657d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getMinification() { 667d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mMin; 677d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 687d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 697d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk /** 707d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @hide 717d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return magnification setting for the sampler 727d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 737d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getMagnification() { 747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mMag; 757d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 767d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 777d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk /** 787d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @hide 797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return S wrapping mode for the sampler 807d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 817d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getWrapS() { 827d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mWrapS; 837d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 847d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 857d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk /** 867d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @hide 877d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return T wrapping mode for the sampler 887d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 897d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public Value getWrapT() { 907d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mWrapT; 917d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 927d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 937d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk /** 947d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @hide 957d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk * @return anisotropy setting for the sampler 967d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk */ 977d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk public float getAnisotropy() { 987d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return mAniso; 997d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk } 1007d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk 1017d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk /** 102bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to nearest and wrap modes set to 103bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * clamp. 104bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 105f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 106bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 107bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 108bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1094d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_NEAREST(RenderScript rs) { 1104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_CLAMP_NEAREST == null) { 1114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 112b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.NEAREST); 113b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.NEAREST); 1144d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.CLAMP); 1154d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.CLAMP); 1164d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_CLAMP_NEAREST = b.create(); 1174d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1184d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_NEAREST; 1194d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1204d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 121bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams /** 122bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to linear and wrap modes set to 123bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * clamp. 124bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 125f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 126bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 127bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 128bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1294d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_LINEAR(RenderScript rs) { 1304d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_CLAMP_LINEAR == null) { 1314d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 132b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR); 133b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 1344d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.CLAMP); 1354d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.CLAMP); 1364d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_CLAMP_LINEAR = b.create(); 1374d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1384d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_LINEAR; 1394d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1404d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 141bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams /** 142bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with ag set to linear, min linear mipmap linear, and 143bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * to and wrap modes set to clamp. 144bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 145f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 146bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 147bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 148bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1494d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler CLAMP_LINEAR_MIP_LINEAR(RenderScript rs) { 1504d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) { 1514d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 152b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR_MIP_LINEAR); 153b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 1544d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.CLAMP); 1554d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.CLAMP); 1564d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_CLAMP_LINEAR_MIP_LINEAR = b.create(); 1574d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1584d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_CLAMP_LINEAR_MIP_LINEAR; 1594d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1604d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 161bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams /** 162bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to nearest and wrap modes set to 163bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * wrap. 164bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 165f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 166bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 167bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 168bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1694d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_NEAREST(RenderScript rs) { 1704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_WRAP_NEAREST == null) { 1714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 172b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.NEAREST); 173b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.NEAREST); 1744d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.WRAP); 1754d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.WRAP); 1764d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_WRAP_NEAREST = b.create(); 1774d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1784d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_NEAREST; 1794d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1804d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 181bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams /** 182bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with min and mag set to nearest and wrap modes set to 183bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * wrap. 184bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 185f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 186bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 187bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 188bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 1894d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_LINEAR(RenderScript rs) { 1904d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_WRAP_LINEAR == null) { 1914d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 192b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR); 193b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 1944d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.WRAP); 1954d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.WRAP); 1964d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_WRAP_LINEAR = b.create(); 1974d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 1984d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_LINEAR; 1994d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2004d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 201bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams /** 202bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Retrieve a sampler with ag set to linear, min linear mipmap linear, and 203bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * to and wrap modes set to wrap. 204bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 205f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk * @param rs Context to which the sampler will belong. 206bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 207bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * @return Sampler 208bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 2094d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams public static Sampler WRAP_LINEAR_MIP_LINEAR(RenderScript rs) { 2104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams if(rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) { 2114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams Builder b = new Builder(rs); 212b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMinification(Value.LINEAR_MIP_LINEAR); 213b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk b.setMagnification(Value.LINEAR); 2144d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapS(Value.WRAP); 2154d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams b.setWrapT(Value.WRAP); 2164d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams rs.mSampler_WRAP_LINEAR_MIP_LINEAR = b.create(); 2174d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2184d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams return rs.mSampler_WRAP_LINEAR_MIP_LINEAR; 2194d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams } 2204d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 2214d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams 222bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams /** 223bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * Builder for creating non-standard samplers. Usefull if mix and match of 224bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * wrap modes is necesary or if anisotropic filtering is desired. 225bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams * 226bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams */ 2270835d42be9b215f845e30db03211c86670cfa12aJason Sams public static class Builder { 2280835d42be9b215f845e30db03211c86670cfa12aJason Sams RenderScript mRS; 2290835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mMin; 2300835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mMag; 2310835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapS; 2320835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapT; 2330835d42be9b215f845e30db03211c86670cfa12aJason Sams Value mWrapR; 234f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk float mAniso; 2350835d42be9b215f845e30db03211c86670cfa12aJason Sams 2360835d42be9b215f845e30db03211c86670cfa12aJason Sams public Builder(RenderScript rs) { 2370835d42be9b215f845e30db03211c86670cfa12aJason Sams mRS = rs; 2380835d42be9b215f845e30db03211c86670cfa12aJason Sams mMin = Value.NEAREST; 2390835d42be9b215f845e30db03211c86670cfa12aJason Sams mMag = Value.NEAREST; 2400835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapS = Value.WRAP; 2410835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapT = Value.WRAP; 2420835d42be9b215f845e30db03211c86670cfa12aJason Sams mWrapR = Value.WRAP; 243f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk mAniso = 1.0f; 2440835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2450835d42be9b215f845e30db03211c86670cfa12aJason Sams 246b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setMinification(Value v) { 2478bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.NEAREST || 2488bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams v == Value.LINEAR || 2490857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk v == Value.LINEAR_MIP_LINEAR || 2500857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk v == Value.LINEAR_MIP_NEAREST) { 2518bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mMin = v; 2528bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 2538bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 2548bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 2550835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2560835d42be9b215f845e30db03211c86670cfa12aJason Sams 257b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk public void setMagnification(Value v) { 2588bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.NEAREST || v == Value.LINEAR) { 2598bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mMag = v; 2608bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 2618bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 2628bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 2630835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2640835d42be9b215f845e30db03211c86670cfa12aJason Sams 2650835d42be9b215f845e30db03211c86670cfa12aJason Sams public void setWrapS(Value v) { 2668bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.WRAP || v == Value.CLAMP) { 2678bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mWrapS = v; 2688bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 2698bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 2708bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 2710835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2720835d42be9b215f845e30db03211c86670cfa12aJason Sams 2730835d42be9b215f845e30db03211c86670cfa12aJason Sams public void setWrapT(Value v) { 2748bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams if (v == Value.WRAP || v == Value.CLAMP) { 2758bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams mWrapT = v; 2768bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } else { 2778bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams throw new IllegalArgumentException("Invalid value"); 2788bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams } 2790835d42be9b215f845e30db03211c86670cfa12aJason Sams } 2800835d42be9b215f845e30db03211c86670cfa12aJason Sams 281f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk public void setAnisotropy(float v) { 282f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk if(v >= 0.0f) { 283f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk mAniso = v; 284f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } else { 285f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk throw new IllegalArgumentException("Invalid value"); 286f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } 287f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk } 288f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk 2890835d42be9b215f845e30db03211c86670cfa12aJason Sams public Sampler create() { 290771bebb94054d06f97284379c93a2620613513c3Jason Sams mRS.validate(); 2917d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk int id = mRS.nSamplerCreate(mMag.mID, mMin.mID, 2927d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk mWrapS.mID, mWrapT.mID, mWrapR.mID, mAniso); 2937d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk Sampler sampler = new Sampler(id, mRS); 2947d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mMin = mMin; 2957d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mMag = mMag; 2967d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapS = mWrapS; 2977d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapT = mWrapT; 2987d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mWrapR = mWrapR; 2997d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk sampler.mAniso = mAniso; 3007d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk return sampler; 3010835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3020835d42be9b215f845e30db03211c86670cfa12aJason Sams } 3030835d42be9b215f845e30db03211c86670cfa12aJason Sams 3040835d42be9b215f845e30db03211c86670cfa12aJason Sams} 3050835d42be9b215f845e30db03211c86670cfa12aJason Sams 306