122534176fb5c1257130ef4ee589739ca42766a32Jason Sams/*
222534176fb5c1257130ef4ee589739ca42766a32Jason Sams * Copyright (C) 2008 The Android Open Source Project
322534176fb5c1257130ef4ee589739ca42766a32Jason Sams *
422534176fb5c1257130ef4ee589739ca42766a32Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
522534176fb5c1257130ef4ee589739ca42766a32Jason Sams * you may not use this file except in compliance with the License.
622534176fb5c1257130ef4ee589739ca42766a32Jason Sams * You may obtain a copy of the License at
722534176fb5c1257130ef4ee589739ca42766a32Jason Sams *
822534176fb5c1257130ef4ee589739ca42766a32Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
922534176fb5c1257130ef4ee589739ca42766a32Jason Sams *
1022534176fb5c1257130ef4ee589739ca42766a32Jason Sams * Unless required by applicable law or agreed to in writing, software
1122534176fb5c1257130ef4ee589739ca42766a32Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1222534176fb5c1257130ef4ee589739ca42766a32Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1322534176fb5c1257130ef4ee589739ca42766a32Jason Sams * See the License for the specific language governing permissions and
1422534176fb5c1257130ef4ee589739ca42766a32Jason Sams * limitations under the License.
1522534176fb5c1257130ef4ee589739ca42766a32Jason Sams */
1622534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1722534176fb5c1257130ef4ee589739ca42766a32Jason Samspackage android.renderscript;
1822534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
209c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
21a90842283e322b1210e2bea5850b05177e3d87afTim Murray * @hide
2211518acc8c416023d8c2192b441a1767205676d9Robert Ly * <p>ProgramStore contains a set of parameters that control how
23623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk * the graphics hardware handles writes to the framebuffer.
2411518acc8c416023d8c2192b441a1767205676d9Robert Ly * It could be used to:</p>
2511518acc8c416023d8c2192b441a1767205676d9Robert Ly * <ul>
2611518acc8c416023d8c2192b441a1767205676d9Robert Ly *   <li>enable/disable depth testing</li>
2711518acc8c416023d8c2192b441a1767205676d9Robert Ly *   <li>specify wheather depth writes are performed</li>
2811518acc8c416023d8c2192b441a1767205676d9Robert Ly *   <li>setup various blending modes for use in effects like
2911518acc8c416023d8c2192b441a1767205676d9Robert Ly *     transparency</li>
3011518acc8c416023d8c2192b441a1767205676d9Robert Ly *   <li>define write masks for color components written into the
3111518acc8c416023d8c2192b441a1767205676d9Robert Ly *     framebuffer</li>
3211518acc8c416023d8c2192b441a1767205676d9Robert Ly *  </ul>
3322534176fb5c1257130ef4ee589739ca42766a32Jason Sams *
3422534176fb5c1257130ef4ee589739ca42766a32Jason Sams **/
3522534176fb5c1257130ef4ee589739ca42766a32Jason Samspublic class ProgramStore extends BaseObj {
369c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
37623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * Specifies the function used to determine whether a fragment
38623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * will be drawn during the depth testing stage in the rendering
39623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * pipeline by comparing its value with that already in the depth
40623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * buffer. DepthFunc is only valid when depth buffer is present
41623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * and depth testing is enabled
42623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    */
43b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk    public enum DepthFunc {
44623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk
459c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
46623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Always drawn
47623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
4822534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ALWAYS (0),
499c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
50623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Drawn if the incoming depth value is less than that in the
51623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * depth buffer
52623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
5322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        LESS (1),
549c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
55623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Drawn if the incoming depth value is less or equal to that in
56623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * the depth buffer
57623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
58b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        LESS_OR_EQUAL (2),
599c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
60623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Drawn if the incoming depth value is greater than that in the
61623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * depth buffer
62623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
6322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        GREATER (3),
649c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
65623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Drawn if the incoming depth value is greater or equal to that
66623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * in the depth buffer
67623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
68b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        GREATER_OR_EQUAL (4),
699c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
70623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Drawn if the incoming depth value is equal to that in the
71623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * depth buffer
72623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
7322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        EQUAL (5),
749c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
75623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Drawn if the incoming depth value is not equal to that in the
76623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * depth buffer
77623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
78b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        NOT_EQUAL (6);
7922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
8022534176fb5c1257130ef4ee589739ca42766a32Jason Sams        int mID;
8122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        DepthFunc(int id) {
8222534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mID = id;
8322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
8422534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
8522534176fb5c1257130ef4ee589739ca42766a32Jason Sams
869c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
87623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * Specifies the functions used to combine incoming pixels with
88623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * those already in the frame buffer.
89623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *
90623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * BlendSrcFunc describes how the coefficient used to scale the
91623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * source pixels during the blending operation is computed
92623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *
93623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    */
9422534176fb5c1257130ef4ee589739ca42766a32Jason Sams    public enum BlendSrcFunc {
9522534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ZERO (0),
9622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE (1),
9722534176fb5c1257130ef4ee589739ca42766a32Jason Sams        DST_COLOR (2),
9822534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE_MINUS_DST_COLOR (3),
9922534176fb5c1257130ef4ee589739ca42766a32Jason Sams        SRC_ALPHA (4),
10022534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE_MINUS_SRC_ALPHA (5),
10122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        DST_ALPHA (6),
102eab4c75b09aa81ea093c2b9fbb3dbc2016c9bd6eJason Sams        ONE_MINUS_DST_ALPHA (7),
10322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        SRC_ALPHA_SATURATE (8);
10422534176fb5c1257130ef4ee589739ca42766a32Jason Sams
10522534176fb5c1257130ef4ee589739ca42766a32Jason Sams        int mID;
10622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        BlendSrcFunc(int id) {
10722534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mID = id;
10822534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
10922534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
11022534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1119c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
112623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * Specifies the functions used to combine incoming pixels with
113623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * those already in the frame buffer.
114623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *
115623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * BlendDstFunc describes how the coefficient used to scale the
116623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * pixels already in the framebuffer is computed during the
117623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * blending operation
118623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *
119623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    */
12022534176fb5c1257130ef4ee589739ca42766a32Jason Sams    public enum BlendDstFunc {
12122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ZERO (0),
12222534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE (1),
12322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        SRC_COLOR (2),
12422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE_MINUS_SRC_COLOR (3),
12522534176fb5c1257130ef4ee589739ca42766a32Jason Sams        SRC_ALPHA (4),
12622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE_MINUS_SRC_ALPHA (5),
12722534176fb5c1257130ef4ee589739ca42766a32Jason Sams        DST_ALPHA (6),
128eab4c75b09aa81ea093c2b9fbb3dbc2016c9bd6eJason Sams        ONE_MINUS_DST_ALPHA (7);
12922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
13022534176fb5c1257130ef4ee589739ca42766a32Jason Sams        int mID;
13122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        BlendDstFunc(int id) {
13222534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mID = id;
13322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
13422534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
13522534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1367d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    DepthFunc mDepthFunc;
1377d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    boolean mDepthMask;
1387d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    boolean mColorMaskR;
1397d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    boolean mColorMaskG;
1407d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    boolean mColorMaskB;
1417d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    boolean mColorMaskA;
1427d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    BlendSrcFunc mBlendSrc;
1437d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    BlendDstFunc mBlendDst;
1447d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    boolean mDither;
14522534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1460e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat    ProgramStore(long id, RenderScript rs) {
1470de9444aa6c25d2c586e8204a6168d10e67376e0Alex Sakhartchouk        super(id, rs);
14822534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
14922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
1509c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
151918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    * Returns the function used to test writing into the depth
152918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    * buffer
1537d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    * @return depth function
1547d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    */
1557d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    public DepthFunc getDepthFunc() {
1567d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mDepthFunc;
1577d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
1587d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
1599c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
160918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    * Queries whether writes are enabled into the depth buffer
161918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    * @return depth mask
1627d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    */
163918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    public boolean isDepthMaskEnabled() {
1647d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mDepthMask;
1657d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
1667d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
1679c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
168918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    * Queries whether red channel is written
1697d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    * @return red color channel mask
1707d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    */
171918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    public boolean isColorMaskRedEnabled() {
1727d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mColorMaskR;
1737d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
1747d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
1759c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
176918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    * Queries whether green channel is written
1777d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    * @return green color channel mask
1787d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    */
179918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    public boolean isColorMaskGreenEnabled() {
1807d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mColorMaskG;
1817d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
1827d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
1839c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
184918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    * Queries whether blue channel is written
1857d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    * @return blue color channel mask
1867d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    */
187918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    public boolean isColorMaskBlueEnabled() {
1887d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mColorMaskB;
1897d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
1907d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
1919c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
192918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    * Queries whether alpha channel is written
1937d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    * @return alpha channel mask
1947d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    */
195918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    public boolean isColorMaskAlphaEnabled() {
1967d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mColorMaskA;
1977d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
1987d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
1999c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
200918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    * Specifies how the source blending factor is computed
2017d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    * @return source blend function
2027d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    */
2037d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    public BlendSrcFunc getBlendSrcFunc() {
2047d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mBlendSrc;
2057d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
2067d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
2079c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
208918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    * Specifies how the destination blending factor is computed
2097d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    * @return destination blend function
2107d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    */
2117d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    public BlendDstFunc getBlendDstFunc() {
2127d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mBlendDst;
2137d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
2147d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
2159c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
216918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    * Specifies whether colors are dithered before writing into the
217918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    * framebuffer
2187d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    * @return whether dither is enabled
2197d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    */
220918e840628a0b40a95fd42618f604ea5a44aebaeAlex Sakhartchouk    public boolean isDitherEnabled() {
2217d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk        return mDither;
2227d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk    }
2237d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk
2249c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
225623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * Returns a pre-defined program store object with the following
226623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * characteristics:
227623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *  - incoming pixels are drawn if their depth value is less than
228623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *    the stored value in the depth buffer. If the pixel is
229623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *    drawn, its value is also stored in the depth buffer
230623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *  - incoming pixels override the value stored in the color
231623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *    buffer if it passes the depth test
232623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *
233f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk    *  @param rs Context to which the program will belong.
234623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    **/
235d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    public static ProgramStore BLEND_NONE_DEPTH_TEST(RenderScript rs) {
236d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        if(rs.mProgramStore_BLEND_NONE_DEPTH_TEST == null) {
23732e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            ProgramStore.Builder builder = new ProgramStore.Builder(rs);
23832e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            builder.setDepthFunc(ProgramStore.DepthFunc.LESS);
23932e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ZERO);
240b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            builder.setDitherEnabled(false);
241b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            builder.setDepthMaskEnabled(true);
242d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            rs.mProgramStore_BLEND_NONE_DEPTH_TEST = builder.create();
24332e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk        }
244d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        return rs.mProgramStore_BLEND_NONE_DEPTH_TEST;
24532e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk    }
2469c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
247623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * Returns a pre-defined program store object with the following
248623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * characteristics:
249623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *  - incoming pixels always pass the depth test and their value
250623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *    is not stored in the depth buffer
251623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *  - incoming pixels override the value stored in the color
252623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *    buffer
253623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *
254f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk    *  @param rs Context to which the program will belong.
255623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    **/
256b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk    public static ProgramStore BLEND_NONE_DEPTH_NONE(RenderScript rs) {
257d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        if(rs.mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH == null) {
25832e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            ProgramStore.Builder builder = new ProgramStore.Builder(rs);
25932e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS);
26032e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ZERO);
261b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            builder.setDitherEnabled(false);
262b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            builder.setDepthMaskEnabled(false);
263d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            rs.mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH = builder.create();
26432e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk        }
265d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        return rs.mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
26632e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk    }
2679c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
268623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * Returns a pre-defined program store object with the following
269623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * characteristics:
270623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *  - incoming pixels are drawn if their depth value is less than
271623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *    the stored value in the depth buffer. If the pixel is
272623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *    drawn, its value is also stored in the depth buffer
273623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *  - if the incoming (Source) pixel passes depth test, its value
274623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *    is combined with the stored color (Dest) using the
275623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *    following formula
276623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *  Final.RGB = Source.RGB * Source.A + Dest.RGB * (1 - Source.A)
277623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *
278f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk    *  @param rs Context to which the program will belong.
279623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    **/
280d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk    public static ProgramStore BLEND_ALPHA_DEPTH_TEST(RenderScript rs) {
281d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        if(rs.mProgramStore_BLEND_ALPHA_DEPTH_TEST == null) {
28232e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            ProgramStore.Builder builder = new ProgramStore.Builder(rs);
28332e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            builder.setDepthFunc(ProgramStore.DepthFunc.LESS);
28432e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            builder.setBlendFunc(BlendSrcFunc.SRC_ALPHA, BlendDstFunc.ONE_MINUS_SRC_ALPHA);
285b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            builder.setDitherEnabled(false);
286b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            builder.setDepthMaskEnabled(true);
287d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            rs.mProgramStore_BLEND_ALPHA_DEPTH_TEST = builder.create();
28832e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk        }
289d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        return rs.mProgramStore_BLEND_ALPHA_DEPTH_TEST;
29032e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk    }
2919c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
292623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * Returns a pre-defined program store object with the following
293623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * characteristics:
294623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *  - incoming pixels always pass the depth test and their value
295623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *    is not stored in the depth buffer
296623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *  - incoming pixel's value is combined with the stored color
297623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *    (Dest) using the following formula
298623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *  Final.RGB = Source.RGB * Source.A + Dest.RGB * (1 - Source.A)
299623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    *
300f5c876e82d7cc647ba94d29eb914e64b7977c303Alex Sakhartchouk    *  @param rs Context to which the program will belong.
301623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    **/
302b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk    public static ProgramStore BLEND_ALPHA_DEPTH_NONE(RenderScript rs) {
303d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        if(rs.mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH == null) {
30432e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            ProgramStore.Builder builder = new ProgramStore.Builder(rs);
30532e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS);
30632e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            builder.setBlendFunc(BlendSrcFunc.SRC_ALPHA, BlendDstFunc.ONE_MINUS_SRC_ALPHA);
307b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            builder.setDitherEnabled(false);
308b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk            builder.setDepthMaskEnabled(false);
309d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk            rs.mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH = builder.create();
31032e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk        }
311d36f248eaf06c569010649902df653da1a9e2accAlex Sakhartchouk        return rs.mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
31232e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk    }
31322534176fb5c1257130ef4ee589739ca42766a32Jason Sams
3149c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines    /**
315623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * Builder class for ProgramStore object. If the builder is left
316623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * empty, the equivalent of BLEND_NONE_DEPTH_NONE would be
317623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    * returned
318623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk    */
31922534176fb5c1257130ef4ee589739ca42766a32Jason Sams    public static class Builder {
32022534176fb5c1257130ef4ee589739ca42766a32Jason Sams        RenderScript mRS;
32122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        DepthFunc mDepthFunc;
32222534176fb5c1257130ef4ee589739ca42766a32Jason Sams        boolean mDepthMask;
32322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        boolean mColorMaskR;
32422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        boolean mColorMaskG;
32522534176fb5c1257130ef4ee589739ca42766a32Jason Sams        boolean mColorMaskB;
32622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        boolean mColorMaskA;
32722534176fb5c1257130ef4ee589739ca42766a32Jason Sams        BlendSrcFunc mBlendSrc;
32822534176fb5c1257130ef4ee589739ca42766a32Jason Sams        BlendDstFunc mBlendDst;
32922534176fb5c1257130ef4ee589739ca42766a32Jason Sams        boolean mDither;
33022534176fb5c1257130ef4ee589739ca42766a32Jason Sams
33132e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk        public Builder(RenderScript rs) {
33232e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            mRS = rs;
33332e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            mDepthFunc = DepthFunc.ALWAYS;
33432e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            mDepthMask = false;
33532e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            mColorMaskR = true;
33632e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            mColorMaskG = true;
33732e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            mColorMaskB = true;
33832e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            mColorMaskA = true;
33932e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            mBlendSrc = BlendSrcFunc.ONE;
34032e09b5891da0174f161d99e2d3ebe67d6efa39cAlex Sakhartchouk            mBlendDst = BlendDstFunc.ZERO;
34122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
34222534176fb5c1257130ef4ee589739ca42766a32Jason Sams
3439c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
344623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Specifies the depth testing behavior
345623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *
346623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @param func function used for depth testing
347623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *
348623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @return this
349623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
350288c8711a64893acb3f4a31caf69153be9809d17Jim Shuma        public Builder setDepthFunc(DepthFunc func) {
35122534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mDepthFunc = func;
352288c8711a64893acb3f4a31caf69153be9809d17Jim Shuma            return this;
35322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
35422534176fb5c1257130ef4ee589739ca42766a32Jason Sams
3559c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
356623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Enables writes into the depth buffer
357623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *
358623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @param enable specifies whether depth writes are
359623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *         enabled or disabled
360623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *
361623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @return this
362623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
363b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        public Builder setDepthMaskEnabled(boolean enable) {
36422534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mDepthMask = enable;
365288c8711a64893acb3f4a31caf69153be9809d17Jim Shuma            return this;
36622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
36722534176fb5c1257130ef4ee589739ca42766a32Jason Sams
3689c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
369623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Enables writes into the color buffer
370623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *
371623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @param r specifies whether red channel is written
372623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @param g specifies whether green channel is written
373623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @param b specifies whether blue channel is written
374623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @param a specifies whether alpha channel is written
375623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *
376623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @return this
377623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
378b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        public Builder setColorMaskEnabled(boolean r, boolean g, boolean b, boolean a) {
37922534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mColorMaskR = r;
38022534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mColorMaskG = g;
38122534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mColorMaskB = b;
38222534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mColorMaskA = a;
383288c8711a64893acb3f4a31caf69153be9809d17Jim Shuma            return this;
38422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
38522534176fb5c1257130ef4ee589739ca42766a32Jason Sams
3869c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
387623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Specifies how incoming pixels are combined with the pixels
388623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * stored in the framebuffer
389623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *
390623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @param src specifies how the source blending factor is
391623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *            computed
392623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @param dst specifies how the destination blending factor is
393623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *            computed
394623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *
395623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @return this
396623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
397288c8711a64893acb3f4a31caf69153be9809d17Jim Shuma        public Builder setBlendFunc(BlendSrcFunc src, BlendDstFunc dst) {
39822534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mBlendSrc = src;
39922534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mBlendDst = dst;
400288c8711a64893acb3f4a31caf69153be9809d17Jim Shuma            return this;
40122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
40222534176fb5c1257130ef4ee589739ca42766a32Jason Sams
4039c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
404623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Enables dithering
405623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *
406623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @param enable specifies whether dithering is enabled or
407623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *               disabled
408623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        *
409623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * @return this
410623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
411b4d7bb6872f523b4318144202e119766ed9054edAlex Sakhartchouk        public Builder setDitherEnabled(boolean enable) {
41222534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mDither = enable;
413288c8711a64893acb3f4a31caf69153be9809d17Jim Shuma            return this;
41422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
41522534176fb5c1257130ef4ee589739ca42766a32Jason Sams
4169c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines        /**
417623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        * Creates a program store from the current state of the builder
418623c54dd1605d802bb6bfdd0d266a191d4f2d88cAlex Sakhartchouk        */
41922534176fb5c1257130ef4ee589739ca42766a32Jason Sams        public ProgramStore create() {
420771bebb94054d06f97284379c93a2620613513c3Jason Sams            mRS.validate();
4210e0c0885aed99a119052a792becb5a0c5a93632dAshok Bhat            long id = mRS.nProgramStoreCreate(mColorMaskR, mColorMaskG, mColorMaskB, mColorMaskA,
422331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                             mDepthMask, mDither,
423331bf9b14b1c5c1e88f5c4092b6e24fae887fb3bJason Sams                                             mBlendSrc.mID, mBlendDst.mID, mDepthFunc.mID);
4247d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            ProgramStore programStore = new ProgramStore(id, mRS);
4257d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programStore.mDepthFunc = mDepthFunc;
4267d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programStore.mDepthMask = mDepthMask;
4277d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programStore.mColorMaskR = mColorMaskR;
4287d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programStore.mColorMaskG = mColorMaskG;
4297d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programStore.mColorMaskB = mColorMaskB;
4307d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programStore.mColorMaskA = mColorMaskA;
4317d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programStore.mBlendSrc = mBlendSrc;
4327d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programStore.mBlendDst = mBlendDst;
4337d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            programStore.mDither = mDither;
4347d5f5e7c8943e043a422ad51c85d4e1684c37e28Alex Sakhartchouk            return programStore;
43522534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
43622534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
43722534176fb5c1257130ef4ee589739ca42766a32Jason Sams
43822534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
43922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
44022534176fb5c1257130ef4ee589739ca42766a32Jason Sams
44122534176fb5c1257130ef4ee589739ca42766a32Jason Sams
44222534176fb5c1257130ef4ee589739ca42766a32Jason Sams
443