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

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

namespace mojo {

GpuImpl::GpuImpl(
    const scoped_refptr<gfx::GLShareGroup>& share_group,
    const scoped_refptr<gpu::gles2::MailboxManager> mailbox_manager)
    : share_group_(share_group), mailbox_manager_(mailbox_manager) {
}

GpuImpl::~GpuImpl() {
}

void GpuImpl::CreateOnscreenGLES2Context(
    uint64_t native_viewport_id,
    SizePtr size,
    InterfaceRequest<CommandBuffer> command_buffer_request) {
  gfx::AcceleratedWidget widget = bit_cast<gfx::AcceleratedWidget>(
      static_cast<uintptr_t>(native_viewport_id));
  BindToRequest(new CommandBufferImpl(widget,
                                      size.To<gfx::Size>(),
                                      share_group_.get(),
                                      mailbox_manager_.get()),
                &command_buffer_request);
}

void GpuImpl::CreateOffscreenGLES2Context(
    InterfaceRequest<CommandBuffer> command_buffer_request) {
  BindToRequest(
      new CommandBufferImpl(share_group_.get(), mailbox_manager_.get()),
      &command_buffer_request);
}

}  // namespace mojo
