| Index: mojo/services/gles2/command_buffer_impl.cc
|
| diff --git a/mojo/services/gles2/command_buffer_impl.cc b/mojo/services/gles2/command_buffer_impl.cc
|
| index d3b9137f40fb48a242c1fce0fdb59ff9bc7ee042..1c25887260f01621fe2a24426ac80171dea30a75 100644
|
| --- a/mojo/services/gles2/command_buffer_impl.cc
|
| +++ b/mojo/services/gles2/command_buffer_impl.cc
|
| @@ -45,9 +45,25 @@ class MemoryTrackerStub : public gpu::gles2::MemoryTracker {
|
|
|
| } // anonymous namespace
|
|
|
| -CommandBufferImpl::CommandBufferImpl(gfx::AcceleratedWidget widget,
|
| - const gfx::Size& size)
|
| - : widget_(widget), size_(size) {}
|
| +CommandBufferImpl::CommandBufferImpl(
|
| + gfx::GLShareGroup* share_group,
|
| + gpu::gles2::MailboxManager* mailbox_manager)
|
| + : widget_(gfx::kNullAcceleratedWidget),
|
| + size_(1, 1),
|
| + share_group_(share_group),
|
| + mailbox_manager_(mailbox_manager) {
|
| +}
|
| +
|
| +CommandBufferImpl::CommandBufferImpl(
|
| + gfx::AcceleratedWidget widget,
|
| + const gfx::Size& size,
|
| + gfx::GLShareGroup* share_group,
|
| + gpu::gles2::MailboxManager* mailbox_manager)
|
| + : widget_(widget),
|
| + size_(size),
|
| + share_group_(share_group),
|
| + mailbox_manager_(mailbox_manager) {
|
| +}
|
|
|
| CommandBufferImpl::~CommandBufferImpl() {
|
| client()->DidDestroy();
|
| @@ -66,24 +82,26 @@ void CommandBufferImpl::Initialize(
|
|
|
| bool CommandBufferImpl::DoInitialize(
|
| mojo::ScopedSharedBufferHandle shared_state) {
|
| - // TODO(piman): offscreen surface.
|
| - surface_ = gfx::GLSurface::CreateViewGLSurface(widget_);
|
| + if (widget_ == gfx::kNullAcceleratedWidget)
|
| + surface_ = gfx::GLSurface::CreateOffscreenGLSurface(size_);
|
| + else
|
| + surface_ = gfx::GLSurface::CreateViewGLSurface(widget_);
|
| if (!surface_.get())
|
| return false;
|
|
|
| - // TODO(piman): context sharing, virtual contexts, gpu preference.
|
| - scoped_refptr<gfx::GLContext> context = gfx::GLContext::CreateGLContext(
|
| - NULL, surface_.get(), gfx::PreferIntegratedGpu);
|
| - if (!context.get())
|
| + // TODO(piman): virtual contexts, gpu preference.
|
| + context_ = gfx::GLContext::CreateGLContext(
|
| + share_group_, surface_.get(), gfx::PreferIntegratedGpu);
|
| + if (!context_.get())
|
| return false;
|
|
|
| - if (!context->MakeCurrent(surface_.get()))
|
| + if (!context_->MakeCurrent(surface_.get()))
|
| return false;
|
|
|
| // TODO(piman): ShaderTranslatorCache is currently per-ContextGroup but
|
| // only needs to be per-thread.
|
| scoped_refptr<gpu::gles2::ContextGroup> context_group =
|
| - new gpu::gles2::ContextGroup(NULL,
|
| + new gpu::gles2::ContextGroup(mailbox_manager_,
|
| new MemoryTrackerStub,
|
| new gpu::gles2::ShaderTranslatorCache,
|
| NULL,
|
| @@ -106,7 +124,7 @@ bool CommandBufferImpl::DoInitialize(
|
| // TODO(piman): attributes.
|
| std::vector<int32> attrib_vector;
|
| if (!decoder_->Initialize(surface_,
|
| - context,
|
| + context_,
|
| false /* offscreen */,
|
| size_,
|
| disallowed_features,
|
| @@ -137,6 +155,11 @@ void CommandBufferImpl::SetGetBuffer(int32_t buffer) {
|
| }
|
|
|
| void CommandBufferImpl::Flush(int32_t put_offset) {
|
| + if (!context_->MakeCurrent(surface_.get())) {
|
| + DLOG(WARNING) << "Context lost";
|
| + client()->LostContext(gpu::error::kUnknown);
|
| + return;
|
| + }
|
| command_buffer_->Flush(put_offset);
|
| }
|
|
|
|
|