ProgramStore.java revision 22534176fb5c1257130ef4ee589739ca42766a32
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
2022534176fb5c1257130ef4ee589739ca42766a32Jason Samsimport android.util.Config;
2122534176fb5c1257130ef4ee589739ca42766a32Jason Samsimport android.util.Log;
2222534176fb5c1257130ef4ee589739ca42766a32Jason Sams
2322534176fb5c1257130ef4ee589739ca42766a32Jason Sams
2422534176fb5c1257130ef4ee589739ca42766a32Jason Sams/**
2522534176fb5c1257130ef4ee589739ca42766a32Jason Sams * @hide
2622534176fb5c1257130ef4ee589739ca42766a32Jason Sams *
2722534176fb5c1257130ef4ee589739ca42766a32Jason Sams **/
2822534176fb5c1257130ef4ee589739ca42766a32Jason Samspublic class ProgramStore extends BaseObj {
2922534176fb5c1257130ef4ee589739ca42766a32Jason Sams        public enum DepthFunc {
3022534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ALWAYS (0),
3122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        LESS (1),
3222534176fb5c1257130ef4ee589739ca42766a32Jason Sams        LEQUAL (2),
3322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        GREATER (3),
3422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        GEQUAL (4),
3522534176fb5c1257130ef4ee589739ca42766a32Jason Sams        EQUAL (5),
3622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        NOTEQUAL (6);
3722534176fb5c1257130ef4ee589739ca42766a32Jason Sams
3822534176fb5c1257130ef4ee589739ca42766a32Jason Sams        int mID;
3922534176fb5c1257130ef4ee589739ca42766a32Jason Sams        DepthFunc(int id) {
4022534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mID = id;
4122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
4222534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
4322534176fb5c1257130ef4ee589739ca42766a32Jason Sams
4422534176fb5c1257130ef4ee589739ca42766a32Jason Sams    public enum BlendSrcFunc {
4522534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ZERO (0),
4622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE (1),
4722534176fb5c1257130ef4ee589739ca42766a32Jason Sams        DST_COLOR (2),
4822534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE_MINUS_DST_COLOR (3),
4922534176fb5c1257130ef4ee589739ca42766a32Jason Sams        SRC_ALPHA (4),
5022534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE_MINUS_SRC_ALPHA (5),
5122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        DST_ALPHA (6),
5222534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE_MINUS_DST_ALPA (7),
5322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        SRC_ALPHA_SATURATE (8);
5422534176fb5c1257130ef4ee589739ca42766a32Jason Sams
5522534176fb5c1257130ef4ee589739ca42766a32Jason Sams        int mID;
5622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        BlendSrcFunc(int id) {
5722534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mID = id;
5822534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
5922534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
6022534176fb5c1257130ef4ee589739ca42766a32Jason Sams
6122534176fb5c1257130ef4ee589739ca42766a32Jason Sams    public enum BlendDstFunc {
6222534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ZERO (0),
6322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE (1),
6422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        SRC_COLOR (2),
6522534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE_MINUS_SRC_COLOR (3),
6622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        SRC_ALPHA (4),
6722534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE_MINUS_SRC_ALPHA (5),
6822534176fb5c1257130ef4ee589739ca42766a32Jason Sams        DST_ALPHA (6),
6922534176fb5c1257130ef4ee589739ca42766a32Jason Sams        ONE_MINUS_DST_ALPA (7);
7022534176fb5c1257130ef4ee589739ca42766a32Jason Sams
7122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        int mID;
7222534176fb5c1257130ef4ee589739ca42766a32Jason Sams        BlendDstFunc(int id) {
7322534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mID = id;
7422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
7522534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
7622534176fb5c1257130ef4ee589739ca42766a32Jason Sams
7722534176fb5c1257130ef4ee589739ca42766a32Jason Sams
7822534176fb5c1257130ef4ee589739ca42766a32Jason Sams    ProgramStore(int id, RenderScript rs) {
7922534176fb5c1257130ef4ee589739ca42766a32Jason Sams        super(rs);
8022534176fb5c1257130ef4ee589739ca42766a32Jason Sams        mID = id;
8122534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
8222534176fb5c1257130ef4ee589739ca42766a32Jason Sams
8322534176fb5c1257130ef4ee589739ca42766a32Jason Sams    public void destroy() {
8422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        mRS.nProgramFragmentStoreDestroy(mID);
8522534176fb5c1257130ef4ee589739ca42766a32Jason Sams        mID = 0;
8622534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
8722534176fb5c1257130ef4ee589739ca42766a32Jason Sams
8822534176fb5c1257130ef4ee589739ca42766a32Jason Sams
8922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
9022534176fb5c1257130ef4ee589739ca42766a32Jason Sams    public static class Builder {
9122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        RenderScript mRS;
9222534176fb5c1257130ef4ee589739ca42766a32Jason Sams        Element mIn;
9322534176fb5c1257130ef4ee589739ca42766a32Jason Sams        Element mOut;
9422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        DepthFunc mDepthFunc;
9522534176fb5c1257130ef4ee589739ca42766a32Jason Sams        boolean mDepthMask;
9622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        boolean mColorMaskR;
9722534176fb5c1257130ef4ee589739ca42766a32Jason Sams        boolean mColorMaskG;
9822534176fb5c1257130ef4ee589739ca42766a32Jason Sams        boolean mColorMaskB;
9922534176fb5c1257130ef4ee589739ca42766a32Jason Sams        boolean mColorMaskA;
10022534176fb5c1257130ef4ee589739ca42766a32Jason Sams        BlendSrcFunc mBlendSrc;
10122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        BlendDstFunc mBlendDst;
10222534176fb5c1257130ef4ee589739ca42766a32Jason Sams        boolean mDither;
10322534176fb5c1257130ef4ee589739ca42766a32Jason Sams
10422534176fb5c1257130ef4ee589739ca42766a32Jason Sams
10522534176fb5c1257130ef4ee589739ca42766a32Jason Sams
10622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        public Builder(RenderScript rs, Element in, Element out) {
10722534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mRS = rs;
10822534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mIn = in;
10922534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mOut = out;
11022534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mDepthFunc = DepthFunc.ALWAYS;
11122534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mDepthMask = false;
11222534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mColorMaskR = true;
11322534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mColorMaskG = true;
11422534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mColorMaskB = true;
11522534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mColorMaskA = true;
11622534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mBlendSrc = BlendSrcFunc.ONE;
11722534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mBlendDst = BlendDstFunc.ZERO;
11822534176fb5c1257130ef4ee589739ca42766a32Jason Sams
11922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
12022534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
12122534176fb5c1257130ef4ee589739ca42766a32Jason Sams
12222534176fb5c1257130ef4ee589739ca42766a32Jason Sams        public void setDepthFunc(DepthFunc func) {
12322534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mDepthFunc = func;
12422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
12522534176fb5c1257130ef4ee589739ca42766a32Jason Sams
12622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        public void setDepthMask(boolean enable) {
12722534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mDepthMask = enable;
12822534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
12922534176fb5c1257130ef4ee589739ca42766a32Jason Sams
13022534176fb5c1257130ef4ee589739ca42766a32Jason Sams        public void setColorMask(boolean r, boolean g, boolean b, boolean a) {
13122534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mColorMaskR = r;
13222534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mColorMaskG = g;
13322534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mColorMaskB = b;
13422534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mColorMaskA = a;
13522534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
13622534176fb5c1257130ef4ee589739ca42766a32Jason Sams
13722534176fb5c1257130ef4ee589739ca42766a32Jason Sams        public void setBlendFunc(BlendSrcFunc src, BlendDstFunc dst) {
13822534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mBlendSrc = src;
13922534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mBlendDst = dst;
14022534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
14122534176fb5c1257130ef4ee589739ca42766a32Jason Sams
14222534176fb5c1257130ef4ee589739ca42766a32Jason Sams        public void setDitherEnable(boolean enable) {
14322534176fb5c1257130ef4ee589739ca42766a32Jason Sams            mDither = enable;
14422534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
14522534176fb5c1257130ef4ee589739ca42766a32Jason Sams
14622534176fb5c1257130ef4ee589739ca42766a32Jason Sams        static synchronized ProgramStore internalCreate(RenderScript rs, Builder b) {
14722534176fb5c1257130ef4ee589739ca42766a32Jason Sams            int inID = 0;
14822534176fb5c1257130ef4ee589739ca42766a32Jason Sams            int outID = 0;
14922534176fb5c1257130ef4ee589739ca42766a32Jason Sams            if (b.mIn != null) {
15022534176fb5c1257130ef4ee589739ca42766a32Jason Sams                inID = b.mIn.mID;
15122534176fb5c1257130ef4ee589739ca42766a32Jason Sams            }
15222534176fb5c1257130ef4ee589739ca42766a32Jason Sams            if (b.mOut != null) {
15322534176fb5c1257130ef4ee589739ca42766a32Jason Sams                outID = b.mOut.mID;
15422534176fb5c1257130ef4ee589739ca42766a32Jason Sams            }
15522534176fb5c1257130ef4ee589739ca42766a32Jason Sams            rs.nProgramFragmentStoreBegin(inID, outID);
15622534176fb5c1257130ef4ee589739ca42766a32Jason Sams            rs.nProgramFragmentStoreDepthFunc(b.mDepthFunc.mID);
15722534176fb5c1257130ef4ee589739ca42766a32Jason Sams            rs.nProgramFragmentStoreDepthMask(b.mDepthMask);
15822534176fb5c1257130ef4ee589739ca42766a32Jason Sams            rs.nProgramFragmentStoreColorMask(b.mColorMaskR,
15922534176fb5c1257130ef4ee589739ca42766a32Jason Sams                                              b.mColorMaskG,
16022534176fb5c1257130ef4ee589739ca42766a32Jason Sams                                              b.mColorMaskB,
16122534176fb5c1257130ef4ee589739ca42766a32Jason Sams                                              b.mColorMaskA);
16222534176fb5c1257130ef4ee589739ca42766a32Jason Sams            rs.nProgramFragmentStoreBlendFunc(b.mBlendSrc.mID, b.mBlendDst.mID);
16322534176fb5c1257130ef4ee589739ca42766a32Jason Sams            rs.nProgramFragmentStoreDither(b.mDither);
16422534176fb5c1257130ef4ee589739ca42766a32Jason Sams
16522534176fb5c1257130ef4ee589739ca42766a32Jason Sams            int id = rs.nProgramFragmentStoreCreate();
16622534176fb5c1257130ef4ee589739ca42766a32Jason Sams            return new ProgramStore(id, rs);
16722534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
16822534176fb5c1257130ef4ee589739ca42766a32Jason Sams
16922534176fb5c1257130ef4ee589739ca42766a32Jason Sams        public ProgramStore create() {
17022534176fb5c1257130ef4ee589739ca42766a32Jason Sams            return internalCreate(mRS, this);
17122534176fb5c1257130ef4ee589739ca42766a32Jason Sams        }
17222534176fb5c1257130ef4ee589739ca42766a32Jason Sams    }
17322534176fb5c1257130ef4ee589739ca42766a32Jason Sams
17422534176fb5c1257130ef4ee589739ca42766a32Jason Sams}
17522534176fb5c1257130ef4ee589739ca42766a32Jason Sams
17622534176fb5c1257130ef4ee589739ca42766a32Jason Sams
17722534176fb5c1257130ef4ee589739ca42766a32Jason Sams
17822534176fb5c1257130ef4ee589739ca42766a32Jason Sams
179