// Copyright 2015 The Chromium 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 MOJO_GLES2_CONTROL_THUNKS_IMPL_H_
#define MOJO_GLES2_CONTROL_THUNKS_IMPL_H_

#include "base/lazy_instance.h"
#include "base/macros.h"
#include "base/threading/thread_local.h"
#include "gpu/GLES2/gl2extchromium.h"
#include "mojo/gles2/gles2_context.h"
#include "mojo/public/c/gpu/MGL/mgl.h"
#include "mojo/public/c/gpu/MGL/mgl_signal_sync_point.h"

namespace gpu {
namespace gles2 {
class GLES2Interface;
}
}

namespace gles2 {

// ControlThunksImpl is a singleton class that implements the MGL control
// functions. The class maintains a lazily allocated TLS slot on each thread for
// the current GL context.
class ControlThunksImpl {
 public:
  static ControlThunksImpl* Get();

  MGLContext CreateContext(MGLOpenGLAPIVersion version,
                           MojoHandle command_buffer_handle,
                           MGLContext share_group,
                           MGLContextLostCallback lost_callback,
                           void* lost_callback_closure,
                           const struct MojoAsyncWaiter* async_waiter);

  void DestroyContext(MGLContext context);

  void MakeCurrent(MGLContext context);

  MGLContext GetCurrentContext();

  void ResizeSurface(uint32_t width, uint32_t height);

  void SwapBuffers();

  MGLMustCastToProperFunctionPointerType GetProcAddress(const char* procname);

  void* GetGLES2Interface(MGLContext context);

  void SignalSyncPoint(uint32_t sync_point,
                       MGLSignalSyncPointCallback callback,
                       void* closure);

  gpu::gles2::GLES2Interface* CurrentGLES2Interface();

 private:
  friend base::DefaultLazyInstanceTraits<gles2::ControlThunksImpl>;
  ControlThunksImpl();
  ~ControlThunksImpl();

  base::ThreadLocalPointer<GLES2Context> current_context_tls_;

  DISALLOW_COPY_AND_ASSIGN(ControlThunksImpl);
};

}  // namespace gles2

#endif  // MOJO_GLES2_CONTROL_THUNKS_IMPL_H_
