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