/* Copyright 2014 The Chromium Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ /* From ppb_compositor_layer.idl modified Thu Aug 14 18:06:33 2014. */ #ifndef PPAPI_C_PPB_COMPOSITOR_LAYER_H_ #define PPAPI_C_PPB_COMPOSITOR_LAYER_H_ #include "ppapi/c/pp_bool.h" #include "ppapi/c/pp_completion_callback.h" #include "ppapi/c/pp_macros.h" #include "ppapi/c/pp_point.h" #include "ppapi/c/pp_rect.h" #include "ppapi/c/pp_resource.h" #include "ppapi/c/pp_size.h" #include "ppapi/c/pp_stdint.h" #define PPB_COMPOSITORLAYER_INTERFACE_0_1 "PPB_CompositorLayer;0.1" /* dev */ #define PPB_COMPOSITORLAYER_INTERFACE_0_2 "PPB_CompositorLayer;0.2" /* dev */ /** * @file */ /** * @addtogroup Enums * @{ */ /** * This enumeration contains blend modes used for computing the result pixels * based on the source RGBA values in layers with the RGBA values that are * already in the destination framebuffer. * alpha_src, color_src: source alpha and color. * alpha_dst, color_dst: destination alpha and color (before compositing). * Below descriptions of the blend modes assume the colors are pre-multiplied. * This interface is still in development (Dev API status) and may change, * so is only supported on Dev channel and Canary currently. */ typedef enum { /** * No blending, copy source to the destination directly. */ PP_BLENDMODE_NONE, /** * Source is placed over the destination. * Resulting alpha = alpha_src + alpha_dst - alpha_src * alpha_dst * Resulting color = color_src + color_dst * (1 - alpha_src) */ PP_BLENDMODE_SRC_OVER, /** * The last blend mode. */ PP_BLENDMODE_LAST = PP_BLENDMODE_SRC_OVER } PP_BlendMode; /** * @} */ /** * @addtogroup Interfaces * @{ */ /** * Defines the PPB_CompositorLayer interface. It is used by * PPB_Compositor. */ struct PPB_CompositorLayer_0_2 { /* dev */ /** * Determines if a resource is a compositor layer resource. * * @param[in] resource The PP_Resource to test. * * @return A PP_Bool with PP_TRUE if the given * resource is a compositor layer resource or PP_FALSE * otherwise. */ PP_Bool (*IsCompositorLayer)(PP_Resource resource); /** * Sets the color of a solid color layer. If the layer is uninitialized, * it will initialize the layer first, and then set its color. * If the layer has been initialized to another kind of layer, the layer will * not be changed, and PP_ERROR_BADARGUMENT will be returned. * * param[in] layer A PP_Resource corresponding to a compositor * layer resource. * param[in] red A float for the red color component. It will be * clamped to [0, 1]. * param[in] green A float for the green color component. It will * be clamped to [0, 1]. * param[in] blue A float for the blue color component. It will * be clamped to [0, 1]. * param[in] alpha A float for the alpha color component. It will * be clamped to [0, 1]. * param[in] size A PP_Size for the size of the layer before * transform. * * @return An int32_t containing a result code from pp_errors.h. */ int32_t (*SetColor)(PP_Resource layer, float red, float green, float blue, float alpha, const struct PP_Size* size); /** * Sets the texture of a texture layer. If the layer is uninitialized, * it will initialize the layer first, and then set its texture. * The source rect will be set to ((0, 0), (1, 1)). If the layer has been * initialized to another kind of layer, the layer will not be changed, * and PP_ERROR_BADARGUMENT will be returned. * * param[in] layer A PP_Resource corresponding to a compositor * layer resource. * param[in] context A PP_Resource corresponding to a graphics * 3d resource which owns the GL texture. * param[in] target GL texture target (GL_TEXTURE_2D, etc). * param[in] texture A GL texture object id. * param[in] size A PP_Size for the size of the layer before * transform. * param[in] cc A PP_CompletionCallback to be called when * the texture is released by Chromium compositor. * * @return An int32_t containing a result code from pp_errors.h. */ int32_t (*SetTexture)(PP_Resource layer, PP_Resource context, uint32_t target, uint32_t texture, const struct PP_Size* size, struct PP_CompletionCallback cc); /** * Sets the image of an image layer. If the layer is uninitialized, * it will initialize the layer first, and then set its image. * The layer size will be set to the image's size. The source rect will be set * to the full image. If the layer has been initialized to another kind of * layer, the layer will not be changed, and PP_ERROR_BADARGUMENT * will be returned. * * param[in] layer A PP_Resource corresponding to a compositor * layer resource. * param[in] image_data A PP_Resource corresponding to * an image data resource. * param[in] size A PP_Size for the size of the layer before * transform. If NULL, the image's size will be used. * param[in] cc A PP_CompletionCallback to be called when * the image data is released by Chromium compositor. * * @return An int32_t containing a result code from pp_errors.h. */ int32_t (*SetImage)(PP_Resource layer, PP_Resource image_data, const struct PP_Size* size, struct PP_CompletionCallback cc); /** * Sets a clip rectangle for a compositor layer. The Chromium compositor * applies a transform matrix on the layer first, and then clips the layer * with the rectangle. * * param[in] layer A PP_Resource corresponding to a compositor * layer resource. * param[in] rect The clip rectangle. The origin is top-left corner of * the plugin. * * @return An int32_t containing a result code from pp_errors.h. */ int32_t (*SetClipRect)(PP_Resource layer, const struct PP_Rect* rect); /** * Sets a transform matrix which is used to composite the layer. * * param[in] layer A PP_Resource corresponding to a compositor * layer resource. * param[in] matrix A float array with 16 elements. The matrix is * column major. The default transform matrix is an identity matrix. * * @return An int32_t containing a result code from pp_errors.h. */ int32_t (*SetTransform)(PP_Resource layer, const float matrix[16]); /** * Sets the opacity value which will be applied to the layer. The effective * value of each pixel is computed as: * * if (premult_alpha) * pixel.rgb = pixel.rgb * opacity; * pixel.a = pixel.a * opactiy; * * param[in] layer A PP_Resource corresponding to a compositor * layer resource. * param[in] opacity A float for the opacity value, The default * value is 1.0f. * * @return An int32_t containing a result code from pp_errors.h. */ int32_t (*SetOpacity)(PP_Resource layer, float opacity); /** * Sets the blend mode which is used to composite the layer. * * param[in] layer A PP_Resource corresponding to a compositor * layer resource. * param[in] mode A PP_BlendMode. The default mode is * PP_BLENDMODE_SRC_OVER. * * @return An int32_t containing a result code from pp_errors.h. */ int32_t (*SetBlendMode)(PP_Resource layer, PP_BlendMode mode); /** * Sets a source rectangle for a texture layer or an image layer. * * param[in] layer A PP_Resource corresponding to a compositor * layer resource. * param[in] rect A PP_FloatRect for an area of the source to * consider. For a texture layer, rect is in uv coordinates. For an image * layer, rect is in pixels. If the rect is beyond the dimensions of the * texture or image, PP_ERROR_BADARGUMENT will be returned. * If the layer size does not match the source rect size, bilinear scaling * will be used. * * @return An int32_t containing a result code from pp_errors.h. */ int32_t (*SetSourceRect)(PP_Resource layer, const struct PP_FloatRect* rect); /** * Sets the premultiplied alpha for an texture layer. * * param[in] layer A PP_Resource corresponding to a compositor * layer resource. * param[in] premult A PP_Bool with PP_TRUE if * pre-multiplied alpha is used. * * @return An int32_t containing a result code from pp_errors.h. */ int32_t (*SetPremultipliedAlpha)(PP_Resource layer, PP_Bool premult); }; struct PPB_CompositorLayer_0_1 { /* dev */ PP_Bool (*IsCompositorLayer)(PP_Resource resource); int32_t (*SetColor)(PP_Resource layer, float red, float green, float blue, float alpha, const struct PP_Size* size); int32_t (*SetTexture)(PP_Resource layer, PP_Resource context, uint32_t texture, const struct PP_Size* size, struct PP_CompletionCallback cc); int32_t (*SetImage)(PP_Resource layer, PP_Resource image_data, const struct PP_Size* size, struct PP_CompletionCallback cc); int32_t (*SetClipRect)(PP_Resource layer, const struct PP_Rect* rect); int32_t (*SetTransform)(PP_Resource layer, const float matrix[16]); int32_t (*SetOpacity)(PP_Resource layer, float opacity); int32_t (*SetBlendMode)(PP_Resource layer, PP_BlendMode mode); int32_t (*SetSourceRect)(PP_Resource layer, const struct PP_FloatRect* rect); int32_t (*SetPremultipliedAlpha)(PP_Resource layer, PP_Bool premult); }; /** * @} */ #endif /* PPAPI_C_PPB_COMPOSITOR_LAYER_H_ */