Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / ui / ozone / platform / dri / gbm_surface.h
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 UI_OZONE_PLATFORM_DRI_GBM_SURFACE_H_
6 #define UI_OZONE_PLATFORM_DRI_GBM_SURFACE_H_
7
8 #include "base/macros.h"
9 #include "base/memory/ref_counted.h"
10 #include "ui/gfx/geometry/size.h"
11 #include "ui/ozone/platform/dri/gbm_surfaceless.h"
12 #include "ui/ozone/public/surface_ozone_egl.h"
13
14 struct gbm_bo;
15 struct gbm_device;
16 struct gbm_surface;
17
18 namespace ui {
19
20 class DriBuffer;
21 class DriWrapper;
22
23 // Extends the GBM surfaceless functionality and adds an implicit surface for
24 // the primary plane. Arbitrary buffers can still be allocated and displayed as
25 // overlay planes, however the primary plane is associated with the native
26 // surface and is updated via an EGLSurface.
27 class GbmSurface : public GbmSurfaceless {
28  public:
29   GbmSurface(const base::WeakPtr<HardwareDisplayController>& controller,
30              gbm_device* device,
31              DriWrapper* dri);
32   virtual ~GbmSurface();
33
34   bool Initialize();
35
36   // GbmSurfaceless:
37   virtual intptr_t GetNativeWindow() OVERRIDE;
38   virtual bool ResizeNativeWindow(const gfx::Size& viewport_size) OVERRIDE;
39   virtual bool OnSwapBuffers() OVERRIDE;
40
41  private:
42   gbm_device* gbm_device_;
43
44   DriWrapper* dri_;
45
46   // The native GBM surface. In EGL this represents the EGLNativeWindowType.
47   gbm_surface* native_surface_;
48
49   // Buffer currently used for scanout.
50   gbm_bo* current_buffer_;
51
52   gfx::Size size_;
53
54   DISALLOW_COPY_AND_ASSIGN(GbmSurface);
55 };
56
57 }  // namespace ui
58
59 #endif  // UI_OZONE_PLATFORM_DRI_GBM_SURFACE_H_