// Copyright (c) 2009 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.

#include "gpu/command_buffer/client/gles2_lib.h"
#include <string.h>
#include "gpu/command_buffer/common/thread_local.h"

namespace gles2 {

// This is defined in gles2_c_lib_autogen.h
extern "C" {
extern const NameToFunc g_gles2_function_table[];
}

// TODO(kbr): the use of this anonymous namespace core dumps the
// linker on Mac OS X 10.6 when the symbol ordering file is used
// namespace {
static gpu::ThreadLocalKey g_gl_context_key;
// }  // namespace anonymous

void Initialize() {
  g_gl_context_key = gpu::ThreadLocalAlloc();
}

void Terminate() {
  gpu::ThreadLocalFree(g_gl_context_key);
  g_gl_context_key = 0;
}

gpu::gles2::GLES2Interface* GetGLContext() {
  return static_cast<gpu::gles2::GLES2Interface*>(
    gpu::ThreadLocalGetValue(g_gl_context_key));
}

void SetGLContext(gpu::gles2::GLES2Interface* context) {
  gpu::ThreadLocalSetValue(g_gl_context_key, context);
}

GLES2FunctionPointer GetGLFunctionPointer(const char* name) {
  for (const NameToFunc* named_function = g_gles2_function_table;
       named_function->name;
       ++named_function) {
    if (!strcmp(name, named_function->name)) {
      return named_function->func;
    }
  }
  return nullptr;
}

}  // namespace gles2




