1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
/* 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.idl modified Tue Jun 3 12:44:44 2014. */
#ifndef PPAPI_C_PPB_COMPOSITOR_H_
#define PPAPI_C_PPB_COMPOSITOR_H_
#include "ppapi/c/pp_bool.h"
#include "ppapi/c/pp_completion_callback.h"
#include "ppapi/c/pp_instance.h"
#include "ppapi/c/pp_macros.h"
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_stdint.h"
#define PPB_COMPOSITOR_INTERFACE_0_1 "PPB_Compositor;0.1" /* dev */
/**
* @file
*/
/**
* @addtogroup Interfaces
* @{
*/
/**
* Defines the <code>PPB_Compositor</code> interface. Used for setting
* <code>PPB_CompositorLayer</code> layers to the Chromium compositor for
* compositing. This allows a plugin to combine different sources of visual
* data efficiently, such as <code>PPB_ImageData</code> images and
* OpenGL textures. See also <code>PPB_CompositorLayer</code> 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.
*
* <strong>Example usage from plugin code:</strong>
*
* <strong>Setup:</strong>
* @code
* PP_Resource compositor;
* compositor = compositor_if->Create(instance);
* instance_if->BindGraphics(instance, compositor);
* @endcode
*
* <strong>Setup layer stack:</strong>
* @code
* PP_Resource color_layer = compositor_if->AddLayer(compositor);
* PP_Resource texture_layer = compositor_if->AddLayer(compositor);
* @endcode
*
* <strong> Present one frame:</strong>
* 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
*
* <strong>release callback</strong>
* 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.
* }
* }
*
* <strong>Shutdown:</strong>
* @code
* core->ReleaseResource(color_layer);
* core->ReleaseResource(texture_layer);
* core->ReleaseResource(compositor);
* @endcode
*/
struct PPB_Compositor_0_1 { /* dev */
/**
* Determines if a resource is a compositor resource.
*
* @param[in] resource The <code>PP_Resource</code> to test.
*
* @return A <code>PP_Bool</code> with <code>PP_TRUE</code> if the given
* resource is a compositor resource or <code>PP_FALSE</code> otherwise.
*/
PP_Bool (*IsCompositor)(PP_Resource resource);
/**
* Creates a Compositor resource.
*
* @param[in] instance A <code>PP_Instance</code> identifying one instance
* of a module.
*
* @return A <code>PP_Resource</code> containing the compositor resource if
* sucessful or 0 otherwise.
*/
PP_Resource (*Create)(PP_Instance instance);
/**
* Creates a new <code>PPB_CompositorLayer</code> and adds it to the end
* of the layer stack. A <code>PP_Resource</code> containing the layer is
* returned. It is uninitialized, <code>SetColor()</code>,
* <code>SetTexture</code> or <code>SetImage</code> should be used to
* initialize it. The layer will appear above other pre-existing layers.
* If <code>ResetLayers</code> is called or the <code>PPB_Compositor</code> is
* released, the returned layer will be invalidated, and any further calls on
* the layer will return <code>PP_ERROR_BADRESOURCE</code>.
*
* param[in] compositor A <code>PP_Resource</code> corresponding to
* a compositor layer resource.
*
* @return A <code>PP_Resource</code> containing the compositor layer
* resource if sucessful or 0 otherwise.
*/
PP_Resource (*AddLayer)(PP_Resource compositor);
/**
* Commits layers added by <code>AddLayer()</code> to the chromium compositor.
*
* param[in] compositor A <code>PP_Resource</code> corresponding to
* a compositor layer resource.
* @param[in] cc A <code>PP_CompletionCallback</code> to be called when
* layers have been represented on screen.
*
* @return An int32_t containing a result code from <code>pp_errors.h</code>.
*/
int32_t (*CommitLayers)(PP_Resource compositor,
struct PP_CompletionCallback cc);
/**
* Resets layers added by <code>AddLayer()</code>.
*
* param[in] compositor A <code>PP_Resource</code> corresponding to
* a compositor layer resource.
*
* @return An int32_t containing a result code from <code>pp_errors.h</code>.
*/
int32_t (*ResetLayers)(PP_Resource compositor);
};
/**
* @}
*/
#endif /* PPAPI_C_PPB_COMPOSITOR_H_ */
|