Home | History | Annotate | Download | only in renderscript
      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 {
     24     ScriptIntrinsicBlend(int 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         int 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) {
     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);
     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         blend(0, ain, aout);
     61     }
     62 
     63     /**
     64      * Get a KernelID for the Clear kernel.
     65      *
     66      * @return Script.KernelID The KernelID object.
     67      */
     68     public Script.KernelID getKernelIDClear() {
     69         return createKernelID(0, 3, null, null);
     70     }
     71 
     72 
     73     /**
     74      * Sets dst = src
     75      *
     76      * @param ain The source buffer
     77      * @param aout The destination buffer
     78      */
     79     public void forEachSrc(Allocation ain, Allocation aout) {
     80         blend(1, ain, aout);
     81     }
     82 
     83     /**
     84      * Get a KernelID for the Src kernel.
     85      *
     86      * @return Script.KernelID The KernelID object.
     87      */
     88     public Script.KernelID getKernelIDSrc() {
     89         return createKernelID(1, 3, null, null);
     90     }
     91 
     92     /**
     93      * Sets dst = dst
     94      *
     95      * This is a NOP.
     96      *
     97      * @param ain The source buffer
     98      * @param aout The destination buffer
     99      */
    100     public void forEachDst(Allocation ain, Allocation aout) {
    101         // NOP
    102     }
    103 
    104     /**
    105      * Get a KernelID for the Dst kernel.
    106      *
    107      * @return Script.KernelID The KernelID object.
    108      */
    109     public Script.KernelID getKernelIDDst() {
    110         return createKernelID(2, 3, null, null);
    111     }
    112 
    113     /**
    114      * Sets dst = src + dst * (1.0 - src.a)
    115      *
    116      * @param ain The source buffer
    117      * @param aout The destination buffer
    118      */
    119     public void forEachSrcOver(Allocation ain, Allocation aout) {
    120         blend(3, ain, aout);
    121     }
    122 
    123     /**
    124      * Get a KernelID for the SrcOver kernel.
    125      *
    126      * @return Script.KernelID The KernelID object.
    127      */
    128     public Script.KernelID getKernelIDSrcOver() {
    129         return createKernelID(3, 3, null, null);
    130     }
    131 
    132     /**
    133      * Sets dst = dst + src * (1.0 - dst.a)
    134      *
    135      * @param ain The source buffer
    136      * @param aout The destination buffer
    137      */
    138     public void forEachDstOver(Allocation ain, Allocation aout) {
    139         blend(4, ain, aout);
    140     }
    141 
    142     /**
    143      * Get a KernelID for the DstOver kernel.
    144      *
    145      * @return Script.KernelID The KernelID object.
    146      */
    147     public Script.KernelID getKernelIDDstOver() {
    148         return createKernelID(4, 3, null, null);
    149     }
    150 
    151     /**
    152      * Sets dst = src * dst.a
    153      *
    154      * @param ain The source buffer
    155      * @param aout The destination buffer
    156      */
    157     public void forEachSrcIn(Allocation ain, Allocation aout) {
    158         blend(5, ain, aout);
    159     }
    160 
    161     /**
    162      * Get a KernelID for the SrcIn kernel.
    163      *
    164      * @return Script.KernelID The KernelID object.
    165      */
    166     public Script.KernelID getKernelIDSrcIn() {
    167         return createKernelID(5, 3, null, null);
    168     }
    169 
    170     /**
    171      * Sets dst = dst * src.a
    172      *
    173      * @param ain The source buffer
    174      * @param aout The destination buffer
    175      */
    176     public void forEachDstIn(Allocation ain, Allocation aout) {
    177         blend(6, ain, aout);
    178     }
    179 
    180     /**
    181      * Get a KernelID for the DstIn kernel.
    182      *
    183      * @return Script.KernelID The KernelID object.
    184      */
    185     public Script.KernelID getKernelIDDstIn() {
    186         return createKernelID(6, 3, null, null);
    187     }
    188 
    189     /**
    190      * Sets dst = src * (1.0 - dst.a)
    191      *
    192      * @param ain The source buffer
    193      * @param aout The destination buffer
    194      */
    195     public void forEachSrcOut(Allocation ain, Allocation aout) {
    196         blend(7, ain, aout);
    197     }
    198 
    199     /**
    200      * Get a KernelID for the SrcOut kernel.
    201      *
    202      * @return Script.KernelID The KernelID object.
    203      */
    204     public Script.KernelID getKernelIDSrcOut() {
    205         return createKernelID(7, 3, null, null);
    206     }
    207 
    208     /**
    209      * Sets dst = dst * (1.0 - src.a)
    210      *
    211      * @param ain The source buffer
    212      * @param aout The destination buffer
    213      */
    214     public void forEachDstOut(Allocation ain, Allocation aout) {
    215         blend(8, ain, aout);
    216     }
    217 
    218     /**
    219      * Get a KernelID for the DstOut kernel.
    220      *
    221      * @return Script.KernelID The KernelID object.
    222      */
    223     public Script.KernelID getKernelIDDstOut() {
    224         return createKernelID(8, 3, null, null);
    225     }
    226 
    227     /**
    228      * dst.rgb = src.rgb * dst.a + (1.0 - src.a) * dst.rgb
    229      * dst.a = dst.a
    230      *
    231      * @param ain The source buffer
    232      * @param aout The destination buffer
    233      */
    234     public void forEachSrcAtop(Allocation ain, Allocation aout) {
    235         blend(9, ain, aout);
    236     }
    237 
    238     /**
    239      * Get a KernelID for the SrcAtop kernel.
    240      *
    241      * @return Script.KernelID The KernelID object.
    242      */
    243     public Script.KernelID getKernelIDSrcAtop() {
    244         return createKernelID(9, 3, null, null);
    245     }
    246 
    247     /**
    248      * dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb
    249      * dst.a = src.a
    250      *
    251      * @param ain The source buffer
    252      * @param aout The destination buffer
    253      */
    254     public void forEachDstAtop(Allocation ain, Allocation aout) {
    255         blend(10, ain, aout);
    256     }
    257 
    258     /**
    259      * Get a KernelID for the DstAtop kernel.
    260      *
    261      * @return Script.KernelID The KernelID object.
    262      */
    263     public Script.KernelID getKernelIDDstAtop() {
    264         return createKernelID(10, 3, null, null);
    265     }
    266 
    267     /**
    268      * Sets dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a}
    269      *
    270      * @param ain The source buffer
    271      * @param aout The destination buffer
    272      */
    273     public void forEachXor(Allocation ain, Allocation aout) {
    274         blend(11, ain, aout);
    275     }
    276 
    277     /**
    278      * Get a KernelID for the Xor kernel.
    279      *
    280      * @return Script.KernelID The KernelID object.
    281      */
    282     public Script.KernelID getKernelIDXor() {
    283         return createKernelID(11, 3, null, null);
    284     }
    285 
    286     ////////
    287 /*
    288     public void forEachNormal(Allocation ain, Allocation aout) {
    289         blend(12, ain, aout);
    290     }
    291 
    292     public void forEachAverage(Allocation ain, Allocation aout) {
    293         blend(13, ain, aout);
    294     }
    295 */
    296     /**
    297      * Sets dst = src * dst
    298      *
    299      * @param ain The source buffer
    300      * @param aout The destination buffer
    301      */
    302     public void forEachMultiply(Allocation ain, Allocation aout) {
    303         blend(14, ain, aout);
    304     }
    305 
    306     /**
    307      * Get a KernelID for the Multiply kernel.
    308      *
    309      * @return Script.KernelID The KernelID object.
    310      */
    311     public Script.KernelID getKernelIDMultiply() {
    312         return createKernelID(14, 3, null, null);
    313     }
    314 
    315 /*
    316     public void forEachScreen(Allocation ain, Allocation aout) {
    317         blend(15, ain, aout);
    318     }
    319 
    320     public void forEachDarken(Allocation ain, Allocation aout) {
    321         blend(16, ain, aout);
    322     }
    323 
    324     public void forEachLighten(Allocation ain, Allocation aout) {
    325         blend(17, ain, aout);
    326     }
    327 
    328     public void forEachOverlay(Allocation ain, Allocation aout) {
    329         blend(18, ain, aout);
    330     }
    331 
    332     public void forEachHardlight(Allocation ain, Allocation aout) {
    333         blend(19, ain, aout);
    334     }
    335 
    336     public void forEachSoftlight(Allocation ain, Allocation aout) {
    337         blend(20, ain, aout);
    338     }
    339 
    340     public void forEachDifference(Allocation ain, Allocation aout) {
    341         blend(21, ain, aout);
    342     }
    343 
    344     public void forEachNegation(Allocation ain, Allocation aout) {
    345         blend(22, ain, aout);
    346     }
    347 
    348     public void forEachExclusion(Allocation ain, Allocation aout) {
    349         blend(23, ain, aout);
    350     }
    351 
    352     public void forEachColorDodge(Allocation ain, Allocation aout) {
    353         blend(24, ain, aout);
    354     }
    355 
    356     public void forEachInverseColorDodge(Allocation ain, Allocation aout) {
    357         blend(25, ain, aout);
    358     }
    359 
    360     public void forEachSoftDodge(Allocation ain, Allocation aout) {
    361         blend(26, ain, aout);
    362     }
    363 
    364     public void forEachColorBurn(Allocation ain, Allocation aout) {
    365         blend(27, ain, aout);
    366     }
    367 
    368     public void forEachInverseColorBurn(Allocation ain, Allocation aout) {
    369         blend(28, ain, aout);
    370     }
    371 
    372     public void forEachSoftBurn(Allocation ain, Allocation aout) {
    373         blend(29, ain, aout);
    374     }
    375 
    376     public void forEachReflect(Allocation ain, Allocation aout) {
    377         blend(30, ain, aout);
    378     }
    379 
    380     public void forEachGlow(Allocation ain, Allocation aout) {
    381         blend(31, ain, aout);
    382     }
    383 
    384     public void forEachFreeze(Allocation ain, Allocation aout) {
    385         blend(32, ain, aout);
    386     }
    387 
    388     public void forEachHeat(Allocation ain, Allocation aout) {
    389         blend(33, ain, aout);
    390     }
    391 */
    392     /**
    393      * Sets dst = min(src + dst, 1.0)
    394      *
    395      * @param ain The source buffer
    396      * @param aout The destination buffer
    397      */
    398     public void forEachAdd(Allocation ain, Allocation aout) {
    399         blend(34, ain, aout);
    400     }
    401 
    402     /**
    403      * Get a KernelID for the Add kernel.
    404      *
    405      * @return Script.KernelID The KernelID object.
    406      */
    407     public Script.KernelID getKernelIDAdd() {
    408         return createKernelID(34, 3, null, null);
    409     }
    410 
    411     /**
    412      * Sets dst = max(dst - src, 0.0)
    413      *
    414      * @param ain The source buffer
    415      * @param aout The destination buffer
    416      */
    417     public void forEachSubtract(Allocation ain, Allocation aout) {
    418         blend(35, ain, aout);
    419     }
    420 
    421     /**
    422      * Get a KernelID for the Subtract kernel.
    423      *
    424      * @return Script.KernelID The KernelID object.
    425      */
    426     public Script.KernelID getKernelIDSubtract() {
    427         return createKernelID(35, 3, null, null);
    428     }
    429 
    430 /*
    431     public void forEachStamp(Allocation ain, Allocation aout) {
    432         blend(36, ain, aout);
    433     }
    434 
    435     public void forEachRed(Allocation ain, Allocation aout) {
    436         blend(37, ain, aout);
    437     }
    438 
    439     public void forEachGreen(Allocation ain, Allocation aout) {
    440         blend(38, ain, aout);
    441     }
    442 
    443     public void forEachBlue(Allocation ain, Allocation aout) {
    444         blend(39, ain, aout);
    445     }
    446 
    447     public void forEachHue(Allocation ain, Allocation aout) {
    448         blend(40, ain, aout);
    449     }
    450 
    451     public void forEachSaturation(Allocation ain, Allocation aout) {
    452         blend(41, ain, aout);
    453     }
    454 
    455     public void forEachColor(Allocation ain, Allocation aout) {
    456         blend(42, ain, aout);
    457     }
    458 
    459     public void forEachLuminosity(Allocation ain, Allocation aout) {
    460         blend(43, ain, aout);
    461     }
    462 */
    463 }
    464 
    465