// Copyright (c) 2010 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 GLBENCH_EGL_STUFF_H_
#define GLBENCH_EGL_STUFF_H_

#include "base/logging.h"
#include "glbench/glinterface.h"
#include <EGL/egl.h>

class EGLInterface : public GLInterface {
 public:
  EGLInterface() : display_(EGL_NO_DISPLAY),
                   config_(NULL),
                   surface_(NULL),
                   context_(NULL) { }
  virtual ~EGLInterface() {}

  virtual bool Init();
  virtual void Cleanup();
  virtual XVisualInfo* GetXVisual();

  virtual void SwapBuffers();
  virtual bool SwapInterval(int interval);

  virtual void CheckError();

  virtual bool MakeCurrent(const GLContext& context);
  virtual const GLContext CreateContext();
  virtual void DeleteContext(const GLContext& context);
  virtual const GLContext& GetMainContext() {
    return context_;
  }

  void TerminateGL();

  const EGLDisplay display() const {
    return display_;
  }

  const EGLSurface surface() const {
    return surface_;
  }

 private:
  EGLDisplay display_;
  EGLConfig config_;
  EGLSurface surface_;
  EGLContext context_;
};

#endif  // GLBENCH_EGL_STUFF_H_
