blob: 6b09bb7a7741bc36cbf2b41606ed89be3b0667f3 [file] [log] [blame]
Jason Samsf70bb042012-09-21 16:10:49 -07001/*
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/**
Tim Murrayc11e25c2013-04-09 11:01:01 -070021 * Intrinsic kernels for blending two {@link android.renderscript.Allocation} objects.
Jason Samsf70bb042012-09-21 16:10:49 -070022 **/
23public class ScriptIntrinsicBlend extends ScriptIntrinsic {
Tim Murray460a0492013-11-19 12:45:54 -080024 ScriptIntrinsicBlend(long id, RenderScript rs) {
Jason Samsf70bb042012-09-21 16:10:49 -070025 super(id, rs);
26 }
27
28 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -070029 * Supported elements types are {@link Element#U8_4}
Jason Samsf70bb042012-09-21 16:10:49 -070030 *
Tim Murrayc11e25c2013-04-09 11:01:01 -070031 * @param rs The RenderScript context
32 * @param e Element type for inputs and outputs
Jason Samsf70bb042012-09-21 16:10:49 -070033 *
34 * @return ScriptIntrinsicBlend
35 */
36 public static ScriptIntrinsicBlend create(RenderScript rs, Element e) {
Tim Murray74478f72012-09-26 13:46:46 -070037 // 7 comes from RS_SCRIPT_INTRINSIC_ID_BLEND in rsDefines.h
Tim Murray460a0492013-11-19 12:45:54 -080038 long id = rs.nScriptIntrinsicCreate(7, e.getID(rs));
Jason Samsf70bb042012-09-21 16:10:49 -070039 return new ScriptIntrinsicBlend(id, rs);
40
41 }
42
Tim Murray6f842ac2014-01-13 11:47:53 -080043 private void blend(int id, Allocation ain, Allocation aout, Script.LaunchOptions opt) {
Tim Murray74478f72012-09-26 13:46:46 -070044 if (!ain.getElement().isCompatible(Element.U8_4(mRS))) {
45 throw new RSIllegalArgumentException("Input is not of expected format.");
Jason Samsf70bb042012-09-21 16:10:49 -070046 }
Tim Murray74478f72012-09-26 13:46:46 -070047 if (!aout.getElement().isCompatible(Element.U8_4(mRS))) {
48 throw new RSIllegalArgumentException("Output is not of expected format.");
Jason Samsf70bb042012-09-21 16:10:49 -070049 }
Tim Murray6f842ac2014-01-13 11:47:53 -080050 forEach(id, ain, aout, null, opt);
Jason Samsf70bb042012-09-21 16:10:49 -070051 }
52
53 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -070054 * Sets dst = {0, 0, 0, 0}
Jason Samsf70bb042012-09-21 16:10:49 -070055 *
56 * @param ain The source buffer
57 * @param aout The destination buffer
58 */
59 public void forEachClear(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -080060 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);
Jason Samsf70bb042012-09-21 16:10:49 -070072 }
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 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -070085 * Sets dst = src
Jason Samsf70bb042012-09-21 16:10:49 -070086 *
87 * @param ain The source buffer
88 * @param aout The destination buffer
89 */
90 public void forEachSrc(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -080091 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) {
Tim Murray8fdcf4a2014-07-10 13:00:10 -0700102 blend(1, ain, aout, null);
Jason Samsf70bb042012-09-21 16:10:49 -0700103 }
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 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700115 * Sets dst = dst
116 *
117 * This is a NOP.
Jason Samsf70bb042012-09-21 16:10:49 -0700118 *
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 /**
Tim Murray6f842ac2014-01-13 11:47:53 -0800127 * 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 /**
Jason Samsf70bb042012-09-21 16:10:49 -0700140 * 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 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700149 * Sets dst = src + dst * (1.0 - src.a)
Jason Samsf70bb042012-09-21 16:10:49 -0700150 *
151 * @param ain The source buffer
152 * @param aout The destination buffer
153 */
154 public void forEachSrcOver(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -0800155 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);
Jason Samsf70bb042012-09-21 16:10:49 -0700167 }
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 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700179 * Sets dst = dst + src * (1.0 - dst.a)
Jason Samsf70bb042012-09-21 16:10:49 -0700180 *
181 * @param ain The source buffer
182 * @param aout The destination buffer
183 */
184 public void forEachDstOver(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -0800185 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);
Jason Samsf70bb042012-09-21 16:10:49 -0700197 }
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 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700209 * Sets dst = src * dst.a
Jason Samsf70bb042012-09-21 16:10:49 -0700210 *
211 * @param ain The source buffer
212 * @param aout The destination buffer
213 */
214 public void forEachSrcIn(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -0800215 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);
Jason Samsf70bb042012-09-21 16:10:49 -0700227 }
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 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700239 * Sets dst = dst * src.a
Jason Samsf70bb042012-09-21 16:10:49 -0700240 *
241 * @param ain The source buffer
242 * @param aout The destination buffer
243 */
244 public void forEachDstIn(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -0800245 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);
Jason Samsf70bb042012-09-21 16:10:49 -0700257 }
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 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700269 * Sets dst = src * (1.0 - dst.a)
Jason Samsf70bb042012-09-21 16:10:49 -0700270 *
271 * @param ain The source buffer
272 * @param aout The destination buffer
273 */
274 public void forEachSrcOut(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -0800275 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);
Jason Samsf70bb042012-09-21 16:10:49 -0700287 }
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 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700299 * Sets dst = dst * (1.0 - src.a)
Jason Samsf70bb042012-09-21 16:10:49 -0700300 *
301 * @param ain The source buffer
302 * @param aout The destination buffer
303 */
304 public void forEachDstOut(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -0800305 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);
Jason Samsf70bb042012-09-21 16:10:49 -0700317 }
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) {
Tim Murray6f842ac2014-01-13 11:47:53 -0800336 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);
Jason Samsf70bb042012-09-21 16:10:49 -0700349 }
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
Miao Wangffb1a9b2015-07-20 15:05:31 -0700363 * Note: Before API 23, the alpha channel was not correctly set.
364 * Please use with caution when targeting older APIs.
Jason Samsf70bb042012-09-21 16:10:49 -0700365 *
366 * @param ain The source buffer
367 * @param aout The destination buffer
368 */
369 public void forEachDstAtop(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -0800370 forEachDstAtop(ain, aout, null);
371 }
372
373 /**
374 * dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb
375 * dst.a = src.a
Miao Wangffb1a9b2015-07-20 15:05:31 -0700376 * Note: Before API 23, the alpha channel was not correctly set.
377 * Please use with caution when targeting older APIs.
Tim Murray6f842ac2014-01-13 11:47:53 -0800378 *
379 * @param ain The source buffer
380 * @param aout The destination buffer
381 * @param opt LaunchOptions for clipping
382 */
383 public void forEachDstAtop(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
384 blend(10, ain, aout, opt);
Jason Samsf70bb042012-09-21 16:10:49 -0700385 }
386
387 /**
388 * Get a KernelID for the DstAtop kernel.
389 *
390 * @return Script.KernelID The KernelID object.
391 */
392 public Script.KernelID getKernelIDDstAtop() {
393 return createKernelID(10, 3, null, null);
394 }
395
396 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700397 * Sets dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a}
Jason Samsf70bb042012-09-21 16:10:49 -0700398 *
399 * @param ain The source buffer
400 * @param aout The destination buffer
401 */
402 public void forEachXor(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -0800403 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 */
413 public void forEachXor(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
414 blend(11, ain, aout, opt);
Jason Samsf70bb042012-09-21 16:10:49 -0700415 }
416
417 /**
418 * Get a KernelID for the Xor kernel.
419 *
420 * @return Script.KernelID The KernelID object.
421 */
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 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700437 * Sets dst = src * dst
Jason Samsf70bb042012-09-21 16:10:49 -0700438 *
439 * @param ain The source buffer
440 * @param aout The destination buffer
441 */
442 public void forEachMultiply(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -0800443 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 */
453 public void forEachMultiply(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
454 blend(14, ain, aout, opt);
Jason Samsf70bb042012-09-21 16:10:49 -0700455 }
456
457 /**
458 * Get a KernelID for the Multiply kernel.
459 *
460 * @return Script.KernelID The KernelID object.
461 */
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 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700544 * Sets dst = min(src + dst, 1.0)
Jason Samsf70bb042012-09-21 16:10:49 -0700545 *
546 * @param ain The source buffer
547 * @param aout The destination buffer
548 */
549 public void forEachAdd(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -0800550 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 */
560 public void forEachAdd(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
561 blend(34, ain, aout, opt);
Jason Samsf70bb042012-09-21 16:10:49 -0700562 }
563
564 /**
565 * Get a KernelID for the Add kernel.
566 *
567 * @return Script.KernelID The KernelID object.
568 */
569 public Script.KernelID getKernelIDAdd() {
570 return createKernelID(34, 3, null, null);
571 }
572
573 /**
Tim Murrayc11e25c2013-04-09 11:01:01 -0700574 * Sets dst = max(dst - src, 0.0)
Jason Samsf70bb042012-09-21 16:10:49 -0700575 *
576 * @param ain The source buffer
577 * @param aout The destination buffer
578 */
579 public void forEachSubtract(Allocation ain, Allocation aout) {
Tim Murray6f842ac2014-01-13 11:47:53 -0800580 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 */
590 public void forEachSubtract(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
591 blend(35, ain, aout, opt);
Jason Samsf70bb042012-09-21 16:10:49 -0700592 }
593
594 /**
595 * Get a KernelID for the Subtract kernel.
596 *
597 * @return Script.KernelID The KernelID object.
598 */
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