1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef PPAPI_CPP_COMPOSITOR_H_ 6 #define PPAPI_CPP_COMPOSITOR_H_ 7 8 #include "ppapi/c/ppb_compositor.h" 9 #include "ppapi/cpp/completion_callback.h" 10 #include "ppapi/cpp/compositor_layer.h" 11 #include "ppapi/cpp/resource.h" 12 13 /// @file 14 /// This file defines the API to create a compositor in the browser. 15 namespace pp { 16 17 /// The <code>Compositor</code> interface is used for setting 18 /// <code>CompositorLayer</code> layers to the Chromium compositor for 19 /// compositing. This allows a plugin to combine different sources of visual 20 /// data efficiently, such as <code>ImageData</code> images and OpenGL textures. 21 /// See also <code>CompositorLayer</code> for more information. 22 class Compositor : public Resource { 23 public: 24 /// Default constructor for creating an is_null() 25 /// <code>Compositor</code> object. 26 Compositor(); 27 28 /// A constructor for creating and initializing a compositor. 29 /// 30 /// On failure, the object will be is_null(). 31 explicit Compositor(const InstanceHandle& instance); 32 33 /// The copy constructor for <code>Compositor</code>. 34 /// 35 /// @param[in] other A reference to a <code>Compositor</code>. 36 Compositor(const Compositor& other); 37 38 /// Constructs a <code>Compositor</code> from a <code>Resource</code>. 39 /// 40 /// @param[in] resource A <code>PPB_Compositor</code> resource. 41 explicit Compositor(const Resource& resource); 42 43 /// A constructor used when you have received a <code>PP_Resource</code> as a 44 /// return value that has had 1 ref added on behalf of the caller. 45 /// 46 /// @param[in] resource A <code>PPB_Compositor</code> resource. 47 Compositor(PassRef, PP_Resource resource); 48 49 /// Destructor. 50 ~Compositor(); 51 52 /// Creates a new <code>CompositorLayer</code> and adds it to the end of the 53 /// layer stack. A <code>CompositorLayer</code> containing the layer is 54 /// returned. It is uninitialized, <code>SetColor()</code>, 55 /// <code>SetTexture</code> or <code>SetImage</code> should be used to 56 /// initialize it. The layer will appear above other pre-existing layers. 57 /// If <code>ResetLayers</code> is called or the <code>PPB_Compositor</code> 58 /// is released, the returned layer will be invalidated, and any further calls 59 /// on the layer will return <code>PP_ERROR_BADRESOURCE</code>. 60 /// 61 /// @return A <code>CompositorLayer</code> containing the compositor layer 62 /// resource. 63 CompositorLayer AddLayer(); 64 65 /// Commits layers added by <code>AddLayer()</code> to the chromium 66 /// compositor. 67 /// 68 /// @param[in] cc A <code>CompletionCallback</code> to be called when 69 /// layers have been represented on screen. 70 /// 71 /// @return An int32_t containing a result code from <code>pp_errors.h</code>. 72 int32_t CommitLayers(const CompletionCallback& cc); 73 74 /// Resets layers added by <code>AddLayer()</code> 75 /// 76 /// @return An int32_t containing a result code from <code>pp_errors.h</code>. 77 int32_t ResetLayers(); 78 79 /// Checks whether a <code>Resource</code> is a compositor, to test whether 80 /// it is appropriate for use with the <code>Compositor</code> constructor. 81 /// 82 /// @param[in] resource A <code>Resource</code> to test. 83 /// 84 /// @return True if <code>resource</code> is a compositor. 85 static bool IsCompositor(const Resource& resource); 86 }; 87 88 } // namespace pp 89 90 #endif // PPAPI_CPP_COMPOSITOR_H_ 91