compositor.h revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
1// Copyright (c) 2012 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 CONTENT_PUBLIC_BROWSER_ANDROID_COMPOSITOR_H_ 6#define CONTENT_PUBLIC_BROWSER_ANDROID_COMPOSITOR_H_ 7 8#include "base/callback.h" 9#include "content/common/content_export.h" 10#include "ui/gfx/native_widget_types.h" 11#include "ui/gfx/rect.h" 12#include "ui/gfx/size.h" 13 14#include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" 15 16namespace cc { 17class Layer; 18} 19 20namespace gfx { 21class JavaBitmap; 22} 23 24namespace content { 25class CompositorClient; 26 27// An interface to the browser-side compositor. 28class CONTENT_EXPORT Compositor { 29 public: 30 virtual ~Compositor() {} 31 32 // Performs the global initialization needed before any compositor 33 // instance can be used. This should be called only once. 34 static void Initialize(); 35 36 enum CompositorFlags { 37 // Creates a direct GL context on the thread that draws 38 // (i.e. main or impl thread). 39 DIRECT_CONTEXT_ON_DRAW_THREAD = 1, 40 41 // Runs the compositor in threaded mode. 42 ENABLE_COMPOSITOR_THREAD = 1 << 1, 43 }; 44 45 // Initialize with flags. This should only be called once instead 46 // of Initialize(). 47 static void InitializeWithFlags(uint32 flags); 48 49 // Creates and returns a compositor instance. 50 static Compositor* Create(CompositorClient* client); 51 52 // Attaches the layer tree. 53 virtual void SetRootLayer(scoped_refptr<cc::Layer> root) = 0; 54 55 // Set the scale factor from DIP to pixel. 56 virtual void setDeviceScaleFactor(float factor) = 0; 57 58 // Set the output surface bounds. 59 virtual void SetWindowBounds(const gfx::Size& size) = 0; 60 61 // Sets the window visibility. When becoming invisible, resources will get 62 // freed and other calls into the compositor are not allowed until after 63 // having been made visible again. 64 virtual void SetVisible(bool visible) = 0; 65 66 // Set the output surface handle which the compositor renders into. 67 // DEPRECATED: Use SetSurface() which takes a Java Surface object. 68 virtual void SetWindowSurface(ANativeWindow* window) = 0; 69 70 // Set the output surface which the compositor renders into. 71 virtual void SetSurface(jobject surface) = 0; 72 73 // Tells the view tree to assume a transparent background when rendering. 74 virtual void SetHasTransparentBackground(bool flag) = 0; 75 76 // Attempts to composite and read back the result into the provided buffer. 77 // The buffer must be at least window width * height * 4 (RGBA) bytes large. 78 // The buffer is not modified if false is returned. 79 virtual bool CompositeAndReadback(void *pixels, const gfx::Rect& rect) = 0; 80 81 // Invalidate the whole viewport. 82 virtual void SetNeedsRedraw() = 0; 83 84 // Composite immediately. Used in single-threaded mode. 85 virtual void Composite() = 0; 86 87 // Generates an OpenGL texture and returns a texture handle. May return 0 88 // if the current context is lost. 89 virtual WebKit::WebGLId GenerateTexture(gfx::JavaBitmap& bitmap) = 0; 90 91 // Generates an OpenGL compressed texture and returns a texture handle. May 92 // return 0 if the current context is lost. 93 virtual WebKit::WebGLId GenerateCompressedTexture(gfx::Size& size, 94 int data_size, 95 void* data) = 0; 96 97 // Deletes an OpenGL texture. 98 virtual void DeleteTexture(WebKit::WebGLId texture_id) = 0; 99 100 // Grabs a copy of |texture_id| and saves it into |bitmap|. No scaling is 101 // done. It is assumed that the texture size matches that of the bitmap. 102 virtual bool CopyTextureToBitmap(WebKit::WebGLId texture_id, 103 gfx::JavaBitmap& bitmap) = 0; 104 105 // Grabs a copy of |texture_id| and saves it into |bitmap|. No scaling is 106 // done. |src_rect| allows the caller to specify which rect of |texture_id| 107 // to copy to |bitmap|. It needs to match the size of |bitmap|. Returns 108 // true if the |texture_id| was copied into |bitmap|, false if not. 109 virtual bool CopyTextureToBitmap(WebKit::WebGLId texture_id, 110 const gfx::Rect& src_rect, 111 gfx::JavaBitmap& bitmap) = 0; 112 protected: 113 Compositor() {} 114}; 115 116} // namespace content 117 118#endif // CONTENT_PUBLIC_BROWSER_ANDROID_COMPOSITOR_H_ 119