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