diff options
author | Jason Sams <rjsams@android.com> | 2009-08-04 16:58:20 -0700 |
---|---|---|
committer | Jason Sams <rjsams@android.com> | 2009-08-04 17:05:43 -0700 |
commit | 22534176fb5c1257130ef4ee589739ca42766a32 (patch) | |
tree | d7efb4494b65e4769203b9a879646c7407d63cc9 /graphics/java/android/renderscript/ProgramFragment.java | |
parent | 959b7bd96b18f84510e8af72d7a439140edb5169 (diff) | |
download | frameworks_base-22534176fb5c1257130ef4ee589739ca42766a32.zip frameworks_base-22534176fb5c1257130ef4ee589739ca42766a32.tar.gz frameworks_base-22534176fb5c1257130ef4ee589739ca42766a32.tar.bz2 |
Split ProgramFragment and ProgramStore from RenderScript.java. Update Element and Type to new cached builder for easier app developement.
Diffstat (limited to 'graphics/java/android/renderscript/ProgramFragment.java')
-rw-r--r-- | graphics/java/android/renderscript/ProgramFragment.java | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/graphics/java/android/renderscript/ProgramFragment.java b/graphics/java/android/renderscript/ProgramFragment.java new file mode 100644 index 0000000..d98fe03 --- /dev/null +++ b/graphics/java/android/renderscript/ProgramFragment.java @@ -0,0 +1,150 @@ +/* + * 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 ProgramFragment extends BaseObj { + public enum EnvMode { + REPLACE (0), + MODULATE (1), + DECAL (2); + + int mID; + EnvMode(int id) { + mID = id; + } + } + + + ProgramFragment(int id, RenderScript rs) { + super(rs); + mID = id; + } + + public void destroy() { + mRS.nProgramFragmentStoreDestroy(mID); + mID = 0; + } + + public void bindTexture(Allocation va, int slot) { + mRS.nProgramFragmentBindTexture(mID, slot, va.mID); + } + + public void bindSampler(RenderScript.Sampler vs, int slot) { + mRS.nProgramFragmentBindSampler(mID, slot, vs.mID); + } + + + public static class Builder { + public static final int MAX_SLOT = 2; + RenderScript mRS; + Element mIn; + Element mOut; + + private class Slot { + Type mType; + EnvMode mEnv; + boolean mTexEnable; + + Slot() { + mTexEnable = false; + } + } + Slot[] mSlots; + + public Builder(RenderScript rs, Element in, Element out) { + mRS = rs; + mIn = in; + mOut = out; + mSlots = new Slot[MAX_SLOT]; + for(int ct=0; ct < MAX_SLOT; ct++) { + mSlots[ct] = new Slot(); + } + } + + public void setType(int slot, Type t) + throws IllegalArgumentException { + if((slot < 0) || (slot >= MAX_SLOT)) { + throw new IllegalArgumentException("Slot ID out of range."); + } + + mSlots[slot].mType = t; + } + + public void setTexEnable(boolean enable, int slot) + throws IllegalArgumentException { + if((slot < 0) || (slot >= MAX_SLOT)) { + throw new IllegalArgumentException("Slot ID out of range."); + } + + mSlots[slot].mTexEnable = enable; + } + + public void setTexEnvMode(EnvMode env, int slot) + throws IllegalArgumentException { + if((slot < 0) || (slot >= MAX_SLOT)) { + throw new IllegalArgumentException("Slot ID out of range."); + } + + mSlots[slot].mEnv = env; + } + + + static synchronized ProgramFragment 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.nProgramFragmentBegin(inID, outID); + for(int ct=0; ct < MAX_SLOT; ct++) { + if(b.mSlots[ct].mTexEnable) { + Slot s = b.mSlots[ct]; + if(s.mType != null) { + rs.nProgramFragmentSetType(ct, s.mType.mID); + } + rs.nProgramFragmentSetTexEnable(ct, true); + if(s.mEnv != null) { + rs.nProgramFragmentSetEnvMode(ct, s.mEnv.mID); + } + } + } + + + int id = rs.nProgramFragmentCreate(); + return new ProgramFragment(id, rs); + } + + public ProgramFragment create() { + return internalCreate(mRS, this); + } + } +} + + + |