// 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/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:
  ControlThunksImpl();
  ~ControlThunksImpl();

  base::ThreadLocalPointer<GLES2Context> current_context_tls_;

  DISALLOW_COPY_AND_ASSIGN(ControlThunksImpl);
};

}  // namespace gles2

#endif  // MOJO_GLES2_CONTROL_THUNKS_IMPL_H_
