gpu_impl.h revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/macros.h"
6#include "base/memory/ref_counted.h"
7#include "mojo/public/cpp/bindings/interface_impl.h"
8#include "mojo/public/cpp/bindings/interface_request.h"
9#include "mojo/services/gles2/command_buffer.mojom.h"
10#include "mojo/services/public/interfaces/geometry/geometry.mojom.h"
11#include "mojo/services/public/interfaces/gpu/gpu.mojom.h"
12
13namespace gfx {
14class GLShareGroup;
15}
16
17namespace gpu {
18namespace gles2 {
19class MailboxManager;
20}
21}
22
23namespace mojo {
24
25class GpuImpl : public InterfaceImpl<Gpu> {
26 public:
27  GpuImpl(const scoped_refptr<gfx::GLShareGroup>& share_group,
28          const scoped_refptr<gpu::gles2::MailboxManager> mailbox_manager);
29
30  virtual ~GpuImpl();
31
32  virtual void CreateOnscreenGLES2Context(
33      uint64_t native_viewport_id,
34      SizePtr size,
35      InterfaceRequest<CommandBuffer> command_buffer_request) OVERRIDE;
36
37  virtual void CreateOffscreenGLES2Context(
38      InterfaceRequest<CommandBuffer> command_buffer_request) OVERRIDE;
39
40 private:
41  // We need to share these across all NativeViewport instances so that contexts
42  // they create can share resources with each other via mailboxes.
43  scoped_refptr<gfx::GLShareGroup> share_group_;
44  scoped_refptr<gpu::gles2::MailboxManager> mailbox_manager_;
45
46  DISALLOW_COPY_AND_ASSIGN(GpuImpl);
47};
48
49}  // namespace mojo
50