15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2009 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/command_buffer/client/gles2_lib.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string.h>
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "gpu/command_buffer/common/thread_local.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 {
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This is defined in gles2_c_lib_autogen.h
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern const NameToFunc g_gles2_function_table[];
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(kbr): the use of this anonymous namespace core dumps the
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// linker on Mac OS X 10.6 when the symbol ordering file is used
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// namespace {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static gpu::ThreadLocalKey g_gl_context_key;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// }  // namespace anonymous
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Initialize() {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  g_gl_context_key = gpu::ThreadLocalAlloc();
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Terminate() {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gpu::ThreadLocalFree(g_gl_context_key);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  g_gl_context_key = 0;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)gpu::gles2::GLES2Interface* GetGLContext() {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return static_cast<gpu::gles2::GLES2Interface*>(
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gpu::ThreadLocalGetValue(g_gl_context_key));
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SetGLContext(gpu::gles2::GLES2Interface* context) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gpu::ThreadLocalSetValue(g_gl_context_key, context);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GLES2FunctionPointer GetGLFunctionPointer(const char* name) {
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (const NameToFunc* named_function = g_gles2_function_table;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       named_function->name;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       ++named_function) {
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (!strcmp(name, named_function->name)) {
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return named_function->func;
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return NULL;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gles2
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
56