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