// 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 "services/gles2/gpu_impl.h"

#include "gpu/command_buffer/service/mailbox_manager.h"
#include "gpu/command_buffer/service/mailbox_manager_impl.h"
#include "gpu/command_buffer/service/sync_point_manager.h"
#include "mojo/converters/geometry/geometry_type_converters.h"
#include "services/gles2/command_buffer_driver.h"
#include "services/gles2/command_buffer_impl.h"
#include "ui/gl/gl_share_group.h"
#include "ui/gl/gl_surface.h"

namespace gles2 {

GpuImpl::GpuImpl(mojo::InterfaceRequest<Gpu> request,
                 const scoped_refptr<GpuState>& state)
    : binding_(this, request.Pass()), state_(state) {
}

GpuImpl::~GpuImpl() {
}

void GpuImpl::CreateOffscreenGLES2Context(
    mojo::InterfaceRequest<mojo::CommandBuffer> request) {
  new CommandBufferImpl(request.Pass(), mojo::ViewportParameterListenerPtr(),
                        state_->control_task_runner(),
                        state_->sync_point_manager(),
                        make_scoped_ptr(new CommandBufferDriver(
                            state_->share_group(), state_->mailbox_manager(),
                            state_->sync_point_manager(),
                            gfx::SurfaceConfiguration())));
}

}  // namespace gles2
