2009-08-04 16:58:20 -07:00
|
|
|
/*
|
|
|
|
* 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),
|
2009-10-28 17:40:13 -07:00
|
|
|
ONE_MINUS_DST_ALPHA (7),
|
2009-08-04 16:58:20 -07:00
|
|
|
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),
|
2009-10-28 17:40:13 -07:00
|
|
|
ONE_MINUS_DST_ALPHA (7);
|
2009-08-04 16:58:20 -07:00
|
|
|
|
|
|
|
int mID;
|
|
|
|
BlendDstFunc(int id) {
|
|
|
|
mID = id;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ProgramStore(int id, RenderScript rs) {
|
2010-08-11 14:41:28 -07:00
|
|
|
super(id, rs);
|
2009-08-04 16:58:20 -07:00
|
|
|
}
|
|
|
|
|
2010-08-24 11:37:33 -07:00
|
|
|
public static ProgramStore BLEND_NONE_DEPTH_TEST(RenderScript rs) {
|
|
|
|
if(rs.mProgramStore_BLEND_NONE_DEPTH_TEST == null) {
|
2010-08-23 10:24:10 -07:00
|
|
|
ProgramStore.Builder builder = new ProgramStore.Builder(rs);
|
|
|
|
builder.setDepthFunc(ProgramStore.DepthFunc.LESS);
|
|
|
|
builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ZERO);
|
|
|
|
builder.setDitherEnable(false);
|
|
|
|
builder.setDepthMask(true);
|
2010-08-24 11:37:33 -07:00
|
|
|
rs.mProgramStore_BLEND_NONE_DEPTH_TEST = builder.create();
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
return rs.mProgramStore_BLEND_NONE_DEPTH_TEST;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
public static ProgramStore BLEND_NONE_DEPTH_NO_DEPTH(RenderScript rs) {
|
|
|
|
if(rs.mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH == null) {
|
2010-08-23 10:24:10 -07:00
|
|
|
ProgramStore.Builder builder = new ProgramStore.Builder(rs);
|
|
|
|
builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS);
|
|
|
|
builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ZERO);
|
|
|
|
builder.setDitherEnable(false);
|
|
|
|
builder.setDepthMask(false);
|
2010-08-24 11:37:33 -07:00
|
|
|
rs.mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH = builder.create();
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
return rs.mProgramStore_BLEND_NONE_DEPTH_NO_DEPTH;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
public static ProgramStore BLEND_NONE_DEPTH_NO_TEST(RenderScript rs) {
|
|
|
|
if(rs.mProgramStore_BLEND_NONE_DEPTH_NO_TEST == null) {
|
2010-08-23 10:24:10 -07:00
|
|
|
ProgramStore.Builder builder = new ProgramStore.Builder(rs);
|
|
|
|
builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS);
|
|
|
|
builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ZERO);
|
|
|
|
builder.setDitherEnable(false);
|
|
|
|
builder.setDepthMask(true);
|
2010-08-24 11:37:33 -07:00
|
|
|
rs.mProgramStore_BLEND_NONE_DEPTH_NO_TEST = builder.create();
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
return rs.mProgramStore_BLEND_NONE_DEPTH_NO_TEST;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
public static ProgramStore BLEND_NONE_DEPTH_NO_WRITE(RenderScript rs) {
|
|
|
|
if(rs.mProgramStore_BLEND_NONE_DEPTH_NO_WRITE == null) {
|
2010-08-23 10:24:10 -07:00
|
|
|
ProgramStore.Builder builder = new ProgramStore.Builder(rs);
|
|
|
|
builder.setDepthFunc(ProgramStore.DepthFunc.LESS);
|
|
|
|
builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ZERO);
|
|
|
|
builder.setDitherEnable(false);
|
|
|
|
builder.setDepthMask(false);
|
2010-08-24 11:37:33 -07:00
|
|
|
rs.mProgramStore_BLEND_NONE_DEPTH_NO_WRITE = builder.create();
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
return rs.mProgramStore_BLEND_NONE_DEPTH_NO_WRITE;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
|
|
|
|
2010-08-24 11:37:33 -07:00
|
|
|
public static ProgramStore BLEND_ALPHA_DEPTH_TEST(RenderScript rs) {
|
|
|
|
if(rs.mProgramStore_BLEND_ALPHA_DEPTH_TEST == null) {
|
2010-08-23 10:24:10 -07:00
|
|
|
ProgramStore.Builder builder = new ProgramStore.Builder(rs);
|
|
|
|
builder.setDepthFunc(ProgramStore.DepthFunc.LESS);
|
|
|
|
builder.setBlendFunc(BlendSrcFunc.SRC_ALPHA, BlendDstFunc.ONE_MINUS_SRC_ALPHA);
|
|
|
|
builder.setDitherEnable(false);
|
|
|
|
builder.setDepthMask(true);
|
2010-08-24 11:37:33 -07:00
|
|
|
rs.mProgramStore_BLEND_ALPHA_DEPTH_TEST = builder.create();
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
return rs.mProgramStore_BLEND_ALPHA_DEPTH_TEST;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
public static ProgramStore BLEND_ALPHA_DEPTH_NO_DEPTH(RenderScript rs) {
|
|
|
|
if(rs.mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH == null) {
|
2010-08-23 10:24:10 -07:00
|
|
|
ProgramStore.Builder builder = new ProgramStore.Builder(rs);
|
|
|
|
builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS);
|
|
|
|
builder.setBlendFunc(BlendSrcFunc.SRC_ALPHA, BlendDstFunc.ONE_MINUS_SRC_ALPHA);
|
|
|
|
builder.setDitherEnable(false);
|
|
|
|
builder.setDepthMask(false);
|
2010-08-24 11:37:33 -07:00
|
|
|
rs.mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH = builder.create();
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
return rs.mProgramStore_BLEND_ALPHA_DEPTH_NO_DEPTH;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
public static ProgramStore BLEND_ALPHA_DEPTH_NO_TEST(RenderScript rs) {
|
|
|
|
if(rs.mProgramStore_BLEND_ALPHA_DEPTH_NO_TEST == null) {
|
2010-08-23 10:24:10 -07:00
|
|
|
ProgramStore.Builder builder = new ProgramStore.Builder(rs);
|
|
|
|
builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS);
|
|
|
|
builder.setBlendFunc(BlendSrcFunc.SRC_ALPHA, BlendDstFunc.ONE_MINUS_SRC_ALPHA);
|
|
|
|
builder.setDitherEnable(false);
|
|
|
|
builder.setDepthMask(true);
|
2010-08-24 11:37:33 -07:00
|
|
|
rs.mProgramStore_BLEND_ALPHA_DEPTH_NO_TEST = builder.create();
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
return rs.mProgramStore_BLEND_ALPHA_DEPTH_NO_TEST;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
public static ProgramStore BLEND_ALPHA_DEPTH_NO_WRITE(RenderScript rs) {
|
|
|
|
if(rs.mProgramStore_BLEND_ALPHA_DEPTH_NO_WRITE == null) {
|
2010-08-23 10:24:10 -07:00
|
|
|
ProgramStore.Builder builder = new ProgramStore.Builder(rs);
|
|
|
|
builder.setDepthFunc(ProgramStore.DepthFunc.LESS);
|
|
|
|
builder.setBlendFunc(BlendSrcFunc.SRC_ALPHA, BlendDstFunc.ONE_MINUS_SRC_ALPHA);
|
|
|
|
builder.setDitherEnable(false);
|
|
|
|
builder.setDepthMask(false);
|
2010-08-24 11:37:33 -07:00
|
|
|
rs.mProgramStore_BLEND_ALPHA_DEPTH_NO_WRITE = builder.create();
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
return rs.mProgramStore_BLEND_ALPHA_DEPTH_NO_WRITE;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2009-08-04 16:58:20 -07:00
|
|
|
|
2010-08-24 11:37:33 -07:00
|
|
|
public static ProgramStore BLEND_ADD_DEPTH_TEST(RenderScript rs) {
|
|
|
|
if(rs.mProgramStore_BLEND_ADD_DEPTH_TEST == null) {
|
2010-08-23 10:24:10 -07:00
|
|
|
ProgramStore.Builder builder = new ProgramStore.Builder(rs);
|
|
|
|
builder.setDepthFunc(ProgramStore.DepthFunc.LESS);
|
|
|
|
builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ONE);
|
|
|
|
builder.setDitherEnable(false);
|
|
|
|
builder.setDepthMask(true);
|
2010-08-24 11:37:33 -07:00
|
|
|
rs.mProgramStore_BLEND_ADD_DEPTH_TEST = builder.create();
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
return rs.mProgramStore_BLEND_ADD_DEPTH_TEST;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
public static ProgramStore BLEND_ADD_DEPTH_NO_DEPTH(RenderScript rs) {
|
|
|
|
if(rs.mProgramStore_BLEND_ADD_DEPTH_NO_DEPTH == null) {
|
2010-08-23 10:24:10 -07:00
|
|
|
ProgramStore.Builder builder = new ProgramStore.Builder(rs);
|
|
|
|
builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS);
|
|
|
|
builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ONE);
|
|
|
|
builder.setDitherEnable(false);
|
|
|
|
builder.setDepthMask(false);
|
2010-08-24 11:37:33 -07:00
|
|
|
rs.mProgramStore_BLEND_ADD_DEPTH_NO_DEPTH = builder.create();
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
return rs.mProgramStore_BLEND_ADD_DEPTH_NO_DEPTH;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
public static ProgramStore BLEND_ADD_DEPTH_NO_TEST(RenderScript rs) {
|
|
|
|
if(rs.mProgramStore_BLEND_ADD_DEPTH_NO_TEST == null) {
|
2010-08-23 10:24:10 -07:00
|
|
|
ProgramStore.Builder builder = new ProgramStore.Builder(rs);
|
|
|
|
builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS);
|
|
|
|
builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ONE);
|
|
|
|
builder.setDitherEnable(false);
|
|
|
|
builder.setDepthMask(true);
|
2010-08-24 11:37:33 -07:00
|
|
|
rs.mProgramStore_BLEND_ADD_DEPTH_NO_DEPTH = builder.create();
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
return rs.mProgramStore_BLEND_ADD_DEPTH_NO_TEST;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
public static ProgramStore BLEND_ADD_DEPTH_NO_WRITE(RenderScript rs) {
|
|
|
|
if(rs.mProgramStore_BLEND_ADD_DEPTH_NO_WRITE == null) {
|
2010-08-23 10:24:10 -07:00
|
|
|
ProgramStore.Builder builder = new ProgramStore.Builder(rs);
|
|
|
|
builder.setDepthFunc(ProgramStore.DepthFunc.ALWAYS);
|
|
|
|
builder.setBlendFunc(BlendSrcFunc.ONE, BlendDstFunc.ONE);
|
|
|
|
builder.setDitherEnable(false);
|
|
|
|
builder.setDepthMask(false);
|
2010-08-24 11:37:33 -07:00
|
|
|
rs.mProgramStore_BLEND_ADD_DEPTH_NO_WRITE = builder.create();
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2010-08-24 11:37:33 -07:00
|
|
|
return rs.mProgramStore_BLEND_ADD_DEPTH_NO_WRITE;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2009-08-04 16:58:20 -07:00
|
|
|
|
|
|
|
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;
|
2010-08-23 10:24:10 -07:00
|
|
|
}
|
2009-08-04 16:58:20 -07:00
|
|
|
|
2010-08-23 10:24:10 -07:00
|
|
|
public Builder(RenderScript rs) {
|
|
|
|
mRS = rs;
|
|
|
|
mIn = null;
|
|
|
|
mOut = null;
|
|
|
|
mDepthFunc = DepthFunc.ALWAYS;
|
|
|
|
mDepthMask = false;
|
|
|
|
mColorMaskR = true;
|
|
|
|
mColorMaskG = true;
|
|
|
|
mColorMaskB = true;
|
|
|
|
mColorMaskA = true;
|
|
|
|
mBlendSrc = BlendSrcFunc.ONE;
|
|
|
|
mBlendDst = BlendDstFunc.ZERO;
|
2009-08-04 16:58:20 -07:00
|
|
|
}
|
|
|
|
|
2010-07-07 14:24:21 -07:00
|
|
|
public Builder setDepthFunc(DepthFunc func) {
|
2009-08-04 16:58:20 -07:00
|
|
|
mDepthFunc = func;
|
2010-07-07 14:24:21 -07:00
|
|
|
return this;
|
2009-08-04 16:58:20 -07:00
|
|
|
}
|
|
|
|
|
2010-07-07 14:24:21 -07:00
|
|
|
public Builder setDepthMask(boolean enable) {
|
2009-08-04 16:58:20 -07:00
|
|
|
mDepthMask = enable;
|
2010-07-07 14:24:21 -07:00
|
|
|
return this;
|
2009-08-04 16:58:20 -07:00
|
|
|
}
|
|
|
|
|
2010-07-07 14:24:21 -07:00
|
|
|
public Builder setColorMask(boolean r, boolean g, boolean b, boolean a) {
|
2009-08-04 16:58:20 -07:00
|
|
|
mColorMaskR = r;
|
|
|
|
mColorMaskG = g;
|
|
|
|
mColorMaskB = b;
|
|
|
|
mColorMaskA = a;
|
2010-07-07 14:24:21 -07:00
|
|
|
return this;
|
2009-08-04 16:58:20 -07:00
|
|
|
}
|
|
|
|
|
2010-07-07 14:24:21 -07:00
|
|
|
public Builder setBlendFunc(BlendSrcFunc src, BlendDstFunc dst) {
|
2009-08-04 16:58:20 -07:00
|
|
|
mBlendSrc = src;
|
|
|
|
mBlendDst = dst;
|
2010-07-07 14:24:21 -07:00
|
|
|
return this;
|
2009-08-04 16:58:20 -07:00
|
|
|
}
|
|
|
|
|
2010-07-07 14:24:21 -07:00
|
|
|
public Builder setDitherEnable(boolean enable) {
|
2009-08-04 16:58:20 -07:00
|
|
|
mDither = enable;
|
2010-07-07 14:24:21 -07:00
|
|
|
return this;
|
2009-08-04 16:58:20 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
2010-05-13 18:30:11 -07:00
|
|
|
rs.nProgramStoreBegin(inID, outID);
|
|
|
|
rs.nProgramStoreDepthFunc(b.mDepthFunc.mID);
|
|
|
|
rs.nProgramStoreDepthMask(b.mDepthMask);
|
|
|
|
rs.nProgramStoreColorMask(b.mColorMaskR,
|
2009-08-04 16:58:20 -07:00
|
|
|
b.mColorMaskG,
|
|
|
|
b.mColorMaskB,
|
|
|
|
b.mColorMaskA);
|
2010-05-13 18:30:11 -07:00
|
|
|
rs.nProgramStoreBlendFunc(b.mBlendSrc.mID, b.mBlendDst.mID);
|
|
|
|
rs.nProgramStoreDither(b.mDither);
|
2009-08-04 16:58:20 -07:00
|
|
|
|
2010-05-13 18:30:11 -07:00
|
|
|
int id = rs.nProgramStoreCreate();
|
2009-08-04 16:58:20 -07:00
|
|
|
return new ProgramStore(id, rs);
|
|
|
|
}
|
|
|
|
|
|
|
|
public ProgramStore create() {
|
2009-12-07 12:40:12 -08:00
|
|
|
mRS.validate();
|
2009-08-04 16:58:20 -07:00
|
|
|
return internalCreate(mRS, this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|