Home | History | Annotate | Download | only in api
      1 /* Copyright 2014 The Chromium Authors. All rights reserved.
      2  * Use of this source code is governed by a BSD-style license that can be
      3  * found in the LICENSE file.
      4  */
      5 
      6 [generate_thunk]
      7 
      8 label Chrome {
      9   [channel=dev] M37 = 0.1,
     10   [channel=dev] M38 = 0.2
     11 };
     12 
     13 /**
     14  * This enumeration contains blend modes used for computing the result pixels
     15  * based on the source RGBA values in layers with the RGBA values that are
     16  * already in the destination framebuffer.
     17  * alpha_src, color_src: source alpha and color.
     18  * alpha_dst, color_dst: destination alpha and color (before compositing).
     19  * Below descriptions of the blend modes assume the colors are pre-multiplied.
     20  * This interface is still in development (Dev API status) and may change,
     21  * so is only supported on Dev channel and Canary currently.
     22  */
     23 enum PP_BlendMode {
     24   /**
     25    * No blending, copy source to the destination directly.
     26    */
     27   PP_BLENDMODE_NONE,
     28 
     29   /**
     30    * Source is placed over the destination.
     31    * Resulting alpha = alpha_src + alpha_dst - alpha_src * alpha_dst
     32    * Resulting color = color_src + color_dst * (1 - alpha_src)
     33    */
     34   PP_BLENDMODE_SRC_OVER,
     35 
     36   /**
     37    * The last blend mode.
     38    */
     39   PP_BLENDMODE_LAST = PP_BLENDMODE_SRC_OVER
     40 };
     41 
     42 /**
     43  * Defines the <code>PPB_CompositorLayer</code> interface. It is used by
     44  * <code>PPB_Compositor</code>.
     45  */
     46 interface PPB_CompositorLayer {
     47   /**
     48    * Determines if a resource is a compositor layer resource.
     49    *
     50    * @param[in] resource The <code>PP_Resource</code> to test.
     51    *
     52    * @return A <code>PP_Bool</code> with <code>PP_TRUE</code> if the given
     53    * resource is a compositor layer resource or <code>PP_FALSE</code>
     54    * otherwise.
     55    */
     56   PP_Bool IsCompositorLayer([in] PP_Resource resource);
     57 
     58   /**
     59    * Sets the color of a solid color layer. If the layer is uninitialized,
     60    * it will initialize the layer first, and then set its color.
     61    * If the layer has been initialized to another kind of layer, the layer will
     62    * not be changed, and <code>PP_ERROR_BADARGUMENT</code> will be returned.
     63    *
     64    * param[in] layer A <code>PP_Resource</code> corresponding to a compositor
     65    * layer resource.
     66    * param[in] red A <code>float</code> for the red color component. It will be
     67    * clamped to [0, 1].
     68    * param[in] green A <code>float</code> for the green color component. It will
     69    * be clamped to [0, 1].
     70    * param[in] blue A <code>float</code> for the blue color component. It will
     71    * be clamped to [0, 1].
     72    * param[in] alpha A <code>float</code> for the alpha color component. It will
     73    * be clamped to [0, 1].
     74    * param[in] size A <code>PP_Size</code> for the size of the layer before
     75    * transform.
     76    *
     77    * @return An int32_t containing a result code from <code>pp_errors.h</code>.
     78    */
     79   int32_t SetColor([in] PP_Resource layer,
     80                    [in] float_t red,
     81                    [in] float_t green,
     82                    [in] float_t blue,
     83                    [in] float_t alpha,
     84                    [in] PP_Size size);
     85 
     86   /**
     87    * Sets the texture of a texture layer. If the layer is uninitialized,
     88    * it will initialize the layer first, and then set its texture.
     89    * The source rect will be set to ((0, 0), (1, 1)). If the layer has been
     90    * initialized to another kind of layer, the layer will not be changed,
     91    * and <code>PP_ERROR_BADARGUMENT</code> will be returned.
     92    *
     93    * param[in] layer A <code>PP_Resource</code> corresponding to a compositor
     94    * layer resource.
     95    * param[in] context A <code>PP_Resource</code> corresponding to a graphics
     96    * 3d resource which owns the GL texture.
     97    * param[in] texture A GL texture object id.
     98    * param[in] size A <code>PP_Size</code> for the size of the layer before
     99    * transform.
    100    * param[in] cc A <code>PP_CompletionCallback</code> to be called when
    101    * the texture is released by Chromium compositor.
    102    *
    103    * @return An int32_t containing a result code from <code>pp_errors.h</code>.
    104    */
    105   int32_t SetTexture([in] PP_Resource layer,
    106                      [in] PP_Resource context,
    107                      [in] uint32_t texture,
    108                      [in] PP_Size size,
    109                      [in] PP_CompletionCallback cc);
    110 
    111   /**
    112    * Sets the texture of a texture layer. If the layer is uninitialized,
    113    * it will initialize the layer first, and then set its texture.
    114    * The source rect will be set to ((0, 0), (1, 1)). If the layer has been
    115    * initialized to another kind of layer, the layer will not be changed,
    116    * and <code>PP_ERROR_BADARGUMENT</code> will be returned.
    117    *
    118    * param[in] layer A <code>PP_Resource</code> corresponding to a compositor
    119    * layer resource.
    120    * param[in] context A <code>PP_Resource</code> corresponding to a graphics
    121    * 3d resource which owns the GL texture.
    122    * param[in] target GL texture target (GL_TEXTURE_2D, etc).
    123    * param[in] texture A GL texture object id.
    124    * param[in] size A <code>PP_Size</code> for the size of the layer before
    125    * transform.
    126    * param[in] cc A <code>PP_CompletionCallback</code> to be called when
    127    * the texture is released by Chromium compositor.
    128    *
    129    * @return An int32_t containing a result code from <code>pp_errors.h</code>.
    130    */
    131   [version = 0.2]
    132   int32_t SetTexture([in] PP_Resource layer,
    133                      [in] PP_Resource context,
    134                      [in] uint32_t target,
    135                      [in] uint32_t texture,
    136                      [in] PP_Size size,
    137                      [in] PP_CompletionCallback cc);
    138 
    139   /**
    140    * Sets the image of an image layer. If the layer is uninitialized,
    141    * it will initialize the layer first, and then set its image.
    142    * The layer size will be set to the image's size. The source rect will be set
    143    * to the full image. If the layer has been initialized to another kind of
    144    * layer, the layer will not be changed, and <code>PP_ERROR_BADARGUMENT</code>
    145    * will be returned.
    146    *
    147    * param[in] layer A <code>PP_Resource</code> corresponding to a compositor
    148    * layer resource.
    149    * param[in] image_data A <code>PP_Resource</code> corresponding to
    150    * an image data resource.
    151    * param[in] size A <code>PP_Size</code> for the size of the layer before
    152    * transform. If NULL, the image's size will be used.
    153    * param[in] cc A <code>PP_CompletionCallback</code> to be called when
    154    * the image data is released by Chromium compositor.
    155    *
    156    * @return An int32_t containing a result code from <code>pp_errors.h</code>.
    157    */
    158   int32_t SetImage([in] PP_Resource layer,
    159                    [in] PP_Resource image_data,
    160                    [in] PP_Size size,
    161                    [in] PP_CompletionCallback cc);
    162 
    163   /**
    164    * Sets a clip rectangle for a compositor layer. The Chromium compositor
    165    * applies a transform matrix on the layer first, and then clips the layer
    166    * with the rectangle.
    167    *
    168    * param[in] layer A <code>PP_Resource</code> corresponding to a compositor
    169    * layer resource.
    170    * param[in] rect The clip rectangle. The origin is top-left corner of
    171    * the plugin.
    172    *
    173    * @return An int32_t containing a result code from <code>pp_errors.h</code>.
    174    */
    175   int32_t SetClipRect([in] PP_Resource layer,
    176                       [in] PP_Rect rect);
    177 
    178   /**
    179    * Sets a transform matrix which is used to composite the layer.
    180    *
    181    * param[in] layer A <code>PP_Resource</code> corresponding to a compositor
    182    * layer resource.
    183    * param[in] matrix A float array with 16 elements. The matrix is
    184    * column major. The default transform matrix is an identity matrix.
    185    *
    186    * @return An int32_t containing a result code from <code>pp_errors.h</code>.
    187    */
    188   int32_t SetTransform([in] PP_Resource layer,
    189                        [in] float_t[16] matrix);
    190 
    191   /**
    192    * Sets the opacity value which will be applied to the layer. The effective
    193    * value of each pixel is computed as:
    194    *
    195    *   if (premult_alpha)
    196    *     pixel.rgb = pixel.rgb * opacity;
    197    *   pixel.a = pixel.a * opactiy;
    198    *
    199    * param[in] layer A <code>PP_Resource</code> corresponding to a compositor
    200    * layer resource.
    201    * param[in] opacity A <code>float</code> for the opacity value, The default
    202    * value is 1.0f.
    203    *
    204    * @return An int32_t containing a result code from <code>pp_errors.h</code>.
    205    */
    206   int32_t SetOpacity([in] PP_Resource layer,
    207                      [in] float_t opacity);
    208 
    209   /**
    210    * Sets the blend mode which is used to composite the layer.
    211    *
    212    * param[in] layer A <code>PP_Resource</code> corresponding to a compositor
    213    * layer resource.
    214    * param[in] mode A <code>PP_BlendMode</code>. The default mode is
    215    * <code>PP_BLENDMODE_SRC_OVER</code>.
    216    *
    217    * @return An int32_t containing a result code from <code>pp_errors.h</code>.
    218    */
    219   int32_t SetBlendMode([in] PP_Resource layer,
    220                        [in] PP_BlendMode mode);
    221 
    222   /**
    223    * Sets a source rectangle for a texture layer or an image layer.
    224    *
    225    * param[in] layer A <code>PP_Resource</code> corresponding to a compositor
    226    * layer resource.
    227    * param[in] rect A <code>PP_FloatRect</code> for an area of the source to
    228    * consider. For a texture layer, rect is in uv coordinates. For an image
    229    * layer, rect is in pixels. If the rect is beyond the dimensions of the
    230    * texture or image, <code>PP_ERROR_BADARGUMENT</code> will be returned.
    231    * If the layer size does not match the source rect size, bilinear scaling
    232    * will be used.
    233    *
    234    * @return An int32_t containing a result code from <code>pp_errors.h</code>.
    235    */
    236   int32_t SetSourceRect([in] PP_Resource layer,
    237                         [in] PP_FloatRect rect);
    238 
    239   /**
    240    * Sets the premultiplied alpha for an texture layer.
    241    *
    242    * param[in] layer A <code>PP_Resource</code> corresponding to a compositor
    243    * layer resource.
    244    * param[in] premult A <code>PP_Bool</code> with <code>PP_TRUE</code> if
    245    * pre-multiplied alpha is used.
    246    *
    247    * @return An int32_t containing a result code from <code>pp_errors.h</code>.
    248    */
    249   int32_t SetPremultipliedAlpha([in] PP_Resource layer,
    250                                 [in] PP_Bool premult);
    251 };
    252