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