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