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);
540835d42be9b215f845e30db03211c86670cfa12aJason Sams    }
550835d42be9b215f845e30db03211c86670cfa12aJason Sams
569c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
577d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     * @return minification setting for the sampler
587d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     */
597d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    public Value getMinification() {
607d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mMin;
617d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
627d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
639c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
647d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     * @return magnification setting for the sampler
657d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     */
667d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    public Value getMagnification() {
677d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mMag;
687d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
697d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
709c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
717d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     * @return S wrapping mode for the sampler
727d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     */
737d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    public Value getWrapS() {
747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mWrapS;
757d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
767d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
779c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
787d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     * @return T wrapping mode for the sampler
797d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     */
807d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    public Value getWrapT() {
817d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mWrapT;
827d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
837d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
849c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
857d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     * @return anisotropy setting for the sampler
867d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk     */
877d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    public float getAnisotropy() {
887d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mAniso;
897d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
907d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
919c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
92bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Retrieve a sampler with min and mag set to nearest and wrap modes set to
93bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * clamp.
94bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
95f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk     * @param rs Context to which the sampler will belong.
96bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
97bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return Sampler
98bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
994d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public static Sampler CLAMP_NEAREST(RenderScript rs) {
1004d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if(rs.mSampler_CLAMP_NEAREST == null) {
1014d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            Builder b = new Builder(rs);
102b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMinification(Value.NEAREST);
103b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMagnification(Value.NEAREST);
1044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapS(Value.CLAMP);
1054d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapT(Value.CLAMP);
1064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            rs.mSampler_CLAMP_NEAREST = b.create();
1074d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
1084d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        return rs.mSampler_CLAMP_NEAREST;
1094d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
1104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1119c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
112bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Retrieve a sampler with min and mag set to linear and wrap modes set to
113bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * clamp.
114bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
115f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk     * @param rs Context to which the sampler will belong.
116bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
117bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return Sampler
118bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1194d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public static Sampler CLAMP_LINEAR(RenderScript rs) {
1204d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if(rs.mSampler_CLAMP_LINEAR == null) {
1214d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            Builder b = new Builder(rs);
122b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMinification(Value.LINEAR);
123b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMagnification(Value.LINEAR);
1244d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapS(Value.CLAMP);
1254d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapT(Value.CLAMP);
1264d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            rs.mSampler_CLAMP_LINEAR = b.create();
1274d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
1284d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        return rs.mSampler_CLAMP_LINEAR;
1294d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
1304d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1319c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1326b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * Retrieve a sampler with mag set to linear, min linear mipmap linear, and
1336b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * wrap modes set to clamp.
134bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
135f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk     * @param rs Context to which the sampler will belong.
136bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
137bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return Sampler
138bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1394d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public static Sampler CLAMP_LINEAR_MIP_LINEAR(RenderScript rs) {
1404d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if(rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) {
1414d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            Builder b = new Builder(rs);
142b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMinification(Value.LINEAR_MIP_LINEAR);
143b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMagnification(Value.LINEAR);
1444d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapS(Value.CLAMP);
1454d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapT(Value.CLAMP);
1464d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            rs.mSampler_CLAMP_LINEAR_MIP_LINEAR = b.create();
1474d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
1484d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        return rs.mSampler_CLAMP_LINEAR_MIP_LINEAR;
1494d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
1504d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1519c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
152bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Retrieve a sampler with min and mag set to nearest and wrap modes set to
153bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * wrap.
154bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
155f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk     * @param rs Context to which the sampler will belong.
156bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
157bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return Sampler
158bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1594d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public static Sampler WRAP_NEAREST(RenderScript rs) {
1604d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if(rs.mSampler_WRAP_NEAREST == null) {
1614d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            Builder b = new Builder(rs);
162b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMinification(Value.NEAREST);
163b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMagnification(Value.NEAREST);
1644d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapS(Value.WRAP);
1654d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapT(Value.WRAP);
1664d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            rs.mSampler_WRAP_NEAREST = b.create();
1674d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
1684d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        return rs.mSampler_WRAP_NEAREST;
1694d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
1704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1719c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1726b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * Retrieve a sampler with min and mag set to linear and wrap modes set to
173bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * wrap.
174bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
175f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk     * @param rs Context to which the sampler will belong.
176bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
177bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return Sampler
178bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1794d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public static Sampler WRAP_LINEAR(RenderScript rs) {
1804d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if(rs.mSampler_WRAP_LINEAR == null) {
1814d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            Builder b = new Builder(rs);
182b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMinification(Value.LINEAR);
183b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMagnification(Value.LINEAR);
1844d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapS(Value.WRAP);
1854d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapT(Value.WRAP);
1864d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            rs.mSampler_WRAP_LINEAR = b.create();
1874d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
1884d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        return rs.mSampler_WRAP_LINEAR;
1894d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
1904d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1919c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1926b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * Retrieve a sampler with mag set to linear, min linear mipmap linear, and
1936b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * wrap modes set to wrap.
194bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
195f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk     * @param rs Context to which the sampler will belong.
196bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
197bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return Sampler
198bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1994d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public static Sampler WRAP_LINEAR_MIP_LINEAR(RenderScript rs) {
2004d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if(rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) {
2014d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            Builder b = new Builder(rs);
202b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMinification(Value.LINEAR_MIP_LINEAR);
203b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMagnification(Value.LINEAR);
2044d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapS(Value.WRAP);
2054d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapT(Value.WRAP);
2064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            rs.mSampler_WRAP_LINEAR_MIP_LINEAR = b.create();
2074d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
2084d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        return rs.mSampler_WRAP_LINEAR_MIP_LINEAR;
2094d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
2104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
2116b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    /**
2126b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * Retrieve a sampler with min and mag set to nearest and wrap modes set to
2136b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * mirrored repeat.
2146b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     *
2156b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * @param rs Context to which the sampler will belong.
2166b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     *
2176b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * @return Sampler
2186b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     */
2196b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    public static Sampler MIRRORED_REPEAT_NEAREST(RenderScript rs) {
2206b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        if(rs.mSampler_MIRRORED_REPEAT_NEAREST == null) {
2216b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            Builder b = new Builder(rs);
2226b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setMinification(Value.NEAREST);
2236b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setMagnification(Value.NEAREST);
2246b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setWrapS(Value.MIRRORED_REPEAT);
2256b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setWrapT(Value.MIRRORED_REPEAT);
2266b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            rs.mSampler_MIRRORED_REPEAT_NEAREST = b.create();
2276b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        }
2286b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        return rs.mSampler_MIRRORED_REPEAT_NEAREST;
2296b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    }
2306b9b2caf2bf977508e223792bb5eba75091c232dTim Murray
2316b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    /**
2326b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * Retrieve a sampler with min and mag set to linear and wrap modes set to
2336b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * mirrored repeat.
2346b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     *
2356b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * @param rs Context to which the sampler will belong.
2366b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     *
2376b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * @return Sampler
2386b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     */
2396b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    public static Sampler MIRRORED_REPEAT_LINEAR(RenderScript rs) {
2406b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        if(rs.mSampler_MIRRORED_REPEAT_LINEAR == null) {
2416b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            Builder b = new Builder(rs);
2426b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setMinification(Value.LINEAR);
2436b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setMagnification(Value.LINEAR);
2446b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setWrapS(Value.MIRRORED_REPEAT);
2456b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setWrapT(Value.MIRRORED_REPEAT);
2466b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            rs.mSampler_MIRRORED_REPEAT_LINEAR = b.create();
2476b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        }
2486b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        return rs.mSampler_MIRRORED_REPEAT_LINEAR;
2496b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    }
2506b9b2caf2bf977508e223792bb5eba75091c232dTim Murray
2516b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    /**
2526b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * Retrieve a sampler with min and mag set to linear and wrap modes set to
2536b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * mirrored repeat.
2546b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     *
2556b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * @param rs Context to which the sampler will belong.
2566b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     *
2576b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * @return Sampler
2586b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     */
2596b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    public static Sampler MIRRORED_REPEAT_LINEAR_MIP_LINEAR(RenderScript rs) {
2606b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        if(rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR == null) {
2616b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            Builder b = new Builder(rs);
2626b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setMinification(Value.LINEAR_MIP_LINEAR);
2636b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setMagnification(Value.LINEAR);
2646b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setWrapS(Value.MIRRORED_REPEAT);
2656b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setWrapT(Value.MIRRORED_REPEAT);
2666b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR = b.create();
2676b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        }
2686b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        return rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
2696b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    }
2704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
2719c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
272c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * Builder for creating non-standard samplers.  This is only necessary if
273c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * a Sampler with different min and mag modes is desired.
274bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
2750835d42be9b215f845e30db03211c86670cfa12aJason Sams    public static class Builder {
2760835d42be9b215f845e30db03211c86670cfa12aJason Sams        RenderScript mRS;
2770835d42be9b215f845e30db03211c86670cfa12aJason Sams        Value mMin;
2780835d42be9b215f845e30db03211c86670cfa12aJason Sams        Value mMag;
2790835d42be9b215f845e30db03211c86670cfa12aJason Sams        Value mWrapS;
2800835d42be9b215f845e30db03211c86670cfa12aJason Sams        Value mWrapT;
2810835d42be9b215f845e30db03211c86670cfa12aJason Sams        Value mWrapR;
282f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk        float mAniso;
2830835d42be9b215f845e30db03211c86670cfa12aJason Sams
2840835d42be9b215f845e30db03211c86670cfa12aJason Sams        public Builder(RenderScript rs) {
2850835d42be9b215f845e30db03211c86670cfa12aJason Sams            mRS = rs;
2860835d42be9b215f845e30db03211c86670cfa12aJason Sams            mMin = Value.NEAREST;
2870835d42be9b215f845e30db03211c86670cfa12aJason Sams            mMag = Value.NEAREST;
2880835d42be9b215f845e30db03211c86670cfa12aJason Sams            mWrapS = Value.WRAP;
2890835d42be9b215f845e30db03211c86670cfa12aJason Sams            mWrapT = Value.WRAP;
2900835d42be9b215f845e30db03211c86670cfa12aJason Sams            mWrapR = Value.WRAP;
291f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk            mAniso = 1.0f;
2920835d42be9b215f845e30db03211c86670cfa12aJason Sams        }
2930835d42be9b215f845e30db03211c86670cfa12aJason Sams
294b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        public void setMinification(Value v) {
2958bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            if (v == Value.NEAREST ||
2968bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                v == Value.LINEAR ||
2970857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk                v == Value.LINEAR_MIP_LINEAR ||
2980857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk                v == Value.LINEAR_MIP_NEAREST) {
2998bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                mMin = v;
3008bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            } else {
3018bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                throw new IllegalArgumentException("Invalid value");
3028bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            }
3030835d42be9b215f845e30db03211c86670cfa12aJason Sams        }
3040835d42be9b215f845e30db03211c86670cfa12aJason Sams
305b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        public void setMagnification(Value v) {
3068bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            if (v == Value.NEAREST || v == Value.LINEAR) {
3078bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                mMag = v;
3088bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            } else {
3098bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                throw new IllegalArgumentException("Invalid value");
3108bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            }
3110835d42be9b215f845e30db03211c86670cfa12aJason Sams        }
3120835d42be9b215f845e30db03211c86670cfa12aJason Sams
3130835d42be9b215f845e30db03211c86670cfa12aJason Sams        public void setWrapS(Value v) {
3146b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            if (v == Value.WRAP || v == Value.CLAMP || v == Value.MIRRORED_REPEAT) {
3158bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                mWrapS = v;
3168bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            } else {
3178bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                throw new IllegalArgumentException("Invalid value");
3188bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            }
3190835d42be9b215f845e30db03211c86670cfa12aJason Sams        }
3200835d42be9b215f845e30db03211c86670cfa12aJason Sams
3210835d42be9b215f845e30db03211c86670cfa12aJason Sams        public void setWrapT(Value v) {
3226b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            if (v == Value.WRAP || v == Value.CLAMP || v == Value.MIRRORED_REPEAT) {
3238bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                mWrapT = v;
3248bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            } else {
3258bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                throw new IllegalArgumentException("Invalid value");
3268bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            }
3270835d42be9b215f845e30db03211c86670cfa12aJason Sams        }
3280835d42be9b215f845e30db03211c86670cfa12aJason Sams
329f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk        public void setAnisotropy(float v) {
330f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk            if(v >= 0.0f) {
331f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk                mAniso = v;
332f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk            } else {
333f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk                throw new IllegalArgumentException("Invalid value");
334f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk            }
335f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk        }
336f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk
3370835d42be9b215f845e30db03211c86670cfa12aJason Sams        public Sampler create() {
338771bebb94054d06f97284379c93a2620613513c3Jason Sams            mRS.validate();
3390e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat            long id = mRS.nSamplerCreate(mMag.mID, mMin.mID,
3407d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                                        mWrapS.mID, mWrapT.mID, mWrapR.mID, mAniso);
3417d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            Sampler sampler = new Sampler(id, mRS);
3427d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            sampler.mMin = mMin;
3437d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            sampler.mMag = mMag;
3447d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            sampler.mWrapS = mWrapS;
3457d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            sampler.mWrapT = mWrapT;
3467d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            sampler.mWrapR = mWrapR;
3477d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            sampler.mAniso = mAniso;
3487d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            return sampler;
3490835d42be9b215f845e30db03211c86670cfa12aJason Sams        }
3500835d42be9b215f845e30db03211c86670cfa12aJason Sams    }
3510835d42be9b215f845e30db03211c86670cfa12aJason Sams
3520835d42be9b215f845e30db03211c86670cfa12aJason Sams}
3530835d42be9b215f845e30db03211c86670cfa12aJason Sams
354