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