1ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/* 2ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Copyright (C) 2012 The Android Open Source Project 3ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 4ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * you may not use this file except in compliance with the License. 6ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * You may obtain a copy of the License at 7ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 8ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * http://www.apache.org/licenses/LICENSE-2.0 9ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 10ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Unless required by applicable law or agreed to in writing, software 11ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * See the License for the specific language governing permissions and 14ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * limitations under the License. 15ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 16ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 17ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samspackage android.support.v8.renderscript; 18ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 19ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 20ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/** 21ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Intrinsic kernels for blending two buffers. Each blend function is a separate 22ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * kernel to make it easy to change between blend modes. 23ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams **/ 24ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Samspublic class ScriptIntrinsicBlend extends ScriptIntrinsic { 25ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams ScriptIntrinsicBlend(int id, RenderScript rs) { 26ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams super(id, rs); 27ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 28ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 29ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 30ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Supported elements types are uchar4 31ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 32ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 33ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param rs 34ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param e 35ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 36ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return ScriptIntrinsicBlend 37ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 38ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public static ScriptIntrinsicBlend create(RenderScript rs, Element e) { 39ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams // 7 comes from RS_SCRIPT_INTRINSIC_ID_BLEND in rsDefines.h 40ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams int id = rs.nScriptIntrinsicCreate(7, e.getID(rs)); 41ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return new ScriptIntrinsicBlend(id, rs); 42ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 43ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 44ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 45ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams private void blend(int id, Allocation ain, Allocation aout) { 46ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if (!ain.getElement().isCompatible(Element.U8_4(mRS))) { 47ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams throw new RSIllegalArgumentException("Input is not of expected format."); 48ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 49ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams if (!aout.getElement().isCompatible(Element.U8_4(mRS))) { 50ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams throw new RSIllegalArgumentException("Output is not of expected format."); 51ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 52ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams forEach(id, ain, aout, null); 53ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 54ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 55ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 56ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = {0, 0, 0, 0} 57ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 58ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 59ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 60ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 61ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachClear(Allocation ain, Allocation aout) { 62ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(0, ain, aout); 63ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 64ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 65ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 66ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the Clear kernel. 67ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 68ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 69ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 70ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDClear() { 71ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(0, 3, null, null); 72ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 73ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 74ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 75ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 76ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = src 77ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 78ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 79ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 80ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 81ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachSrc(Allocation ain, Allocation aout) { 82ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(1, ain, aout); 83ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 84ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 85ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 86ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the Src kernel. 87ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 88ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 89ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 90ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDSrc() { 91ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(1, 3, null, null); 92ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 93ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 94ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 95ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = dst 96ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * This is a NOP 97ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 98ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 99ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 100ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 101ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachDst(Allocation ain, Allocation aout) { 102ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams // NOP 103ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 104ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 105ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 106ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the Dst kernel. 107ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 108ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 109ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 110ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDDst() { 111ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(2, 3, null, null); 112ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 113ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 114ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 115ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = src + dst * (1.0 - src.a) 116ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 117ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 118ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 119ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 120ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachSrcOver(Allocation ain, Allocation aout) { 121ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(3, ain, aout); 122ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 123ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 124ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 125ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the SrcOver kernel. 126ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 127ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 128ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 129ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDSrcOver() { 130ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(3, 3, null, null); 131ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 132ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 133ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 134ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = dst + src * (1.0 - dst.a) 135ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 136ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 137ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 138ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 139ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachDstOver(Allocation ain, Allocation aout) { 140ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(4, ain, aout); 141ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 142ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 143ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 144ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the DstOver kernel. 145ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 146ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 147ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 148ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDDstOver() { 149ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(4, 3, null, null); 150ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 151ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 152ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 153ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = src * dst.a 154ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 155ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 156ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 157ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 158ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachSrcIn(Allocation ain, Allocation aout) { 159ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(5, ain, aout); 160ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 161ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 162ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 163ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the SrcIn kernel. 164ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 165ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 166ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 167ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDSrcIn() { 168ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(5, 3, null, null); 169ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 170ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 171ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 172ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = dst * src.a 173ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 174ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 175ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 176ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 177ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachDstIn(Allocation ain, Allocation aout) { 178ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(6, ain, aout); 179ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 180ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 181ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 182ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the DstIn kernel. 183ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 184ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 185ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 186ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDDstIn() { 187ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(6, 3, null, null); 188ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 189ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 190ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 191ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = src * (1.0 - dst.a) 192ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 193ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 194ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 195ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 196ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachSrcOut(Allocation ain, Allocation aout) { 197ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(7, ain, aout); 198ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 199ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 200ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 201ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the SrcOut kernel. 202ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 203ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 204ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 205ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDSrcOut() { 206ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(7, 3, null, null); 207ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 208ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 209ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 210ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = dst * (1.0 - src.a) 211ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 212ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 213ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 214ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 215ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachDstOut(Allocation ain, Allocation aout) { 216ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(8, ain, aout); 217ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 218ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 219ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 220ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the DstOut kernel. 221ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 222ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 223ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 224ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDDstOut() { 225ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(8, 3, null, null); 226ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 227ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 228ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 229ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst.rgb = src.rgb * dst.a + (1.0 - src.a) * dst.rgb 230ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst.a = dst.a 231ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 232ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 233ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 234ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 235ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachSrcAtop(Allocation ain, Allocation aout) { 236ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(9, ain, aout); 237ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 238ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 239ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 240ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the SrcAtop kernel. 241ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 242ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 243ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 244ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDSrcAtop() { 245ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(9, 3, null, null); 246ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 247ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 248ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 249ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb 250ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst.a = src.a 251ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 252ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 253ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 254ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 255ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachDstAtop(Allocation ain, Allocation aout) { 256ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(10, ain, aout); 257ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 258ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 259ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 260ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the DstAtop kernel. 261ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 262ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 263ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 264ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDDstAtop() { 265ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(10, 3, null, null); 266ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 267ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 268ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 269ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a} 270ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 271ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 272ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 273ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 274ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachXor(Allocation ain, Allocation aout) { 275ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(11, ain, aout); 276ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 277ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 278ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 279ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the Xor kernel. 280ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 281ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 282ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 283ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDXor() { 284ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(11, 3, null, null); 285ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 286ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 287ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams //////// 288ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/* 289ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachNormal(Allocation ain, Allocation aout) { 290ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(12, ain, aout); 291ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 292ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 293ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachAverage(Allocation ain, Allocation aout) { 294ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(13, ain, aout); 295ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 296ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams*/ 297ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 298ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = src * dst 299ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 300ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 301ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 302ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 303ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachMultiply(Allocation ain, Allocation aout) { 304ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(14, ain, aout); 305ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 306ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 307ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 308ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the Multiply kernel. 309ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 310ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 311ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 312ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDMultiply() { 313ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(14, 3, null, null); 314ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 315ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 316ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/* 317ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachScreen(Allocation ain, Allocation aout) { 318ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(15, ain, aout); 319ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 320ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 321ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachDarken(Allocation ain, Allocation aout) { 322ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(16, ain, aout); 323ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 324ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 325ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachLighten(Allocation ain, Allocation aout) { 326ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(17, ain, aout); 327ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 328ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 329ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachOverlay(Allocation ain, Allocation aout) { 330ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(18, ain, aout); 331ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 332ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 333ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachHardlight(Allocation ain, Allocation aout) { 334ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(19, ain, aout); 335ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 336ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 337ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachSoftlight(Allocation ain, Allocation aout) { 338ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(20, ain, aout); 339ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 340ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 341ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachDifference(Allocation ain, Allocation aout) { 342ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(21, ain, aout); 343ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 344ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 345ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachNegation(Allocation ain, Allocation aout) { 346ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(22, ain, aout); 347ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 348ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 349ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachExclusion(Allocation ain, Allocation aout) { 350ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(23, ain, aout); 351ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 352ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 353ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachColorDodge(Allocation ain, Allocation aout) { 354ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(24, ain, aout); 355ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 356ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 357ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachInverseColorDodge(Allocation ain, Allocation aout) { 358ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(25, ain, aout); 359ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 360ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 361ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachSoftDodge(Allocation ain, Allocation aout) { 362ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(26, ain, aout); 363ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 364ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 365ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachColorBurn(Allocation ain, Allocation aout) { 366ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(27, ain, aout); 367ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 368ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 369ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachInverseColorBurn(Allocation ain, Allocation aout) { 370ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(28, ain, aout); 371ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 372ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 373ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachSoftBurn(Allocation ain, Allocation aout) { 374ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(29, ain, aout); 375ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 376ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 377ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachReflect(Allocation ain, Allocation aout) { 378ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(30, ain, aout); 379ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 380ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 381ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachGlow(Allocation ain, Allocation aout) { 382ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(31, ain, aout); 383ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 384ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 385ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachFreeze(Allocation ain, Allocation aout) { 386ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(32, ain, aout); 387ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 388ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 389ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachHeat(Allocation ain, Allocation aout) { 390ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(33, ain, aout); 391ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 392ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams*/ 393ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 394ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = min(src + dst, 1.0) 395ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 396ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 397ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 398ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 399ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachAdd(Allocation ain, Allocation aout) { 400ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(34, ain, aout); 401ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 402ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 403ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 404ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the Add kernel. 405ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 406ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 407ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 408ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDAdd() { 409ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(34, 3, null, null); 410ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 411ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 412ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 413ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * dst = max(dst - src, 0.0) 414ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 415ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param ain The source buffer 416ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @param aout The destination buffer 417ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 418ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachSubtract(Allocation ain, Allocation aout) { 419ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(35, ain, aout); 420ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 421ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 422ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams /** 423ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * Get a KernelID for the Subtract kernel. 424ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * 425ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams * @return Script.KernelID The KernelID object. 426ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams */ 427ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public Script.KernelID getKernelIDSubtract() { 428ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams return createKernelID(35, 3, null, null); 429ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 430ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 431ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams/* 432ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachStamp(Allocation ain, Allocation aout) { 433ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(36, ain, aout); 434ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 435ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 436ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachRed(Allocation ain, Allocation aout) { 437ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(37, ain, aout); 438ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 439ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 440ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachGreen(Allocation ain, Allocation aout) { 441ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(38, ain, aout); 442ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 443ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 444ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachBlue(Allocation ain, Allocation aout) { 445ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(39, ain, aout); 446ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 447ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 448ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachHue(Allocation ain, Allocation aout) { 449ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(40, ain, aout); 450ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 451ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 452ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachSaturation(Allocation ain, Allocation aout) { 453ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(41, ain, aout); 454ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 455ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 456ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachColor(Allocation ain, Allocation aout) { 457ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(42, ain, aout); 458ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 459ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 460ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams public void forEachLuminosity(Allocation ain, Allocation aout) { 461ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams blend(43, ain, aout); 462ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams } 463ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams*/ 464ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams} 465ca29b8caf56fa4866752f9cea4ec02b2a271dceeJason Sams 466