// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef BENCH_GL_GLINTERFACE_H_
#define BENCH_GL_GLINTERFACE_H_

#include <memory>

// TODO: Remove cases where PLATFORM is not defined, when no longer needed.
//      Only synccontroltest and teartest get compiled that way, and we plan
//      to remove them.
#ifdef PLATFORM

typedef struct waffle_context* GLContext;  // Forward declaration from waffle.h.

#else

#include <X11/Xutil.h>

#if defined(USE_OPENGL)

struct __GLXcontextRec;  // Forward declaration from GLX.h.
typedef struct __GLXcontextRec* GLXContext;
typedef GLXContext GLContext;

#elif defined(USE_OPENGLES)

typedef void* EGLContext;  // Forward declaration from EGL.h.
typedef EGLContext GLContext;

#endif
#endif

// TODO: Once synccontroltest and teartest are removed, only the waffle
//      implementation of this interface will remain.  At that time consider
//      removing this class as waffle itself provides platform-independence.
class GLInterface {
 public:
  GLInterface() {}
  virtual ~GLInterface() {}
  virtual bool Init() = 0;
  virtual void Cleanup() = 0;
#ifndef PLATFORM
  virtual XVisualInfo* GetXVisual() = 0;
#endif

  virtual void SwapBuffers() = 0;
  // TODO: Remove this when it is no longer used.
  //      Only teartest calls this, and we plan to remove that.
  virtual bool SwapInterval(int interval) = 0;

  // TODO: Remove this when it is no longer used.
  //      Only synccontroltest_egl calls this, and we plan to remove that.
  virtual void CheckError() = 0;

  virtual bool MakeCurrent(const GLContext& context) = 0;
  virtual const GLContext CreateContext() = 0;
  virtual void DeleteContext(const GLContext& context) = 0;
  virtual const GLContext& GetMainContext() = 0;

  static GLInterface* Create();
};

extern std::unique_ptr<GLInterface> g_main_gl_interface;

#endif  // BENCH_GL_GLINTERFACE_H_
