1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.renderscript; 18 19 20 import android.util.Config; 21 import android.util.Log; 22 23 24 /** 25 * @hide 26 * 27 **/ 28 public class ProgramFragment extends BaseObj { 29 public static final int MAX_SLOT = 2; 30 31 public enum EnvMode { 32 REPLACE (0), 33 MODULATE (1), 34 DECAL (2); 35 36 int mID; EnvMode(int id)37 EnvMode(int id) { 38 mID = id; 39 } 40 } 41 42 ProgramFragment(int id, RenderScript rs)43 ProgramFragment(int id, RenderScript rs) { 44 super(rs); 45 mID = id; 46 } 47 bindTexture(Allocation va, int slot)48 public void bindTexture(Allocation va, int slot) 49 throws IllegalArgumentException { 50 if((slot < 0) || (slot >= MAX_SLOT)) { 51 throw new IllegalArgumentException("Slot ID out of range."); 52 } 53 54 mRS.nProgramFragmentBindTexture(mID, slot, va.mID); 55 } 56 bindSampler(Sampler vs, int slot)57 public void bindSampler(Sampler vs, int slot) 58 throws IllegalArgumentException { 59 if((slot < 0) || (slot >= MAX_SLOT)) { 60 throw new IllegalArgumentException("Slot ID out of range."); 61 } 62 63 mRS.nProgramFragmentBindSampler(mID, slot, vs.mID); 64 } 65 66 67 public static class Builder { 68 RenderScript mRS; 69 Element mIn; 70 Element mOut; 71 boolean mPointSpriteEnable; 72 73 private class Slot { 74 Type mType; 75 EnvMode mEnv; 76 boolean mTexEnable; 77 Slot()78 Slot() { 79 mTexEnable = false; 80 } 81 } 82 Slot[] mSlots; 83 Builder(RenderScript rs, Element in, Element out)84 public Builder(RenderScript rs, Element in, Element out) { 85 mRS = rs; 86 mIn = in; 87 mOut = out; 88 mSlots = new Slot[MAX_SLOT]; 89 mPointSpriteEnable = false; 90 for(int ct=0; ct < MAX_SLOT; ct++) { 91 mSlots[ct] = new Slot(); 92 } 93 } 94 setType(int slot, Type t)95 public void setType(int slot, Type t) 96 throws IllegalArgumentException { 97 if((slot < 0) || (slot >= MAX_SLOT)) { 98 throw new IllegalArgumentException("Slot ID out of range."); 99 } 100 101 mSlots[slot].mType = t; 102 } 103 setTexEnable(boolean enable, int slot)104 public void setTexEnable(boolean enable, int slot) 105 throws IllegalArgumentException { 106 if((slot < 0) || (slot >= MAX_SLOT)) { 107 throw new IllegalArgumentException("Slot ID out of range."); 108 } 109 110 mSlots[slot].mTexEnable = enable; 111 } 112 setTexEnvMode(EnvMode env, int slot)113 public void setTexEnvMode(EnvMode env, int slot) 114 throws IllegalArgumentException { 115 if((slot < 0) || (slot >= MAX_SLOT)) { 116 throw new IllegalArgumentException("Slot ID out of range."); 117 } 118 119 mSlots[slot].mEnv = env; 120 } 121 setPointSpriteTexCoordinateReplacement(boolean enable)122 public void setPointSpriteTexCoordinateReplacement(boolean enable) { 123 mPointSpriteEnable = enable; 124 } 125 internalCreate(RenderScript rs, Builder b)126 static synchronized ProgramFragment internalCreate(RenderScript rs, Builder b) { 127 int inID = 0; 128 int outID = 0; 129 if (b.mIn != null) { 130 inID = b.mIn.mID; 131 } 132 if (b.mOut != null) { 133 outID = b.mOut.mID; 134 } 135 rs.nProgramFragmentBegin(inID, outID, b.mPointSpriteEnable); 136 for(int ct=0; ct < MAX_SLOT; ct++) { 137 if(b.mSlots[ct].mTexEnable) { 138 Slot s = b.mSlots[ct]; 139 int typeID = 0; 140 if(s.mType != null) { 141 typeID = s.mType.mID; 142 } 143 rs.nProgramFragmentSetSlot(ct, true, s.mEnv.mID, typeID); 144 } 145 } 146 147 int id = rs.nProgramFragmentCreate(); 148 return new ProgramFragment(id, rs); 149 } 150 create()151 public ProgramFragment create() { 152 return internalCreate(mRS, this); 153 } 154 } 155 } 156 157 158 159