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