diff options
Diffstat (limited to 'mojo/gles2')
-rw-r--r-- | mojo/gles2/gles2_impl.cc | 46 |
1 files changed, 17 insertions, 29 deletions
diff --git a/mojo/gles2/gles2_impl.cc b/mojo/gles2/gles2_impl.cc index 59b4278..a77405f 100644 --- a/mojo/gles2/gles2_impl.cc +++ b/mojo/gles2/gles2_impl.cc @@ -4,6 +4,8 @@ #include "mojo/public/c/gles2/gles2.h" +#include "base/lazy_instance.h" +#include "base/threading/thread_local.h" #include "gpu/command_buffer/client/gles2_interface.h" #include "mojo/gles2/gles2_context.h" @@ -11,34 +13,20 @@ using mojo::gles2::GLES2Context; namespace { -const MojoAsyncWaiter* g_async_waiter = NULL; -gpu::gles2::GLES2Interface* g_gpu_interface = NULL; +base::LazyInstance<base::ThreadLocalPointer<gpu::gles2::GLES2Interface> >::Leaky + g_gpu_interface; } // namespace extern "C" { - -void MojoGLES2Initialize(const MojoAsyncWaiter* async_waiter) { - DCHECK(!g_async_waiter); - DCHECK(async_waiter); - g_async_waiter = async_waiter; -} - -void MojoGLES2Terminate() { - DCHECK(g_async_waiter); - g_async_waiter = NULL; -} - -MojoGLES2Context MojoGLES2CreateContext( - MojoHandle handle, - MojoGLES2ContextLost lost_callback, - void* closure) { +MojoGLES2Context MojoGLES2CreateContext(MojoHandle handle, + MojoGLES2ContextLost lost_callback, + void* closure, + const MojoAsyncWaiter* async_waiter) { mojo::MessagePipeHandle mph(handle); mojo::ScopedMessagePipeHandle scoped_handle(mph); - scoped_ptr<GLES2Context> client(new GLES2Context(g_async_waiter, - scoped_handle.Pass(), - lost_callback, - closure)); + scoped_ptr<GLES2Context> client(new GLES2Context( + async_waiter, scoped_handle.Pass(), lost_callback, closure)); if (!client->Initialize()) client.reset(); return client.release(); @@ -55,12 +43,12 @@ void MojoGLES2MakeCurrent(MojoGLES2Context context) { interface = client->interface(); DCHECK(interface); } - g_gpu_interface = interface; + g_gpu_interface.Get().Set(interface); } void MojoGLES2SwapBuffers() { - assert(g_gpu_interface); - g_gpu_interface->SwapBuffers(); + DCHECK(g_gpu_interface.Get().Get()); + g_gpu_interface.Get().Get()->SwapBuffers(); } void* MojoGLES2GetGLES2Interface(MojoGLES2Context context) { @@ -71,10 +59,10 @@ void* MojoGLES2GetContextSupport(MojoGLES2Context context) { return static_cast<GLES2Context*>(context)->context_support(); } -#define VISIT_GL_CALL(Function, ReturnType, PARAMETERS, ARGUMENTS) \ - ReturnType gl##Function PARAMETERS { \ - assert(g_gpu_interface); \ - return g_gpu_interface->Function ARGUMENTS; \ +#define VISIT_GL_CALL(Function, ReturnType, PARAMETERS, ARGUMENTS) \ + ReturnType gl##Function PARAMETERS { \ + DCHECK(g_gpu_interface.Get().Get()); \ + return g_gpu_interface.Get().Get()->Function ARGUMENTS; \ } #include "mojo/public/c/gles2/gles2_call_visitor_autogen.h" #undef VISIT_GL_CALL |