/* 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. */ [generate_thunk] label Chrome { [channel=dev] M37 = 0.1 }; /** * Defines the PPB_Compositor interface. Used for setting * PPB_CompositorLayer layers to the Chromium compositor for * compositing. This allows a plugin to combine different sources of visual * data efficiently, such as PPB_ImageData images and * OpenGL textures. See also PPB_CompositorLayer for more * information. * This interface is still in development (Dev API status) and may change, * so is only supported on Dev channel and Canary currently. * * Example usage from plugin code: * * Setup: * @code * PP_Resource compositor; * compositor = compositor_if->Create(instance); * instance_if->BindGraphics(instance, compositor); * @endcode * * Setup layer stack: * @code * PP_Resource color_layer = compositor_if->AddLayer(compositor); * PP_Resource texture_layer = compositor_if->AddLayer(compositor); * @endcode * * Present one frame: * layer_if->SetColor(color_layer, 255, 255, 0, 255, PP_MakeSize(400, 400)); * PP_CompletionCallback release_callback = { * TextureReleasedCallback, 0, PP_COMPLETIONCALLBACK_FLAG_NONE, * }; * layer_if->SetTexture(texture_layer, graphics3d, texture_id, * PP_MakeSize(300, 300), release_callback); * * PP_CompletionCallback callback = { * DidFinishCommitLayersCallback, * (void*) texture_id, * PP_COMPLETIONCALLBACK_FLAG_NONE, * }; * compositor_if->CommitLayers(compositor, callback); * @endcode * * release callback * void ReleaseCallback(int32_t result, void* user_data) { * if (result == PP_OK) { * uint32_t texture_id = (uint32_t) user_data; * // reuse the texture or delete it. * } * } * * Shutdown: * @code * core->ReleaseResource(color_layer); * core->ReleaseResource(texture_layer); * core->ReleaseResource(compositor); * @endcode */ interface PPB_Compositor { /** * Determines if a resource is a compositor resource. * * @param[in] resource The PP_Resource to test. * * @return A PP_Bool with PP_TRUE if the given * resource is a compositor resource or PP_FALSE otherwise. */ PP_Bool IsCompositor([in] PP_Resource resource); /** * Creates a Compositor resource. * * @param[in] instance A PP_Instance identifying one instance * of a module. * * @return A PP_Resource containing the compositor resource if * successful or 0 otherwise. */ PP_Resource Create([in] PP_Instance instance); /** * Creates a new PPB_CompositorLayer and adds it to the end * of the layer stack. A PP_Resource containing the layer is * returned. It is uninitialized, SetColor(), * SetTexture or SetImage should be used to * initialize it. The layer will appear above other pre-existing layers. * If ResetLayers is called or the PPB_Compositor is * released, the returned layer will be invalidated, and any further calls on * the layer will return PP_ERROR_BADRESOURCE. * * param[in] compositor A PP_Resource corresponding to * a compositor layer resource. * * @return A PP_Resource containing the compositor layer * resource if successful or 0 otherwise. */ PP_Resource AddLayer([in] PP_Resource compositor); /** * Commits layers added by AddLayer() to the chromium compositor. * * param[in] compositor A PP_Resource corresponding to * a compositor layer resource. * @param[in] cc A PP_CompletionCallback to be called when * layers have been represented on screen. * * @return An int32_t containing a result code from pp_errors.h. */ int32_t CommitLayers([in] PP_Resource compositor, [in] PP_CompletionCallback cc); /** * Resets layers added by AddLayer(). * * param[in] compositor A PP_Resource corresponding to * a compositor layer resource. * * @return An int32_t containing a result code from pp_errors.h. */ int32_t ResetLayers([in] PP_Resource compositor); };