gles2_lib.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "../client/gles2_lib.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "../common/thread_local.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 {
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TODO(kbr): the use of this anonymous namespace core dumps the
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// linker on Mac OS X 10.6 when the symbol ordering file is used
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// namespace {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static gpu::ThreadLocalKey g_gl_context_key;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// }  // namespace anonymous
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Initialize() {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  g_gl_context_key = gpu::ThreadLocalAlloc();
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void Terminate() {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gpu::ThreadLocalFree(g_gl_context_key);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  g_gl_context_key = 0;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gpu::gles2::GLES2Implementation* GetGLContext() {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return static_cast<gpu::gles2::GLES2Implementation*>(
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    gpu::ThreadLocalGetValue(g_gl_context_key));
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetGLContext(gpu::gles2::GLES2Implementation* context) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gpu::ThreadLocalSetValue(g_gl_context_key, context);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace gles2
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
37