/* 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
* sucessful 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 sucessful 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);
};