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 UI_GL_GL_SURFACE_WGL_H_
6#define UI_GL_GL_SURFACE_WGL_H_
7
8#include "ui/gfx/native_widget_types.h"
9#include "ui/gl/gl_surface.h"
10
11namespace gfx {
12
13// Base interface for WGL surfaces.
14class GLSurfaceWGL : public GLSurface {
15 public:
16  GLSurfaceWGL();
17  virtual ~GLSurfaceWGL();
18
19  // Implement GLSurface.
20  virtual void* GetDisplay();
21
22  static bool InitializeOneOff();
23  static HDC GetDisplayDC();
24
25 private:
26  DISALLOW_COPY_AND_ASSIGN(GLSurfaceWGL);
27};
28
29// A surface used to render to a view.
30class NativeViewGLSurfaceWGL : public GLSurfaceWGL {
31 public:
32  explicit NativeViewGLSurfaceWGL(gfx::AcceleratedWidget window);
33  virtual ~NativeViewGLSurfaceWGL();
34
35  // Implement GLSurface.
36  virtual bool Initialize();
37  virtual void Destroy();
38  virtual bool IsOffscreen();
39  virtual bool SwapBuffers();
40  virtual gfx::Size GetSize();
41  virtual void* GetHandle();
42
43 private:
44  gfx::AcceleratedWidget window_;
45  gfx::AcceleratedWidget child_window_;
46  HDC device_context_;
47
48  DISALLOW_COPY_AND_ASSIGN(NativeViewGLSurfaceWGL);
49};
50
51
52// A surface used to render to an offscreen pbuffer.
53class PbufferGLSurfaceWGL : public GLSurfaceWGL {
54 public:
55  explicit PbufferGLSurfaceWGL(const gfx::Size& size);
56  virtual ~PbufferGLSurfaceWGL();
57
58  // Implement GLSurface.
59  virtual bool Initialize();
60  virtual void Destroy();
61  virtual bool IsOffscreen();
62  virtual bool SwapBuffers();
63  virtual gfx::Size GetSize();
64  virtual void* GetHandle();
65
66 private:
67  gfx::Size size_;
68  HDC device_context_;
69  void* pbuffer_;
70
71  DISALLOW_COPY_AND_ASSIGN(PbufferGLSurfaceWGL);
72};
73
74}  // namespace gfx
75
76#endif  // UI_GL_GL_SURFACE_WGL_H_
77