// 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 "base/macros.h"
#include "base/memory/ref_counted.h"
#include "mojo/public/cpp/bindings/interface_impl.h"
#include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/services/public/interfaces/geometry/geometry.mojom.h"
#include "mojo/services/public/interfaces/gpu/command_buffer.mojom.h"
#include "mojo/services/public/interfaces/gpu/gpu.mojom.h"

namespace gfx {
class GLShareGroup;
}

namespace gpu {
namespace gles2 {
class MailboxManager;
}
}

namespace mojo {

class GpuImpl : public InterfaceImpl<Gpu> {
 public:
  GpuImpl(const scoped_refptr<gfx::GLShareGroup>& share_group,
          const scoped_refptr<gpu::gles2::MailboxManager> mailbox_manager);

  ~GpuImpl() override;

  void CreateOnscreenGLES2Context(
      uint64_t native_viewport_id,
      SizePtr size,
      InterfaceRequest<CommandBuffer> command_buffer_request) override;

  void CreateOffscreenGLES2Context(
      InterfaceRequest<CommandBuffer> command_buffer_request) override;

 private:
  // We need to share these across all NativeViewport instances so that contexts
  // they create can share resources with each other via mailboxes.
  scoped_refptr<gfx::GLShareGroup> share_group_;
  scoped_refptr<gpu::gles2::MailboxManager> mailbox_manager_;

  DISALLOW_COPY_AND_ASSIGN(GpuImpl);
};

}  // namespace mojo
