| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.renderscript; |
| |
| |
| import android.util.Config; |
| import android.util.Log; |
| |
| |
| /** |
| * @hide |
| * |
| **/ |
| public class ProgramStore extends BaseObj { |
| public enum DepthFunc { |
| ALWAYS (0), |
| LESS (1), |
| LEQUAL (2), |
| GREATER (3), |
| GEQUAL (4), |
| EQUAL (5), |
| NOTEQUAL (6); |
| |
| int mID; |
| DepthFunc(int id) { |
| mID = id; |
| } |
| } |
| |
| public enum BlendSrcFunc { |
| ZERO (0), |
| ONE (1), |
| DST_COLOR (2), |
| ONE_MINUS_DST_COLOR (3), |
| SRC_ALPHA (4), |
| ONE_MINUS_SRC_ALPHA (5), |
| DST_ALPHA (6), |
| ONE_MINUS_DST_ALPA (7), |
| SRC_ALPHA_SATURATE (8); |
| |
| int mID; |
| BlendSrcFunc(int id) { |
| mID = id; |
| } |
| } |
| |
| public enum BlendDstFunc { |
| ZERO (0), |
| ONE (1), |
| SRC_COLOR (2), |
| ONE_MINUS_SRC_COLOR (3), |
| SRC_ALPHA (4), |
| ONE_MINUS_SRC_ALPHA (5), |
| DST_ALPHA (6), |
| ONE_MINUS_DST_ALPA (7); |
| |
| int mID; |
| BlendDstFunc(int id) { |
| mID = id; |
| } |
| } |
| |
| |
| ProgramStore(int id, RenderScript rs) { |
| super(rs); |
| mID = id; |
| } |
| |
| public void destroy() { |
| if(mDestroyed) { |
| throw new IllegalStateException("Object already destroyed."); |
| } |
| mDestroyed = true; |
| mRS.nProgramFragmentStoreDestroy(mID); |
| } |
| |
| |
| |
| public static class Builder { |
| RenderScript mRS; |
| Element mIn; |
| Element mOut; |
| DepthFunc mDepthFunc; |
| boolean mDepthMask; |
| boolean mColorMaskR; |
| boolean mColorMaskG; |
| boolean mColorMaskB; |
| boolean mColorMaskA; |
| BlendSrcFunc mBlendSrc; |
| BlendDstFunc mBlendDst; |
| boolean mDither; |
| |
| |
| |
| public Builder(RenderScript rs, Element in, Element out) { |
| mRS = rs; |
| mIn = in; |
| mOut = out; |
| mDepthFunc = DepthFunc.ALWAYS; |
| mDepthMask = false; |
| mColorMaskR = true; |
| mColorMaskG = true; |
| mColorMaskB = true; |
| mColorMaskA = true; |
| mBlendSrc = BlendSrcFunc.ONE; |
| mBlendDst = BlendDstFunc.ZERO; |
| |
| |
| } |
| |
| public void setDepthFunc(DepthFunc func) { |
| mDepthFunc = func; |
| } |
| |
| public void setDepthMask(boolean enable) { |
| mDepthMask = enable; |
| } |
| |
| public void setColorMask(boolean r, boolean g, boolean b, boolean a) { |
| mColorMaskR = r; |
| mColorMaskG = g; |
| mColorMaskB = b; |
| mColorMaskA = a; |
| } |
| |
| public void setBlendFunc(BlendSrcFunc src, BlendDstFunc dst) { |
| mBlendSrc = src; |
| mBlendDst = dst; |
| } |
| |
| public void setDitherEnable(boolean enable) { |
| mDither = enable; |
| } |
| |
| static synchronized ProgramStore internalCreate(RenderScript rs, Builder b) { |
| int inID = 0; |
| int outID = 0; |
| if (b.mIn != null) { |
| inID = b.mIn.mID; |
| } |
| if (b.mOut != null) { |
| outID = b.mOut.mID; |
| } |
| rs.nProgramFragmentStoreBegin(inID, outID); |
| rs.nProgramFragmentStoreDepthFunc(b.mDepthFunc.mID); |
| rs.nProgramFragmentStoreDepthMask(b.mDepthMask); |
| rs.nProgramFragmentStoreColorMask(b.mColorMaskR, |
| b.mColorMaskG, |
| b.mColorMaskB, |
| b.mColorMaskA); |
| rs.nProgramFragmentStoreBlendFunc(b.mBlendSrc.mID, b.mBlendDst.mID); |
| rs.nProgramFragmentStoreDither(b.mDither); |
| |
| int id = rs.nProgramFragmentStoreCreate(); |
| return new ProgramStore(id, rs); |
| } |
| |
| public ProgramStore create() { |
| return internalCreate(mRS, this); |
| } |
| } |
| |
| } |
| |
| |
| |
| |