// Copyright 2015 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_WAFFLE_STUFF_H_
#define BENCH_GL_WAFFLE_STUFF_H_

#include <waffle.h>

#include "glinterface.h"

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

  virtual bool Init();
  virtual void Cleanup();

  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_; }

  const struct waffle_display* display() const { return display_; }
  const struct waffle_window* surface() const { return surface_; }

 private:
  void InitOnce();
  void GetSurfaceSize(GLint* width, GLint* height);

  struct waffle_display* display_;
  struct waffle_config* config_;
  struct waffle_window* surface_;
  struct waffle_context* context_;
};

#endif  // BENCH_GL_WAFFLE_STUFF_H_
