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