| // Copyright 2009 The Chromium Authors | |
| // 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 "base/compiler_specific.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; UNSAFE_TODO(++named_function)) { | |
| if (!UNSAFE_TODO(strcmp(name, named_function->name))) { | |
| return named_function->func; | |
| } | |
| } | |
| return nullptr; | |
| } | |
| } // namespace gles2 | |