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)#ifndef PPAPI_CPP_COMPOSITOR_H_ 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define PPAPI_CPP_COMPOSITOR_H_ 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ppapi/c/ppb_compositor.h" 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ppapi/cpp/completion_callback.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ppapi/cpp/compositor_layer.h" 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "ppapi/cpp/resource.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/// @file 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/// This file defines the API to create a compositor in the browser. 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace pp { 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/// The <code>Compositor</code> interface is used for setting 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/// <code>CompositorLayer</code> layers to the Chromium compositor for 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/// compositing. This allows a plugin to combine different sources of visual 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/// data efficiently, such as <code>ImageData</code> images and OpenGL textures. 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)/// See also <code>CompositorLayer</code> for more information. 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class Compositor : public Resource { 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// Default constructor for creating an is_null() 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// <code>Compositor</code> object. 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Compositor(); 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// A constructor for creating and initializing a compositor. 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// On failure, the object will be is_null(). 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) explicit Compositor(const InstanceHandle& instance); 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// The copy constructor for <code>Compositor</code>. 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// @param[in] other A reference to a <code>Compositor</code>. 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Compositor(const Compositor& other); 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// Constructs a <code>Compositor</code> from a <code>Resource</code>. 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// @param[in] resource A <code>PPB_Compositor</code> resource. 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) explicit Compositor(const Resource& resource); 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// A constructor used when you have received a <code>PP_Resource</code> as a 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// return value that has had 1 ref added on behalf of the caller. 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// @param[in] resource A <code>PPB_Compositor</code> resource. 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Compositor(PassRef, PP_Resource resource); 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// Destructor. 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ~Compositor(); 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// Creates a new <code>CompositorLayer</code> and adds it to the end of the 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// layer stack. A <code>CompositorLayer</code> containing the layer is 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// returned. It is uninitialized, <code>SetColor()</code>, 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// <code>SetTexture</code> or <code>SetImage</code> should be used to 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// initialize it. The layer will appear above other pre-existing layers. 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// If <code>ResetLayers</code> is called or the <code>PPB_Compositor</code> 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// is released, the returned layer will be invalidated, and any further calls 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// on the layer will return <code>PP_ERROR_BADRESOURCE</code>. 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// @return A <code>CompositorLayer</code> containing the compositor layer 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// resource. 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CompositorLayer AddLayer(); 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// Commits layers added by <code>AddLayer()</code> to the chromium 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// compositor. 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// @param[in] cc A <code>CompletionCallback</code> to be called when 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// layers have been represented on screen. 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// @return An int32_t containing a result code from <code>pp_errors.h</code>. 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int32_t CommitLayers(const CompletionCallback& cc); 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// Resets layers added by <code>AddLayer()</code> 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// @return An int32_t containing a result code from <code>pp_errors.h</code>. 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int32_t ResetLayers(); 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// Checks whether a <code>Resource</code> is a compositor, to test whether 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// it is appropriate for use with the <code>Compositor</code> constructor. 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// @param[in] resource A <code>Resource</code> to test. 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) /// @return True if <code>resource</code> is a compositor. 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static bool IsCompositor(const Resource& resource); 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace pp 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif // PPAPI_CPP_COMPOSITOR_H_ 91