ScriptIntrinsicBlend.java revision 8fdcf4a08af75d91ca8611b867e57cdf73c4bc49
1/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.renderscript;
18
19
20/**
21 * Intrinsic kernels for blending two {@link android.renderscript.Allocation} objects.
22 **/
23public class ScriptIntrinsicBlend extends ScriptIntrinsic {
24    ScriptIntrinsicBlend(long id, RenderScript rs) {
25        super(id, rs);
26    }
27
28    /**
29     * Supported elements types are {@link Element#U8_4}
30     *
31     * @param rs The RenderScript context
32     * @param e Element type for inputs and outputs
33     *
34     * @return ScriptIntrinsicBlend
35     */
36    public static ScriptIntrinsicBlend create(RenderScript rs, Element e) {
37        // 7 comes from RS_SCRIPT_INTRINSIC_ID_BLEND in rsDefines.h
38        long id = rs.nScriptIntrinsicCreate(7, e.getID(rs));
39        return new ScriptIntrinsicBlend(id, rs);
40
41    }
42
43    private void blend(int id, Allocation ain, Allocation aout, Script.LaunchOptions opt) {
44        if (!ain.getElement().isCompatible(Element.U8_4(mRS))) {
45            throw new RSIllegalArgumentException("Input is not of expected format.");
46        }
47        if (!aout.getElement().isCompatible(Element.U8_4(mRS))) {
48            throw new RSIllegalArgumentException("Output is not of expected format.");
49        }
50        forEach(id, ain, aout, null, opt);
51    }
52
53    /**
54     * Sets dst = {0, 0, 0, 0}
55     *
56     * @param ain The source buffer
57     * @param aout The destination buffer
58     */
59    public void forEachClear(Allocation ain, Allocation aout) {
60        forEachClear(ain, aout, null);
61    }
62
63    /**
64     * Sets dst = {0, 0, 0, 0}
65     *
66     * @param ain The source buffer
67     * @param aout The destination buffer
68     * @param opt LaunchOptions for clipping
69     */
70    public void forEachClear(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
71        blend(0, ain, aout, opt);
72    }
73
74    /**
75     * Get a KernelID for the Clear kernel.
76     *
77     * @return Script.KernelID The KernelID object.
78     */
79    public Script.KernelID getKernelIDClear() {
80        return createKernelID(0, 3, null, null);
81    }
82
83
84    /**
85     * Sets dst = src
86     *
87     * @param ain The source buffer
88     * @param aout The destination buffer
89     */
90    public void forEachSrc(Allocation ain, Allocation aout) {
91        forEachSrc(ain, aout, null);
92    }
93
94    /**
95     * Sets dst = src
96     *
97     * @param ain The source buffer
98     * @param aout The destination buffer
99     * @param opt LaunchOptions for clipping
100     */
101    public void forEachSrc(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
102        blend(1, ain, aout, null);
103    }
104
105    /**
106     * Get a KernelID for the Src kernel.
107     *
108     * @return Script.KernelID The KernelID object.
109     */
110    public Script.KernelID getKernelIDSrc() {
111        return createKernelID(1, 3, null, null);
112    }
113
114    /**
115     * Sets dst = dst
116     *
117     * This is a NOP.
118     *
119     * @param ain The source buffer
120     * @param aout The destination buffer
121     */
122    public void forEachDst(Allocation ain, Allocation aout) {
123        // NOP
124    }
125
126    /**
127     * Sets dst = dst
128     *
129     * This is a NOP.
130     *
131     * @param ain The source buffer
132     * @param aout The destination buffer
133     * @param opt LaunchOptions for clipping
134     */
135    public void forEachDst(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
136        // N, optOP
137    }
138
139    /**
140     * Get a KernelID for the Dst kernel.
141     *
142     * @return Script.KernelID The KernelID object.
143     */
144    public Script.KernelID getKernelIDDst() {
145        return createKernelID(2, 3, null, null);
146    }
147
148    /**
149     * Sets dst = src + dst * (1.0 - src.a)
150     *
151     * @param ain The source buffer
152     * @param aout The destination buffer
153     */
154    public void forEachSrcOver(Allocation ain, Allocation aout) {
155        forEachSrcOver(ain, aout, null);
156    }
157
158    /**
159     * Sets dst = src + dst * (1.0 - src.a)
160     *
161     * @param ain The source buffer
162     * @param aout The destination buffer
163     * @param opt LaunchOptions for clipping
164     */
165    public void forEachSrcOver(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
166        blend(3, ain, aout, opt);
167    }
168
169    /**
170     * Get a KernelID for the SrcOver kernel.
171     *
172     * @return Script.KernelID The KernelID object.
173     */
174    public Script.KernelID getKernelIDSrcOver() {
175        return createKernelID(3, 3, null, null);
176    }
177
178    /**
179     * Sets dst = dst + src * (1.0 - dst.a)
180     *
181     * @param ain The source buffer
182     * @param aout The destination buffer
183     */
184    public void forEachDstOver(Allocation ain, Allocation aout) {
185        forEachDstOver(ain, aout, null);
186    }
187
188    /**
189     * Sets dst = dst + src * (1.0 - dst.a)
190     *
191     * @param ain The source buffer
192     * @param aout The destination buffer
193     * @param opt LaunchOptions for clipping
194     */
195    public void forEachDstOver(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
196        blend(4, ain, aout, opt);
197    }
198
199    /**
200     * Get a KernelID for the DstOver kernel.
201     *
202     * @return Script.KernelID The KernelID object.
203     */
204    public Script.KernelID getKernelIDDstOver() {
205        return createKernelID(4, 3, null, null);
206    }
207
208    /**
209     * Sets dst = src * dst.a
210     *
211     * @param ain The source buffer
212     * @param aout The destination buffer
213     */
214    public void forEachSrcIn(Allocation ain, Allocation aout) {
215        forEachSrcIn(ain, aout, null);
216    }
217
218    /**
219     * Sets dst = src * dst.a
220     *
221     * @param ain The source buffer
222     * @param aout The destination buffer
223     * @param opt LaunchOptions for clipping
224     */
225    public void forEachSrcIn(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
226        blend(5, ain, aout, opt);
227    }
228
229    /**
230     * Get a KernelID for the SrcIn kernel.
231     *
232     * @return Script.KernelID The KernelID object.
233     */
234    public Script.KernelID getKernelIDSrcIn() {
235        return createKernelID(5, 3, null, null);
236    }
237
238    /**
239     * Sets dst = dst * src.a
240     *
241     * @param ain The source buffer
242     * @param aout The destination buffer
243     */
244    public void forEachDstIn(Allocation ain, Allocation aout) {
245        forEachDstIn(ain, aout, null);
246    }
247
248    /**
249     * Sets dst = dst * src.a
250     *
251     * @param ain The source buffer
252     * @param aout The destination buffer
253     * @param opt LaunchOptions for clipping
254     */
255    public void forEachDstIn(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
256        blend(6, ain, aout, opt);
257    }
258
259    /**
260     * Get a KernelID for the DstIn kernel.
261     *
262     * @return Script.KernelID The KernelID object.
263     */
264    public Script.KernelID getKernelIDDstIn() {
265        return createKernelID(6, 3, null, null);
266    }
267
268    /**
269     * Sets dst = src * (1.0 - dst.a)
270     *
271     * @param ain The source buffer
272     * @param aout The destination buffer
273     */
274    public void forEachSrcOut(Allocation ain, Allocation aout) {
275        forEachSrcOut(ain, aout, null);
276    }
277
278    /**
279     * Sets dst = src * (1.0 - dst.a)
280     *
281     * @param ain The source buffer
282     * @param aout The destination buffer
283     * @param opt LaunchOptions for clipping
284     */
285    public void forEachSrcOut(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
286        blend(7, ain, aout, opt);
287    }
288
289    /**
290     * Get a KernelID for the SrcOut kernel.
291     *
292     * @return Script.KernelID The KernelID object.
293     */
294    public Script.KernelID getKernelIDSrcOut() {
295        return createKernelID(7, 3, null, null);
296    }
297
298    /**
299     * Sets dst = dst * (1.0 - src.a)
300     *
301     * @param ain The source buffer
302     * @param aout The destination buffer
303     */
304    public void forEachDstOut(Allocation ain, Allocation aout) {
305        forEachDstOut(ain, aout, null);
306    }
307
308    /**
309     * Sets dst = dst * (1.0 - src.a)
310     *
311     * @param ain The source buffer
312     * @param aout The destination buffer
313     * @param opt LaunchOptions for clipping
314     */
315    public void forEachDstOut(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
316        blend(8, ain, aout, opt);
317    }
318
319    /**
320     * Get a KernelID for the DstOut kernel.
321     *
322     * @return Script.KernelID The KernelID object.
323     */
324    public Script.KernelID getKernelIDDstOut() {
325        return createKernelID(8, 3, null, null);
326    }
327
328    /**
329     * dst.rgb = src.rgb * dst.a + (1.0 - src.a) * dst.rgb
330     * dst.a = dst.a
331     *
332     * @param ain The source buffer
333     * @param aout The destination buffer
334     */
335    public void forEachSrcAtop(Allocation ain, Allocation aout) {
336        forEachSrcAtop(ain, aout, null);
337    }
338
339    /**
340     * dst.rgb = src.rgb * dst.a + (1.0 - src.a) * dst.rgb
341     * dst.a = dst.a
342     *
343     * @param ain The source buffer
344     * @param aout The destination buffer
345     * @param opt LaunchOptions for clipping
346     */
347    public void forEachSrcAtop(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
348        blend(9, ain, aout, opt);
349    }
350
351    /**
352     * Get a KernelID for the SrcAtop kernel.
353     *
354     * @return Script.KernelID The KernelID object.
355     */
356    public Script.KernelID getKernelIDSrcAtop() {
357        return createKernelID(9, 3, null, null);
358    }
359
360    /**
361     * dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb
362     * dst.a = src.a
363     *
364     * @param ain The source buffer
365     * @param aout The destination buffer
366     */
367    public void forEachDstAtop(Allocation ain, Allocation aout) {
368        forEachDstAtop(ain, aout, null);
369    }
370
371    /**
372     * dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb
373     * dst.a = src.a
374     *
375     * @param ain The source buffer
376     * @param aout The destination buffer
377     * @param opt LaunchOptions for clipping
378     */
379    public void forEachDstAtop(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
380        blend(10, ain, aout, opt);
381    }
382
383    /**
384     * Get a KernelID for the DstAtop kernel.
385     *
386     * @return Script.KernelID The KernelID object.
387     */
388    public Script.KernelID getKernelIDDstAtop() {
389        return createKernelID(10, 3, null, null);
390    }
391
392    /**
393     * Sets dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a}
394     *
395     * @param ain The source buffer
396     * @param aout The destination buffer
397     */
398    public void forEachXor(Allocation ain, Allocation aout) {
399        forEachXor(ain, aout, null);
400    }
401
402    /**
403     * Sets dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a}
404     *
405     * @param ain The source buffer
406     * @param aout The destination buffer
407     * @param opt LaunchOptions for clipping
408     */
409    public void forEachXor(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
410        blend(11, ain, aout, opt);
411    }
412
413    /**
414     * Get a KernelID for the Xor kernel.
415     *
416     * @return Script.KernelID The KernelID object.
417     */
418    public Script.KernelID getKernelIDXor() {
419        return createKernelID(11, 3, null, null);
420    }
421
422    ////////
423/*
424    public void forEachNormal(Allocation ain, Allocation aout) {
425        blend(12, ain, aout);
426    }
427
428    public void forEachAverage(Allocation ain, Allocation aout) {
429        blend(13, ain, aout);
430    }
431*/
432    /**
433     * Sets dst = src * dst
434     *
435     * @param ain The source buffer
436     * @param aout The destination buffer
437     */
438    public void forEachMultiply(Allocation ain, Allocation aout) {
439        forEachMultiply(ain, aout, null);
440    }
441
442    /**
443     * Sets dst = src * dst
444     *
445     * @param ain The source buffer
446     * @param aout The destination buffer
447     * @param opt LaunchOptions for clipping
448     */
449    public void forEachMultiply(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
450        blend(14, ain, aout, opt);
451    }
452
453    /**
454     * Get a KernelID for the Multiply kernel.
455     *
456     * @return Script.KernelID The KernelID object.
457     */
458    public Script.KernelID getKernelIDMultiply() {
459        return createKernelID(14, 3, null, null);
460    }
461
462/*
463    public void forEachScreen(Allocation ain, Allocation aout) {
464        blend(15, ain, aout);
465    }
466
467    public void forEachDarken(Allocation ain, Allocation aout) {
468        blend(16, ain, aout);
469    }
470
471    public void forEachLighten(Allocation ain, Allocation aout) {
472        blend(17, ain, aout);
473    }
474
475    public void forEachOverlay(Allocation ain, Allocation aout) {
476        blend(18, ain, aout);
477    }
478
479    public void forEachHardlight(Allocation ain, Allocation aout) {
480        blend(19, ain, aout);
481    }
482
483    public void forEachSoftlight(Allocation ain, Allocation aout) {
484        blend(20, ain, aout);
485    }
486
487    public void forEachDifference(Allocation ain, Allocation aout) {
488        blend(21, ain, aout);
489    }
490
491    public void forEachNegation(Allocation ain, Allocation aout) {
492        blend(22, ain, aout);
493    }
494
495    public void forEachExclusion(Allocation ain, Allocation aout) {
496        blend(23, ain, aout);
497    }
498
499    public void forEachColorDodge(Allocation ain, Allocation aout) {
500        blend(24, ain, aout);
501    }
502
503    public void forEachInverseColorDodge(Allocation ain, Allocation aout) {
504        blend(25, ain, aout);
505    }
506
507    public void forEachSoftDodge(Allocation ain, Allocation aout) {
508        blend(26, ain, aout);
509    }
510
511    public void forEachColorBurn(Allocation ain, Allocation aout) {
512        blend(27, ain, aout);
513    }
514
515    public void forEachInverseColorBurn(Allocation ain, Allocation aout) {
516        blend(28, ain, aout);
517    }
518
519    public void forEachSoftBurn(Allocation ain, Allocation aout) {
520        blend(29, ain, aout);
521    }
522
523    public void forEachReflect(Allocation ain, Allocation aout) {
524        blend(30, ain, aout);
525    }
526
527    public void forEachGlow(Allocation ain, Allocation aout) {
528        blend(31, ain, aout);
529    }
530
531    public void forEachFreeze(Allocation ain, Allocation aout) {
532        blend(32, ain, aout);
533    }
534
535    public void forEachHeat(Allocation ain, Allocation aout) {
536        blend(33, ain, aout);
537    }
538*/
539    /**
540     * Sets dst = min(src + dst, 1.0)
541     *
542     * @param ain The source buffer
543     * @param aout The destination buffer
544     */
545    public void forEachAdd(Allocation ain, Allocation aout) {
546        forEachAdd(ain, aout, null);
547    }
548
549    /**
550     * Sets dst = min(src + dst, 1.0)
551     *
552     * @param ain The source buffer
553     * @param aout The destination buffer
554     * @param opt LaunchOptions for clipping
555     */
556    public void forEachAdd(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
557        blend(34, ain, aout, opt);
558    }
559
560    /**
561     * Get a KernelID for the Add kernel.
562     *
563     * @return Script.KernelID The KernelID object.
564     */
565    public Script.KernelID getKernelIDAdd() {
566        return createKernelID(34, 3, null, null);
567    }
568
569    /**
570     * Sets dst = max(dst - src, 0.0)
571     *
572     * @param ain The source buffer
573     * @param aout The destination buffer
574     */
575    public void forEachSubtract(Allocation ain, Allocation aout) {
576        forEachSubtract(ain, aout, null);
577    }
578
579    /**
580     * Sets dst = max(dst - src, 0.0)
581     *
582     * @param ain The source buffer
583     * @param aout The destination buffer
584     * @param opt LaunchOptions for clipping
585     */
586    public void forEachSubtract(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
587        blend(35, ain, aout, opt);
588    }
589
590    /**
591     * Get a KernelID for the Subtract kernel.
592     *
593     * @return Script.KernelID The KernelID object.
594     */
595    public Script.KernelID getKernelIDSubtract() {
596        return createKernelID(35, 3, null, null);
597    }
598
599/*
600    public void forEachStamp(Allocation ain, Allocation aout) {
601        blend(36, ain, aout);
602    }
603
604    public void forEachRed(Allocation ain, Allocation aout) {
605        blend(37, ain, aout);
606    }
607
608    public void forEachGreen(Allocation ain, Allocation aout) {
609        blend(38, ain, aout);
610    }
611
612    public void forEachBlue(Allocation ain, Allocation aout) {
613        blend(39, ain, aout);
614    }
615
616    public void forEachHue(Allocation ain, Allocation aout) {
617        blend(40, ain, aout);
618    }
619
620    public void forEachSaturation(Allocation ain, Allocation aout) {
621        blend(41, ain, aout);
622    }
623
624    public void forEachColor(Allocation ain, Allocation aout) {
625        blend(42, ain, aout);
626    }
627
628    public void forEachLuminosity(Allocation ain, Allocation aout) {
629        blend(43, ain, aout);
630    }
631*/
632}
633
634