| Index: mojo/gles2/gles2_support_impl.cc
|
| diff --git a/mojo/gles2/gles2_support_impl.cc b/mojo/gles2/gles2_support_impl.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..99e8bb44dadebc0759dd37261f361e9465ec16cd
|
| --- /dev/null
|
| +++ b/mojo/gles2/gles2_support_impl.cc
|
| @@ -0,0 +1,106 @@
|
| +// 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/gles2/gles2_support_impl.h"
|
| +
|
| +#include "base/lazy_instance.h"
|
| +#include "gpu/command_buffer/client/gles2_interface.h"
|
| +#include "mojo/gles2/gles2_context.h"
|
| +#include "mojo/public/gles2/gles2_interface.h"
|
| +#include "mojo/public/gles2/gles2_private.h"
|
| +
|
| +namespace mojo {
|
| +namespace gles2 {
|
| +
|
| +namespace {
|
| +
|
| +class GLES2ImplForCommandBuffer : public GLES2Interface {
|
| + public:
|
| + GLES2ImplForCommandBuffer() : gpu_interface_(NULL) {}
|
| +
|
| + void set_gpu_interface(gpu::gles2::GLES2Interface* gpu_interface) {
|
| + gpu_interface_ = gpu_interface;
|
| + }
|
| + gpu::gles2::GLES2Interface* gpu_interface() const { return gpu_interface_; }
|
| +
|
| +#define VISIT_GL_CALL(Function, ReturnType, PARAMETERS, ARGUMENTS) \
|
| + virtual ReturnType Function PARAMETERS OVERRIDE { \
|
| + return gpu_interface_->Function ARGUMENTS; \
|
| + }
|
| +#include "mojo/public/c/gles2/gles2_call_visitor_autogen.h"
|
| +#undef VISIT_GL_CALL
|
| +
|
| + private:
|
| + gpu::gles2::GLES2Interface* gpu_interface_;
|
| + DISALLOW_COPY_AND_ASSIGN(GLES2ImplForCommandBuffer);
|
| +};
|
| +
|
| +base::LazyInstance<GLES2ImplForCommandBuffer> g_gles2_interface =
|
| + LAZY_INSTANCE_INITIALIZER;
|
| +
|
| +} // anonymous namespace
|
| +
|
| +GLES2SupportImpl::GLES2SupportImpl() : async_waiter_(NULL) {}
|
| +GLES2SupportImpl::~GLES2SupportImpl() {}
|
| +
|
| +// static
|
| +void GLES2SupportImpl::Init() { GLES2Support::Init(new GLES2SupportImpl()); }
|
| +
|
| +void GLES2SupportImpl::Initialize(const MojoAsyncWaiter* async_waiter) {
|
| + DCHECK(!async_waiter_);
|
| + DCHECK(async_waiter);
|
| + async_waiter_ = async_waiter;
|
| +}
|
| +
|
| +void GLES2SupportImpl::Terminate() {
|
| + DCHECK(async_waiter_);
|
| + async_waiter_ = NULL;
|
| +}
|
| +
|
| +MojoGLES2Context GLES2SupportImpl::CreateContext(
|
| + MessagePipeHandle handle,
|
| + MojoGLES2ContextLost lost_callback,
|
| + void* closure) {
|
| + ScopedMessagePipeHandle scoped_handle(handle);
|
| + scoped_ptr<GLES2Context> client(new GLES2Context(async_waiter_,
|
| + scoped_handle.Pass(),
|
| + lost_callback,
|
| + closure));
|
| + if (!client->Initialize())
|
| + client.reset();
|
| + return client.release();
|
| +}
|
| +
|
| +void GLES2SupportImpl::DestroyContext(MojoGLES2Context context) {
|
| + delete static_cast<GLES2Context*>(context);
|
| +}
|
| +
|
| +void GLES2SupportImpl::MakeCurrent(MojoGLES2Context context) {
|
| + gpu::gles2::GLES2Interface* interface = NULL;
|
| + if (context) {
|
| + GLES2Context* client = static_cast<GLES2Context*>(context);
|
| + interface = client->interface();
|
| + DCHECK(interface);
|
| + }
|
| + g_gles2_interface.Get().set_gpu_interface(interface);
|
| +}
|
| +
|
| +void GLES2SupportImpl::SwapBuffers() {
|
| + g_gles2_interface.Get().gpu_interface()->SwapBuffers();
|
| +}
|
| +
|
| +void* GLES2SupportImpl::GetGLES2Interface(MojoGLES2Context context) {
|
| + return static_cast<GLES2Context*>(context)->interface();
|
| +}
|
| +
|
| +void* GLES2SupportImpl::GetContextSupport(MojoGLES2Context context) {
|
| + return static_cast<GLES2Context*>(context)->context_support();
|
| +}
|
| +
|
| +GLES2Interface* GLES2SupportImpl::GetGLES2InterfaceForCurrentContext() {
|
| + return &g_gles2_interface.Get();
|
| +}
|
| +
|
| +} // namespace gles2
|
| +} // namespace mojo
|
|
|