Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / mojo / examples / pepper_container_app / graphics_3d_resource.cc
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 "mojo/examples/pepper_container_app/graphics_3d_resource.h"
6
7 #include "base/logging.h"
8 #include "mojo/examples/pepper_container_app/mojo_ppapi_globals.h"
9 #include "mojo/examples/pepper_container_app/plugin_instance.h"
10 #include "mojo/public/c/gles2/gles2.h"
11 #include "mojo/public/cpp/environment/environment.h"
12 #include "ppapi/c/pp_errors.h"
13
14 namespace mojo {
15 namespace examples {
16
17 namespace {
18
19 gpu::CommandBuffer::State GetErrorState() {
20   gpu::CommandBuffer::State error_state;
21   error_state.error = gpu::error::kGenericError;
22   return error_state;
23 }
24
25 }  // namespace
26
27 Graphics3DResource::Graphics3DResource(PP_Instance instance)
28     : Resource(ppapi::OBJECT_IS_IMPL, instance) {
29   ScopedMessagePipeHandle pipe = MojoPpapiGlobals::Get()->CreateGLES2Context();
30   context_ = MojoGLES2CreateContext(pipe.release().value(),
31                                     &ContextLostThunk,
32                                     this,
33                                     Environment::GetDefaultAsyncWaiter());
34 }
35
36 bool Graphics3DResource::IsBoundGraphics() const {
37   PluginInstance* plugin_instance =
38       MojoPpapiGlobals::Get()->GetInstance(pp_instance());
39   return plugin_instance && plugin_instance->IsBoundGraphics(pp_resource());
40 }
41
42 void Graphics3DResource::BindGraphics() {
43   MojoGLES2MakeCurrent(context_);
44 }
45
46 ppapi::thunk::PPB_Graphics3D_API* Graphics3DResource::AsPPB_Graphics3D_API() {
47   return this;
48 }
49
50 int32_t Graphics3DResource::GetAttribs(int32_t attrib_list[]) {
51   NOTIMPLEMENTED();
52   return PP_ERROR_FAILED;
53 }
54
55 int32_t Graphics3DResource::SetAttribs(const int32_t attrib_list[]) {
56   NOTIMPLEMENTED();
57   return PP_ERROR_FAILED;
58 }
59
60 int32_t Graphics3DResource::GetError() {
61   NOTIMPLEMENTED();
62   return PP_ERROR_FAILED;
63 }
64
65 int32_t Graphics3DResource::ResizeBuffers(int32_t width, int32_t height) {
66   NOTIMPLEMENTED();
67   return PP_ERROR_FAILED;
68 }
69
70 int32_t Graphics3DResource::SwapBuffers(
71     scoped_refptr<ppapi::TrackedCallback> callback) {
72   if (!IsBoundGraphics())
73     return PP_ERROR_FAILED;
74
75   MojoGLES2SwapBuffers();
76   return PP_OK;
77 }
78
79 int32_t Graphics3DResource::GetAttribMaxValue(int32_t attribute,
80                                               int32_t* value) {
81   NOTIMPLEMENTED();
82   return PP_ERROR_FAILED;
83 }
84
85 PP_Bool Graphics3DResource::SetGetBuffer(int32_t shm_id) {
86   NOTIMPLEMENTED();
87   return PP_FALSE;
88 }
89
90 scoped_refptr<gpu::Buffer> Graphics3DResource::CreateTransferBuffer(
91     uint32_t size,
92     int32* id) {
93   NOTIMPLEMENTED();
94   return NULL;
95 }
96
97 PP_Bool Graphics3DResource::DestroyTransferBuffer(int32_t id) {
98   NOTIMPLEMENTED();
99   return PP_FALSE;
100 }
101
102 PP_Bool Graphics3DResource::Flush(int32_t put_offset) {
103   NOTIMPLEMENTED();
104   return PP_FALSE;
105 }
106
107 gpu::CommandBuffer::State Graphics3DResource::WaitForTokenInRange(int32_t start,
108                                                                   int32_t end) {
109   NOTIMPLEMENTED();
110   return GetErrorState();
111 }
112
113 gpu::CommandBuffer::State Graphics3DResource::WaitForGetOffsetInRange(
114     int32_t start, int32_t end) {
115   NOTIMPLEMENTED();
116   return GetErrorState();
117 }
118
119 void* Graphics3DResource::MapTexSubImage2DCHROMIUM(GLenum target,
120                                                    GLint level,
121                                                    GLint xoffset,
122                                                    GLint yoffset,
123                                                    GLsizei width,
124                                                    GLsizei height,
125                                                    GLenum format,
126                                                    GLenum type,
127                                                    GLenum access) {
128   NOTIMPLEMENTED();
129   return NULL;
130 }
131
132 void Graphics3DResource::UnmapTexSubImage2DCHROMIUM(const void* mem) {
133   NOTIMPLEMENTED();
134 }
135
136 uint32_t Graphics3DResource::InsertSyncPoint() {
137   NOTIMPLEMENTED();
138   return 0;
139 }
140
141 uint32_t Graphics3DResource::InsertFutureSyncPoint() {
142   NOTIMPLEMENTED();
143   return 0;
144 }
145
146 void Graphics3DResource::RetireSyncPoint(uint32_t sync_point) {
147   NOTIMPLEMENTED();
148 }
149
150 Graphics3DResource::~Graphics3DResource() {
151   MojoGLES2DestroyContext(context_);
152 }
153
154 void Graphics3DResource::ContextLostThunk(void* closure) {
155   static_cast<Graphics3DResource*>(closure)->ContextLost();
156 }
157
158 void Graphics3DResource::ContextLost() {
159   PluginInstance* plugin_instance =
160       MojoPpapiGlobals::Get()->GetInstance(pp_instance());
161   if (plugin_instance)
162     plugin_instance->Graphics3DContextLost();
163 }
164
165 }  // namespace examples
166 }  // namespace mojo