• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 package android.renderscript;
18 
19 
20 /**
21  * Intrinsic kernels for blending two {@link android.renderscript.Allocation} objects.
22  **/
23 public class ScriptIntrinsicBlend extends ScriptIntrinsic {
ScriptIntrinsicBlend(long id, RenderScript rs)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      */
create(RenderScript rs, Element e)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 
blend(int id, Allocation ain, Allocation aout, Script.LaunchOptions opt)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      */
forEachClear(Allocation ain, Allocation aout)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      */
forEachClear(Allocation ain, Allocation aout, Script.LaunchOptions opt)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      */
getKernelIDClear()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      */
forEachSrc(Allocation ain, Allocation aout)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      */
forEachSrc(Allocation ain, Allocation aout, Script.LaunchOptions opt)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      */
getKernelIDSrc()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      */
forEachDst(Allocation ain, Allocation aout)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      */
forEachDst(Allocation ain, Allocation aout, Script.LaunchOptions opt)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      */
getKernelIDDst()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      */
forEachSrcOver(Allocation ain, Allocation aout)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      */
forEachSrcOver(Allocation ain, Allocation aout, Script.LaunchOptions opt)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      */
getKernelIDSrcOver()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      */
forEachDstOver(Allocation ain, Allocation aout)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      */
forEachDstOver(Allocation ain, Allocation aout, Script.LaunchOptions opt)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      */
getKernelIDDstOver()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      */
forEachSrcIn(Allocation ain, Allocation aout)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      */
forEachSrcIn(Allocation ain, Allocation aout, Script.LaunchOptions opt)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      */
getKernelIDSrcIn()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      */
forEachDstIn(Allocation ain, Allocation aout)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      */
forEachDstIn(Allocation ain, Allocation aout, Script.LaunchOptions opt)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      */
getKernelIDDstIn()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      */
forEachSrcOut(Allocation ain, Allocation aout)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      */
forEachSrcOut(Allocation ain, Allocation aout, Script.LaunchOptions opt)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      */
getKernelIDSrcOut()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      */
forEachDstOut(Allocation ain, Allocation aout)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      */
forEachDstOut(Allocation ain, Allocation aout, Script.LaunchOptions opt)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      */
getKernelIDDstOut()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      */
forEachSrcAtop(Allocation ain, Allocation aout)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      */
forEachSrcAtop(Allocation ain, Allocation aout, Script.LaunchOptions opt)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      */
getKernelIDSrcAtop()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      * Note: Before API 23, the alpha channel was not correctly set.
364      *       Please use with caution when targeting older APIs.
365      *
366      * @param ain The source buffer
367      * @param aout The destination buffer
368      */
forEachDstAtop(Allocation ain, Allocation aout)369     public void forEachDstAtop(Allocation ain, Allocation aout) {
370         forEachDstAtop(ain, aout, null);
371     }
372 
373     /**
374      * dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb
375      * dst.a = src.a
376      * Note: Before API 23, the alpha channel was not correctly set.
377      *       Please use with caution when targeting older APIs.
378      *
379      * @param ain The source buffer
380      * @param aout The destination buffer
381      * @param opt LaunchOptions for clipping
382      */
forEachDstAtop(Allocation ain, Allocation aout, Script.LaunchOptions opt)383     public void forEachDstAtop(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
384         blend(10, ain, aout, opt);
385     }
386 
387     /**
388      * Get a KernelID for the DstAtop kernel.
389      *
390      * @return Script.KernelID The KernelID object.
391      */
getKernelIDDstAtop()392     public Script.KernelID getKernelIDDstAtop() {
393         return createKernelID(10, 3, null, null);
394     }
395 
396     /**
397      * Sets dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a}
398      *
399      * @param ain The source buffer
400      * @param aout The destination buffer
401      */
forEachXor(Allocation ain, Allocation aout)402     public void forEachXor(Allocation ain, Allocation aout) {
403         forEachXor(ain, aout, null);
404     }
405 
406     /**
407      * Sets dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a}
408      *
409      * @param ain The source buffer
410      * @param aout The destination buffer
411      * @param opt LaunchOptions for clipping
412      */
forEachXor(Allocation ain, Allocation aout, Script.LaunchOptions opt)413     public void forEachXor(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
414         blend(11, ain, aout, opt);
415     }
416 
417     /**
418      * Get a KernelID for the Xor kernel.
419      *
420      * @return Script.KernelID The KernelID object.
421      */
getKernelIDXor()422     public Script.KernelID getKernelIDXor() {
423         return createKernelID(11, 3, null, null);
424     }
425 
426     ////////
427 /*
428     public void forEachNormal(Allocation ain, Allocation aout) {
429         blend(12, ain, aout);
430     }
431 
432     public void forEachAverage(Allocation ain, Allocation aout) {
433         blend(13, ain, aout);
434     }
435 */
436     /**
437      * Sets dst = src * dst
438      *
439      * @param ain The source buffer
440      * @param aout The destination buffer
441      */
forEachMultiply(Allocation ain, Allocation aout)442     public void forEachMultiply(Allocation ain, Allocation aout) {
443         forEachMultiply(ain, aout, null);
444     }
445 
446     /**
447      * Sets dst = src * dst
448      *
449      * @param ain The source buffer
450      * @param aout The destination buffer
451      * @param opt LaunchOptions for clipping
452      */
forEachMultiply(Allocation ain, Allocation aout, Script.LaunchOptions opt)453     public void forEachMultiply(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
454         blend(14, ain, aout, opt);
455     }
456 
457     /**
458      * Get a KernelID for the Multiply kernel.
459      *
460      * @return Script.KernelID The KernelID object.
461      */
getKernelIDMultiply()462     public Script.KernelID getKernelIDMultiply() {
463         return createKernelID(14, 3, null, null);
464     }
465 
466 /*
467     public void forEachScreen(Allocation ain, Allocation aout) {
468         blend(15, ain, aout);
469     }
470 
471     public void forEachDarken(Allocation ain, Allocation aout) {
472         blend(16, ain, aout);
473     }
474 
475     public void forEachLighten(Allocation ain, Allocation aout) {
476         blend(17, ain, aout);
477     }
478 
479     public void forEachOverlay(Allocation ain, Allocation aout) {
480         blend(18, ain, aout);
481     }
482 
483     public void forEachHardlight(Allocation ain, Allocation aout) {
484         blend(19, ain, aout);
485     }
486 
487     public void forEachSoftlight(Allocation ain, Allocation aout) {
488         blend(20, ain, aout);
489     }
490 
491     public void forEachDifference(Allocation ain, Allocation aout) {
492         blend(21, ain, aout);
493     }
494 
495     public void forEachNegation(Allocation ain, Allocation aout) {
496         blend(22, ain, aout);
497     }
498 
499     public void forEachExclusion(Allocation ain, Allocation aout) {
500         blend(23, ain, aout);
501     }
502 
503     public void forEachColorDodge(Allocation ain, Allocation aout) {
504         blend(24, ain, aout);
505     }
506 
507     public void forEachInverseColorDodge(Allocation ain, Allocation aout) {
508         blend(25, ain, aout);
509     }
510 
511     public void forEachSoftDodge(Allocation ain, Allocation aout) {
512         blend(26, ain, aout);
513     }
514 
515     public void forEachColorBurn(Allocation ain, Allocation aout) {
516         blend(27, ain, aout);
517     }
518 
519     public void forEachInverseColorBurn(Allocation ain, Allocation aout) {
520         blend(28, ain, aout);
521     }
522 
523     public void forEachSoftBurn(Allocation ain, Allocation aout) {
524         blend(29, ain, aout);
525     }
526 
527     public void forEachReflect(Allocation ain, Allocation aout) {
528         blend(30, ain, aout);
529     }
530 
531     public void forEachGlow(Allocation ain, Allocation aout) {
532         blend(31, ain, aout);
533     }
534 
535     public void forEachFreeze(Allocation ain, Allocation aout) {
536         blend(32, ain, aout);
537     }
538 
539     public void forEachHeat(Allocation ain, Allocation aout) {
540         blend(33, ain, aout);
541     }
542 */
543     /**
544      * Sets dst = min(src + dst, 1.0)
545      *
546      * @param ain The source buffer
547      * @param aout The destination buffer
548      */
forEachAdd(Allocation ain, Allocation aout)549     public void forEachAdd(Allocation ain, Allocation aout) {
550         forEachAdd(ain, aout, null);
551     }
552 
553     /**
554      * Sets dst = min(src + dst, 1.0)
555      *
556      * @param ain The source buffer
557      * @param aout The destination buffer
558      * @param opt LaunchOptions for clipping
559      */
forEachAdd(Allocation ain, Allocation aout, Script.LaunchOptions opt)560     public void forEachAdd(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
561         blend(34, ain, aout, opt);
562     }
563 
564     /**
565      * Get a KernelID for the Add kernel.
566      *
567      * @return Script.KernelID The KernelID object.
568      */
getKernelIDAdd()569     public Script.KernelID getKernelIDAdd() {
570         return createKernelID(34, 3, null, null);
571     }
572 
573     /**
574      * Sets dst = max(dst - src, 0.0)
575      *
576      * @param ain The source buffer
577      * @param aout The destination buffer
578      */
forEachSubtract(Allocation ain, Allocation aout)579     public void forEachSubtract(Allocation ain, Allocation aout) {
580         forEachSubtract(ain, aout, null);
581     }
582 
583     /**
584      * Sets dst = max(dst - src, 0.0)
585      *
586      * @param ain The source buffer
587      * @param aout The destination buffer
588      * @param opt LaunchOptions for clipping
589      */
forEachSubtract(Allocation ain, Allocation aout, Script.LaunchOptions opt)590     public void forEachSubtract(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
591         blend(35, ain, aout, opt);
592     }
593 
594     /**
595      * Get a KernelID for the Subtract kernel.
596      *
597      * @return Script.KernelID The KernelID object.
598      */
getKernelIDSubtract()599     public Script.KernelID getKernelIDSubtract() {
600         return createKernelID(35, 3, null, null);
601     }
602 
603 /*
604     public void forEachStamp(Allocation ain, Allocation aout) {
605         blend(36, ain, aout);
606     }
607 
608     public void forEachRed(Allocation ain, Allocation aout) {
609         blend(37, ain, aout);
610     }
611 
612     public void forEachGreen(Allocation ain, Allocation aout) {
613         blend(38, ain, aout);
614     }
615 
616     public void forEachBlue(Allocation ain, Allocation aout) {
617         blend(39, ain, aout);
618     }
619 
620     public void forEachHue(Allocation ain, Allocation aout) {
621         blend(40, ain, aout);
622     }
623 
624     public void forEachSaturation(Allocation ain, Allocation aout) {
625         blend(41, ain, aout);
626     }
627 
628     public void forEachColor(Allocation ain, Allocation aout) {
629         blend(42, ain, aout);
630     }
631 
632     public void forEachLuminosity(Allocation ain, Allocation aout) {
633         blend(43, ain, aout);
634     }
635 */
636 }
637 
638