1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.renderscript; 18 19 20import android.util.Config; 21import android.util.Log; 22 23 24/** 25 * @hide 26 * 27 **/ 28public class ProgramStore extends BaseObj { 29 public enum DepthFunc { 30 ALWAYS (0), 31 LESS (1), 32 LEQUAL (2), 33 GREATER (3), 34 GEQUAL (4), 35 EQUAL (5), 36 NOTEQUAL (6); 37 38 int mID; 39 DepthFunc(int id) { 40 mID = id; 41 } 42 } 43 44 public enum BlendSrcFunc { 45 ZERO (0), 46 ONE (1), 47 DST_COLOR (2), 48 ONE_MINUS_DST_COLOR (3), 49 SRC_ALPHA (4), 50 ONE_MINUS_SRC_ALPHA (5), 51 DST_ALPHA (6), 52 ONE_MINUS_DST_ALPHA (7), 53 SRC_ALPHA_SATURATE (8); 54 55 int mID; 56 BlendSrcFunc(int id) { 57 mID = id; 58 } 59 } 60 61 public enum BlendDstFunc { 62 ZERO (0), 63 ONE (1), 64 SRC_COLOR (2), 65 ONE_MINUS_SRC_COLOR (3), 66 SRC_ALPHA (4), 67 ONE_MINUS_SRC_ALPHA (5), 68 DST_ALPHA (6), 69 ONE_MINUS_DST_ALPHA (7); 70 71 int mID; 72 BlendDstFunc(int id) { 73 mID = id; 74 } 75 } 76 77 78 ProgramStore(int id, RenderScript rs) { 79 super(rs); 80 mID = id; 81 } 82 83 84 85 public static class Builder { 86 RenderScript mRS; 87 Element mIn; 88 Element mOut; 89 DepthFunc mDepthFunc; 90 boolean mDepthMask; 91 boolean mColorMaskR; 92 boolean mColorMaskG; 93 boolean mColorMaskB; 94 boolean mColorMaskA; 95 BlendSrcFunc mBlendSrc; 96 BlendDstFunc mBlendDst; 97 boolean mDither; 98 99 100 101 public Builder(RenderScript rs, Element in, Element out) { 102 mRS = rs; 103 mIn = in; 104 mOut = out; 105 mDepthFunc = DepthFunc.ALWAYS; 106 mDepthMask = false; 107 mColorMaskR = true; 108 mColorMaskG = true; 109 mColorMaskB = true; 110 mColorMaskA = true; 111 mBlendSrc = BlendSrcFunc.ONE; 112 mBlendDst = BlendDstFunc.ZERO; 113 114 115 } 116 117 public void setDepthFunc(DepthFunc func) { 118 mDepthFunc = func; 119 } 120 121 public void setDepthMask(boolean enable) { 122 mDepthMask = enable; 123 } 124 125 public void setColorMask(boolean r, boolean g, boolean b, boolean a) { 126 mColorMaskR = r; 127 mColorMaskG = g; 128 mColorMaskB = b; 129 mColorMaskA = a; 130 } 131 132 public void setBlendFunc(BlendSrcFunc src, BlendDstFunc dst) { 133 mBlendSrc = src; 134 mBlendDst = dst; 135 } 136 137 public void setDitherEnable(boolean enable) { 138 mDither = enable; 139 } 140 141 static synchronized ProgramStore internalCreate(RenderScript rs, Builder b) { 142 int inID = 0; 143 int outID = 0; 144 if (b.mIn != null) { 145 inID = b.mIn.mID; 146 } 147 if (b.mOut != null) { 148 outID = b.mOut.mID; 149 } 150 rs.nProgramFragmentStoreBegin(inID, outID); 151 rs.nProgramFragmentStoreDepthFunc(b.mDepthFunc.mID); 152 rs.nProgramFragmentStoreDepthMask(b.mDepthMask); 153 rs.nProgramFragmentStoreColorMask(b.mColorMaskR, 154 b.mColorMaskG, 155 b.mColorMaskB, 156 b.mColorMaskA); 157 rs.nProgramFragmentStoreBlendFunc(b.mBlendSrc.mID, b.mBlendDst.mID); 158 rs.nProgramFragmentStoreDither(b.mDither); 159 160 int id = rs.nProgramFragmentStoreCreate(); 161 return new ProgramStore(id, rs); 162 } 163 164 public ProgramStore create() { 165 mRS.validate(); 166 return internalCreate(mRS, this); 167 } 168 } 169 170} 171 172 173 174 175