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