1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file.
4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#ifndef MOJO_EXAMPLES_PEPPER_CONTAINER_APP_GRAPHICS_3D_RESOURCE_H_
6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#define MOJO_EXAMPLES_PEPPER_CONTAINER_APP_GRAPHICS_3D_RESOURCE_H_
7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/compiler_specific.h"
9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/macros.h"
104ad1aa43a48567659193a298fad74f55e00b3dd9Ben Murdoch#include "mojo/public/c/gles2/gles2_types.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/shared_impl/resource.h"
12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/shared_impl/tracked_callback.h"
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ppapi/thunk/ppb_graphics_3d_api.h"
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
15effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace mojo {
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace examples {
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass Graphics3DResource : public ppapi::Resource,
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           public ppapi::thunk::PPB_Graphics3D_API {
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  explicit Graphics3DResource(PP_Instance instance);
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  bool IsBoundGraphics() const;
24effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void BindGraphics();
25effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // ppapi::Resource overrides.
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual ppapi::thunk::PPB_Graphics3D_API* AsPPB_Graphics3D_API() OVERRIDE;
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // ppapi::thunk::PPB_Graphics3D_API implementation.
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual int32_t GetAttribs(int32_t attrib_list[]) OVERRIDE;
31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual int32_t SetAttribs(const int32_t attrib_list[]) OVERRIDE;
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual int32_t GetError() OVERRIDE;
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual int32_t ResizeBuffers(int32_t width, int32_t height) OVERRIDE;
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual int32_t SwapBuffers(
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      scoped_refptr<ppapi::TrackedCallback> callback) OVERRIDE;
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual int32_t GetAttribMaxValue(int32_t attribute, int32_t* value) OVERRIDE;
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual PP_Bool SetGetBuffer(int32_t shm_id) OVERRIDE;
38e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  virtual scoped_refptr<gpu::Buffer> CreateTransferBuffer(uint32_t size,
39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch                                                          int32* id) OVERRIDE;
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual PP_Bool DestroyTransferBuffer(int32_t id) OVERRIDE;
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual PP_Bool Flush(int32_t put_offset) OVERRIDE;
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual gpu::CommandBuffer::State WaitForTokenInRange(int32_t start,
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                                        int32_t end) OVERRIDE;
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual gpu::CommandBuffer::State WaitForGetOffsetInRange(
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      int32_t start, int32_t end) OVERRIDE;
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void* MapTexSubImage2DCHROMIUM(GLenum target,
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                         GLint level,
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                         GLint xoffset,
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                         GLint yoffset,
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                         GLsizei width,
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                         GLsizei height,
52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                         GLenum format,
53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                         GLenum type,
54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                         GLenum access) OVERRIDE;
55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void UnmapTexSubImage2DCHROMIUM(const void* mem) OVERRIDE;
56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual uint32_t InsertSyncPoint() OVERRIDE;
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual uint32_t InsertFutureSyncPoint() OVERRIDE;
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void RetireSyncPoint(uint32_t sync_point) OVERRIDE;
59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private:
61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual ~Graphics3DResource();
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  static void ContextLostThunk(void* closure);
64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void ContextLost();
65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  MojoGLES2Context context_;
67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DISALLOW_COPY_AND_ASSIGN(Graphics3DResource);
68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}  // namespace examples
71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}  // namespace mojo
72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif  // MOJO_EXAMPLES_PEPPER_CONTAINER_APP_GRAPHICS_3D_RESOURCE_H_
74