diff options
Diffstat (limited to 'chromium/mojo/gles2/gles2_context.cc')
-rw-r--r-- | chromium/mojo/gles2/gles2_context.cc | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/chromium/mojo/gles2/gles2_context.cc b/chromium/mojo/gles2/gles2_context.cc new file mode 100644 index 00000000000..701b0fed13d --- /dev/null +++ b/chromium/mojo/gles2/gles2_context.cc @@ -0,0 +1,73 @@ +// 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_context.h" + +#include "gpu/command_buffer/client/gles2_cmd_helper.h" +#include "gpu/command_buffer/client/gles2_implementation.h" +#include "gpu/command_buffer/client/transfer_buffer.h" +#include "mojo/public/c/gles2/gles2.h" +#include "mojo/public/cpp/system/core.h" + +namespace mojo { +namespace gles2 { + +namespace { +const size_t kDefaultCommandBufferSize = 1024 * 1024; +const size_t kDefaultStartTransferBufferSize = 1 * 1024 * 1024; +const size_t kDefaultMinTransferBufferSize = 1 * 256 * 1024; +const size_t kDefaultMaxTransferBufferSize = 16 * 1024 * 1024; +} + +GLES2Context::GLES2Context(const MojoAsyncWaiter* async_waiter, + ScopedMessagePipeHandle command_buffer_handle, + MojoGLES2ContextLost lost_callback, + MojoGLES2DrawAnimationFrame animation_callback, + void* closure) + : command_buffer_(this, async_waiter, command_buffer_handle.Pass()), + lost_callback_(lost_callback), + animation_callback_(animation_callback), + closure_(closure) {} + +GLES2Context::~GLES2Context() {} + +bool GLES2Context::Initialize() { + if (!command_buffer_.Initialize()) + return false; + gles2_helper_.reset(new gpu::gles2::GLES2CmdHelper(&command_buffer_)); + if (!gles2_helper_->Initialize(kDefaultCommandBufferSize)) + return false; + gles2_helper_->SetAutomaticFlushes(false); + transfer_buffer_.reset(new gpu::TransferBuffer(gles2_helper_.get())); + bool bind_generates_resource = true; + // TODO(piman): Some contexts (such as compositor) want this to be true, so + // this needs to be a public parameter. + bool lose_context_when_out_of_memory = false; + implementation_.reset( + new gpu::gles2::GLES2Implementation(gles2_helper_.get(), + NULL, + transfer_buffer_.get(), + bind_generates_resource, + lose_context_when_out_of_memory, + &command_buffer_)); + return implementation_->Initialize(kDefaultStartTransferBufferSize, + kDefaultMinTransferBufferSize, + kDefaultMaxTransferBufferSize, + gpu::gles2::GLES2Implementation::kNoLimit); +} + +void GLES2Context::RequestAnimationFrames() { + command_buffer_.RequestAnimationFrames(); +} + +void GLES2Context::CancelAnimationFrames() { + command_buffer_.CancelAnimationFrames(); +} + +void GLES2Context::ContextLost() { lost_callback_(closure_); } + +void GLES2Context::DrawAnimationFrame() { animation_callback_(closure_); } + +} // namespace gles2 +} // namespace mojo |