1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "mojo/cc/context_provider_mojo.h" 6 7 #include "base/logging.h" 8 #include "mojo/public/cpp/environment/environment.h" 9 10 namespace mojo { 11 12 ContextProviderMojo::ContextProviderMojo( 13 ScopedMessagePipeHandle command_buffer_handle) 14 : command_buffer_handle_(command_buffer_handle.Pass()), 15 context_lost_(false) { 16 } 17 18 bool ContextProviderMojo::BindToCurrentThread() { 19 DCHECK(command_buffer_handle_.is_valid()); 20 context_ = MojoGLES2CreateContext(command_buffer_handle_.release().value(), 21 &ContextLostThunk, 22 this, 23 Environment::GetDefaultAsyncWaiter()); 24 return !!context_; 25 } 26 27 gpu::gles2::GLES2Interface* ContextProviderMojo::ContextGL() { 28 if (!context_) 29 return NULL; 30 return static_cast<gpu::gles2::GLES2Interface*>( 31 MojoGLES2GetGLES2Interface(context_)); 32 } 33 34 gpu::ContextSupport* ContextProviderMojo::ContextSupport() { 35 if (!context_) 36 return NULL; 37 return static_cast<gpu::ContextSupport*>( 38 MojoGLES2GetContextSupport(context_)); 39 } 40 41 class GrContext* ContextProviderMojo::GrContext() { return NULL; } 42 43 cc::ContextProvider::Capabilities ContextProviderMojo::ContextCapabilities() { 44 return capabilities_; 45 } 46 47 bool ContextProviderMojo::IsContextLost() { 48 return context_lost_; 49 } 50 bool ContextProviderMojo::DestroyedOnMainThread() { return !context_; } 51 52 ContextProviderMojo::~ContextProviderMojo() { 53 if (context_) 54 MojoGLES2DestroyContext(context_); 55 } 56 57 void ContextProviderMojo::ContextLost() { 58 context_lost_ = true; 59 } 60 61 } // namespace mojo 62