Sampler.java revision eb4dd08ec132f83745b8b28fa7da58eb4478b5b9
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) {
1014d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if(rs.mSampler_CLAMP_NEAREST == null) {
1024d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            Builder b = new Builder(rs);
103b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMinification(Value.NEAREST);
104b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMagnification(Value.NEAREST);
1054d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapS(Value.CLAMP);
1064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapT(Value.CLAMP);
1074d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            rs.mSampler_CLAMP_NEAREST = b.create();
1084d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
1094d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        return rs.mSampler_CLAMP_NEAREST;
1104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
1114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1129c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
113bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Retrieve a sampler with min and mag set to linear and wrap modes set to
114bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * clamp.
115bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
116f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk     * @param rs Context to which the sampler will belong.
117bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
118bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return Sampler
119bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1204d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public static Sampler CLAMP_LINEAR(RenderScript rs) {
1214d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if(rs.mSampler_CLAMP_LINEAR == null) {
1224d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            Builder b = new Builder(rs);
123b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMinification(Value.LINEAR);
124b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMagnification(Value.LINEAR);
1254d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapS(Value.CLAMP);
1264d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapT(Value.CLAMP);
1274d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            rs.mSampler_CLAMP_LINEAR = b.create();
1284d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
1294d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        return rs.mSampler_CLAMP_LINEAR;
1304d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
1314d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1329c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1336b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * Retrieve a sampler with mag set to linear, min linear mipmap linear, and
1346b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * wrap modes set to clamp.
135bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
136f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk     * @param rs Context to which the sampler will belong.
137bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
138bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return Sampler
139bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1404d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public static Sampler CLAMP_LINEAR_MIP_LINEAR(RenderScript rs) {
1414d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if(rs.mSampler_CLAMP_LINEAR_MIP_LINEAR == null) {
1424d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            Builder b = new Builder(rs);
143b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMinification(Value.LINEAR_MIP_LINEAR);
144b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMagnification(Value.LINEAR);
1454d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapS(Value.CLAMP);
1464d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapT(Value.CLAMP);
1474d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            rs.mSampler_CLAMP_LINEAR_MIP_LINEAR = b.create();
1484d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
1494d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        return rs.mSampler_CLAMP_LINEAR_MIP_LINEAR;
1504d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
1514d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1529c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
153bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * Retrieve a sampler with min and mag set to nearest and wrap modes set to
154bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * wrap.
155bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
156f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk     * @param rs Context to which the sampler will belong.
157bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
158bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return Sampler
159bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1604d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public static Sampler WRAP_NEAREST(RenderScript rs) {
1614d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if(rs.mSampler_WRAP_NEAREST == null) {
1624d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            Builder b = new Builder(rs);
163b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMinification(Value.NEAREST);
164b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMagnification(Value.NEAREST);
1654d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapS(Value.WRAP);
1664d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapT(Value.WRAP);
1674d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            rs.mSampler_WRAP_NEAREST = b.create();
1684d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
1694d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        return rs.mSampler_WRAP_NEAREST;
1704d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
1714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1729c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1736b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * Retrieve a sampler with min and mag set to linear and wrap modes set to
174bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * wrap.
175bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
176f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk     * @param rs Context to which the sampler will belong.
177bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
178bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return Sampler
179bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
1804d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public static Sampler WRAP_LINEAR(RenderScript rs) {
1814d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if(rs.mSampler_WRAP_LINEAR == null) {
1824d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            Builder b = new Builder(rs);
183b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMinification(Value.LINEAR);
184b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMagnification(Value.LINEAR);
1854d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapS(Value.WRAP);
1864d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapT(Value.WRAP);
1874d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            rs.mSampler_WRAP_LINEAR = b.create();
1884d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
1894d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        return rs.mSampler_WRAP_LINEAR;
1904d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
1914d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
1929c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
1936b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * Retrieve a sampler with mag set to linear, min linear mipmap linear, and
1946b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * wrap modes set to wrap.
195bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
196f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk     * @param rs Context to which the sampler will belong.
197bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     *
198bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     * @return Sampler
199bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
2004d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    public static Sampler WRAP_LINEAR_MIP_LINEAR(RenderScript rs) {
2014d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        if(rs.mSampler_WRAP_LINEAR_MIP_LINEAR == null) {
2024d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            Builder b = new Builder(rs);
203b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMinification(Value.LINEAR_MIP_LINEAR);
204b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            b.setMagnification(Value.LINEAR);
2054d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapS(Value.WRAP);
2064d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            b.setWrapT(Value.WRAP);
2074d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams            rs.mSampler_WRAP_LINEAR_MIP_LINEAR = b.create();
2084d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        }
2094d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams        return rs.mSampler_WRAP_LINEAR_MIP_LINEAR;
2104d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams    }
2114d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
2126b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    /**
2136b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * Retrieve a sampler with min and mag set to nearest and wrap modes set to
2146b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * mirrored repeat.
2156b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     *
2166b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * @param rs Context to which the sampler will belong.
2176b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     *
2186b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * @return Sampler
2196b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     */
2206b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    public static Sampler MIRRORED_REPEAT_NEAREST(RenderScript rs) {
2216b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        if(rs.mSampler_MIRRORED_REPEAT_NEAREST == null) {
2226b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            Builder b = new Builder(rs);
2236b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setMinification(Value.NEAREST);
2246b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setMagnification(Value.NEAREST);
2256b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setWrapS(Value.MIRRORED_REPEAT);
2266b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setWrapT(Value.MIRRORED_REPEAT);
2276b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            rs.mSampler_MIRRORED_REPEAT_NEAREST = b.create();
2286b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        }
2296b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        return rs.mSampler_MIRRORED_REPEAT_NEAREST;
2306b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    }
2316b9b2caf2bf977508e223792bb5eba75091c232dTim Murray
2326b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    /**
2336b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * Retrieve a sampler with min and mag set to linear and wrap modes set to
2346b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * mirrored repeat.
2356b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     *
2366b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * @param rs Context to which the sampler will belong.
2376b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     *
2386b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * @return Sampler
2396b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     */
2406b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    public static Sampler MIRRORED_REPEAT_LINEAR(RenderScript rs) {
2416b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        if(rs.mSampler_MIRRORED_REPEAT_LINEAR == null) {
2426b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            Builder b = new Builder(rs);
2436b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setMinification(Value.LINEAR);
2446b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setMagnification(Value.LINEAR);
2456b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setWrapS(Value.MIRRORED_REPEAT);
2466b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setWrapT(Value.MIRRORED_REPEAT);
2476b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            rs.mSampler_MIRRORED_REPEAT_LINEAR = b.create();
2486b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        }
2496b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        return rs.mSampler_MIRRORED_REPEAT_LINEAR;
2506b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    }
2516b9b2caf2bf977508e223792bb5eba75091c232dTim Murray
2526b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    /**
2536b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * Retrieve a sampler with min and mag set to linear and wrap modes set to
2546b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * mirrored repeat.
2556b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     *
2566b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * @param rs Context to which the sampler will belong.
2576b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     *
2586b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     * @return Sampler
2596b9b2caf2bf977508e223792bb5eba75091c232dTim Murray     */
2606b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    public static Sampler MIRRORED_REPEAT_LINEAR_MIP_LINEAR(RenderScript rs) {
2616b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        if(rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR == null) {
2626b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            Builder b = new Builder(rs);
2636b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setMinification(Value.LINEAR_MIP_LINEAR);
2646b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setMagnification(Value.LINEAR);
2656b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setWrapS(Value.MIRRORED_REPEAT);
2666b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            b.setWrapT(Value.MIRRORED_REPEAT);
2676b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR = b.create();
2686b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        }
2696b9b2caf2bf977508e223792bb5eba75091c232dTim Murray        return rs.mSampler_MIRRORED_REPEAT_LINEAR_MIP_LINEAR;
2706b9b2caf2bf977508e223792bb5eba75091c232dTim Murray    }
2714d3399337d18ef04116bc8a2e5799274655d0c30Jason Sams
2729c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
273c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * Builder for creating non-standard samplers.  This is only necessary if
274c11e25c4e653124def1fb18e203b894f42106cbeTim Murray     * a Sampler with different min and mag modes is desired.
275bf6ef8d78fffbce6c1849a4a28fb3f4401ad039eJason Sams     */
2760835d42be9b215f845e30db03211c86670cfa12aJason Sams    public static class Builder {
2770835d42be9b215f845e30db03211c86670cfa12aJason Sams        RenderScript mRS;
2780835d42be9b215f845e30db03211c86670cfa12aJason Sams        Value mMin;
2790835d42be9b215f845e30db03211c86670cfa12aJason Sams        Value mMag;
2800835d42be9b215f845e30db03211c86670cfa12aJason Sams        Value mWrapS;
2810835d42be9b215f845e30db03211c86670cfa12aJason Sams        Value mWrapT;
2820835d42be9b215f845e30db03211c86670cfa12aJason Sams        Value mWrapR;
283f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk        float mAniso;
2840835d42be9b215f845e30db03211c86670cfa12aJason Sams
2850835d42be9b215f845e30db03211c86670cfa12aJason Sams        public Builder(RenderScript rs) {
2860835d42be9b215f845e30db03211c86670cfa12aJason Sams            mRS = rs;
2870835d42be9b215f845e30db03211c86670cfa12aJason Sams            mMin = Value.NEAREST;
2880835d42be9b215f845e30db03211c86670cfa12aJason Sams            mMag = Value.NEAREST;
2890835d42be9b215f845e30db03211c86670cfa12aJason Sams            mWrapS = Value.WRAP;
2900835d42be9b215f845e30db03211c86670cfa12aJason Sams            mWrapT = Value.WRAP;
2910835d42be9b215f845e30db03211c86670cfa12aJason Sams            mWrapR = Value.WRAP;
292f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk            mAniso = 1.0f;
2930835d42be9b215f845e30db03211c86670cfa12aJason Sams        }
2940835d42be9b215f845e30db03211c86670cfa12aJason Sams
295b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        public void setMinification(Value v) {
2968bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            if (v == Value.NEAREST ||
2978bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                v == Value.LINEAR ||
2980857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk                v == Value.LINEAR_MIP_LINEAR ||
2990857196107d55bae312c12b72b115d25d5fee4f9Alex Sakhartchouk                v == Value.LINEAR_MIP_NEAREST) {
3008bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                mMin = v;
3018bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            } else {
3028bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                throw new IllegalArgumentException("Invalid value");
3038bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            }
3040835d42be9b215f845e30db03211c86670cfa12aJason Sams        }
3050835d42be9b215f845e30db03211c86670cfa12aJason Sams
306b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        public void setMagnification(Value v) {
3078bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            if (v == Value.NEAREST || v == Value.LINEAR) {
3088bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                mMag = v;
3098bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            } else {
3108bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                throw new IllegalArgumentException("Invalid value");
3118bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            }
3120835d42be9b215f845e30db03211c86670cfa12aJason Sams        }
3130835d42be9b215f845e30db03211c86670cfa12aJason Sams
3140835d42be9b215f845e30db03211c86670cfa12aJason Sams        public void setWrapS(Value v) {
3156b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            if (v == Value.WRAP || v == Value.CLAMP || v == Value.MIRRORED_REPEAT) {
3168bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                mWrapS = v;
3178bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            } else {
3188bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                throw new IllegalArgumentException("Invalid value");
3198bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            }
3200835d42be9b215f845e30db03211c86670cfa12aJason Sams        }
3210835d42be9b215f845e30db03211c86670cfa12aJason Sams
3220835d42be9b215f845e30db03211c86670cfa12aJason Sams        public void setWrapT(Value v) {
3236b9b2caf2bf977508e223792bb5eba75091c232dTim Murray            if (v == Value.WRAP || v == Value.CLAMP || v == Value.MIRRORED_REPEAT) {
3248bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                mWrapT = v;
3258bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            } else {
3268bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams                throw new IllegalArgumentException("Invalid value");
3278bb41dd61474e977aa61048ba8f733a984a3b22dJason Sams            }
3280835d42be9b215f845e30db03211c86670cfa12aJason Sams        }
3290835d42be9b215f845e30db03211c86670cfa12aJason Sams
330f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk        public void setAnisotropy(float v) {
331f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk            if(v >= 0.0f) {
332f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk                mAniso = v;
333f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk            } else {
334f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk                throw new IllegalArgumentException("Invalid value");
335f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk            }
336f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk        }
337f5b3510c706ed1f7611760dff0c94f2111531c68Alex Sakhartchouk
3380835d42be9b215f845e30db03211c86670cfa12aJason Sams        public Sampler create() {
339771bebb94054d06f97284379c93a2620613513c3Jason Sams            mRS.validate();
3400e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat            long id = mRS.nSamplerCreate(mMag.mID, mMin.mID,
3417d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk                                        mWrapS.mID, mWrapT.mID, mWrapR.mID, mAniso);
3427d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            Sampler sampler = new Sampler(id, mRS);
3437d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            sampler.mMin = mMin;
3447d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            sampler.mMag = mMag;
3457d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            sampler.mWrapS = mWrapS;
3467d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            sampler.mWrapT = mWrapT;
3477d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            sampler.mWrapR = mWrapR;
3487d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            sampler.mAniso = mAniso;
3497d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            return sampler;
3500835d42be9b215f845e30db03211c86670cfa12aJason Sams        }
3510835d42be9b215f845e30db03211c86670cfa12aJason Sams    }
3520835d42be9b215f845e30db03211c86670cfa12aJason Sams
3530835d42be9b215f845e30db03211c86670cfa12aJason Sams}
3540835d42be9b215f845e30db03211c86670cfa12aJason Sams
355