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