1// Copyright (c) 2012 The Chromium OS 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 BENCH_GL_GLINTERFACE_H_
6#define BENCH_GL_GLINTERFACE_H_
7
8#include <memory>
9
10//TODO: Remove cases where PLATFORM is not defined, when no longer needed.
11//      Only synccontroltest and teartest get compiled that way, and we plan
12//      to remove them.
13#ifdef PLATFORM
14
15typedef struct waffle_context *GLContext;  // Forward declaration from waffle.h.
16
17#else
18
19#include <X11/Xutil.h>
20
21#if defined(USE_OPENGL)
22
23struct __GLXcontextRec;  // Forward declaration from GLX.h.
24typedef struct __GLXcontextRec *GLXContext;
25typedef GLXContext GLContext;
26
27#elif defined(USE_OPENGLES)
28
29typedef void *EGLContext;  // Forward declaration from EGL.h.
30typedef EGLContext GLContext;
31
32#endif
33#endif
34
35//TODO: Once synccontroltest and teartest are removed, only the waffle
36//      implementation of this interface will remain.  At that time consider
37//      removing this class as waffle itself provides platform-independence.
38class GLInterface {
39 public:
40  GLInterface() {}
41  virtual ~GLInterface() {}
42  virtual bool Init() = 0;
43  virtual void Cleanup() = 0;
44#ifndef PLATFORM
45  virtual XVisualInfo* GetXVisual() = 0;
46#endif
47
48  virtual void SwapBuffers() = 0;
49  //TODO: Remove this when it is no longer used.
50  //      Only teartest calls this, and we plan to remove that.
51  virtual bool SwapInterval(int interval) = 0;
52
53  //TODO: Remove this when it is no longer used.
54  //      Only synccontroltest_egl calls this, and we plan to remove that.
55  virtual void CheckError() = 0;
56
57  virtual bool MakeCurrent(const GLContext& context) = 0;
58  virtual const GLContext CreateContext() = 0;
59  virtual void DeleteContext(const GLContext& context) = 0;
60  virtual const GLContext& GetMainContext() = 0;
61
62  static GLInterface* Create();
63};
64
65extern std::unique_ptr<GLInterface> g_main_gl_interface;
66
67#endif  // BENCH_GL_GLINTERFACE_H_
68