summaryrefslogtreecommitdiffstats
path: root/mojo/services/surfaces/context_provider_mojo.cc
diff options
context:
space:
mode:
Diffstat (limited to 'mojo/services/surfaces/context_provider_mojo.cc')
-rw-r--r--mojo/services/surfaces/context_provider_mojo.cc80
1 files changed, 80 insertions, 0 deletions
diff --git a/mojo/services/surfaces/context_provider_mojo.cc b/mojo/services/surfaces/context_provider_mojo.cc
new file mode 100644
index 0000000..2874794
--- /dev/null
+++ b/mojo/services/surfaces/context_provider_mojo.cc
@@ -0,0 +1,80 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "mojo/services/surfaces/context_provider_mojo.h"
+
+#include "base/logging.h"
+#include "mojo/public/cpp/environment/environment.h"
+
+namespace mojo {
+
+ContextProviderMojo::ContextProviderMojo(
+ ScopedMessagePipeHandle command_buffer_handle)
+ : command_buffer_handle_(command_buffer_handle.Pass()),
+ context_(nullptr),
+ context_lost_(false) {
+}
+
+bool ContextProviderMojo::BindToCurrentThread() {
+ DCHECK(command_buffer_handle_.is_valid());
+ context_ = MojoGLES2CreateContext(command_buffer_handle_.release().value(),
+ &ContextLostThunk, this,
+ Environment::GetDefaultAsyncWaiter());
+ DCHECK(context_);
+ return !!context_;
+}
+
+gpu::gles2::GLES2Interface* ContextProviderMojo::ContextGL() {
+ if (!context_)
+ return nullptr;
+ return static_cast<gpu::gles2::GLES2Interface*>(
+ MojoGLES2GetGLES2Interface(context_));
+}
+
+gpu::ContextSupport* ContextProviderMojo::ContextSupport() {
+ if (!context_)
+ return nullptr;
+ return static_cast<gpu::ContextSupport*>(
+ MojoGLES2GetContextSupport(context_));
+}
+
+class GrContext* ContextProviderMojo::GrContext() {
+ return NULL;
+}
+
+cc::ContextProvider::Capabilities ContextProviderMojo::ContextCapabilities() {
+ return capabilities_;
+}
+
+void ContextProviderMojo::SetupLock() {
+}
+
+base::Lock* ContextProviderMojo::GetLock() {
+ return &context_lock_;
+}
+
+bool ContextProviderMojo::IsContextLost() {
+ return context_lost_;
+}
+bool ContextProviderMojo::DestroyedOnMainThread() {
+ return !context_;
+}
+
+void ContextProviderMojo::SetLostContextCallback(
+ const LostContextCallback& lost_context_callback) {
+ lost_context_callback_ = lost_context_callback;
+}
+
+ContextProviderMojo::~ContextProviderMojo() {
+ if (context_)
+ MojoGLES2DestroyContext(context_);
+}
+
+void ContextProviderMojo::ContextLost() {
+ context_lost_ = true;
+ if (!lost_context_callback_.is_null())
+ lost_context_callback_.Run();
+}
+
+} // namespace mojo