146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/* Copyright 2014 The Chromium Authors. All rights reserved.
246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * found in the LICENSE file.
446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) */
546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)[generate_thunk]
746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)label Chrome {
946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  [channel=dev] M37 = 0.1
1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/**
1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * Defines the <code>PPB_Compositor</code> interface. Used for setting
1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * <code>PPB_CompositorLayer</code> layers to the Chromium compositor for
1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * compositing. This allows a plugin to combine different sources of visual
1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * data efficiently, such as <code>PPB_ImageData</code> images and
1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * OpenGL textures. See also <code>PPB_CompositorLayer</code> for more
1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * information.
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * This interface is still in development (Dev API status) and may change,
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * so is only supported on Dev channel and Canary currently.
2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *
2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * <strong>Example usage from plugin code:</strong>
2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *
2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * <strong>Setup:</strong>
2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @code
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * PP_Resource compositor;
2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * compositor = compositor_if->Create(instance);
2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * instance_if->BindGraphics(instance, compositor);
2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @endcode
3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *
3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * <strong>Setup layer stack:</strong>
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @code
3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * PP_Resource color_layer = compositor_if->AddLayer(compositor);
3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * PP_Resource texture_layer = compositor_if->AddLayer(compositor);
3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @endcode
3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *
3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * <strong> Present one frame:</strong>
3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * layer_if->SetColor(color_layer, 255, 255, 0, 255, PP_MakeSize(400, 400));
3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * PP_CompletionCallback release_callback = {
4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *   TextureReleasedCallback, 0, PP_COMPLETIONCALLBACK_FLAG_NONE,
4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * };
4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * layer_if->SetTexture(texture_layer, graphics3d, texture_id,
4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *                      PP_MakeSize(300, 300), release_callback);
4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *
4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * PP_CompletionCallback callback = {
4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *   DidFinishCommitLayersCallback,
4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *   (void*) texture_id,
4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *   PP_COMPLETIONCALLBACK_FLAG_NONE,
4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * };
5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * compositor_if->CommitLayers(compositor, callback);
5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @endcode
5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *
5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * <strong>release callback</strong>
5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * void ReleaseCallback(int32_t result, void* user_data) {
5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *   if (result == PP_OK) {
5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *     uint32_t texture_id = (uint32_t) user_data;
5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *     // reuse the texture or delete it.
5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *   }
5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * }
6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) *
6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * <strong>Shutdown:</strong>
6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @code
6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * core->ReleaseResource(color_layer);
6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * core->ReleaseResource(texture_layer);
6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * core->ReleaseResource(compositor);
6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) * @endcode
6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) */
6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)interface PPB_Compositor {
7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  /**
7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * Determines if a resource is a compositor resource.
7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   *
7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * @param[in] resource The <code>PP_Resource</code> to test.
7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   *
7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * @return A <code>PP_Bool</code> with <code>PP_TRUE</code> if the given
7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * resource is a compositor resource or <code>PP_FALSE</code> otherwise.
7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   */
7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PP_Bool IsCompositor([in] PP_Resource resource);
7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  /**
8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * Creates a Compositor resource.
8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   *
8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * @param[in] instance A <code>PP_Instance</code> identifying one instance
8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * of a module.
8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   *
8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * @return A <code>PP_Resource</code> containing the compositor resource if
8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * sucessful or 0 otherwise.
8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   */
8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PP_Resource Create([in] PP_Instance instance);
9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  /**
9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * Creates a new <code>PPB_CompositorLayer</code> and adds it to the end
9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * of the layer stack. A <code>PP_Resource</code> containing the layer is
9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * returned. It is uninitialized, <code>SetColor()</code>,
9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * <code>SetTexture</code> or <code>SetImage</code> should be used to
9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * initialize it. The layer will appear above other pre-existing layers.
9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * If <code>ResetLayers</code> is called or the <code>PPB_Compositor</code> is
9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * released, the returned layer will be invalidated, and any further calls on
9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * the layer will return <code>PP_ERROR_BADRESOURCE</code>.
10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   *
10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * param[in] compositor A <code>PP_Resource</code> corresponding to
10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * a compositor layer resource.
10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   *
10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * @return A <code>PP_Resource</code> containing the compositor layer
10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * resource if sucessful or 0 otherwise.
10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   */
10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  PP_Resource AddLayer([in] PP_Resource compositor);
10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  /**
11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * Commits layers added by <code>AddLayer()</code> to the chromium compositor.
11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   *
11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * param[in] compositor A <code>PP_Resource</code> corresponding to
11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * a compositor layer resource.
11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * @param[in] cc A <code>PP_CompletionCallback</code> to be called when
11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * layers have been represented on screen.
11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   *
11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * @return An int32_t containing a result code from <code>pp_errors.h</code>.
11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   */
11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  int32_t CommitLayers([in] PP_Resource compositor,
12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                       [in] PP_CompletionCallback cc);
12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  /**
12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * Resets layers added by <code>AddLayer()</code>.
12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   *
12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * param[in] compositor A <code>PP_Resource</code> corresponding to
12646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * a compositor layer resource.
12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   *
12846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   * @return An int32_t containing a result code from <code>pp_errors.h</code>.
12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)   */
13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  int32_t ResetLayers([in] PP_Resource compositor);
13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
132