ppb_opengles2_shared.cc revision f2477e01787aa58f445919b809d89e252beef54f
1// Copyright (c) 2012 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// This file is auto-generated from
6// gpu/command_buffer/build_gles2_cmd_buffer.py
7// DO NOT EDIT!
8
9#include "ppapi/shared_impl/ppb_opengles2_shared.h"
10
11#include "base/logging.h"
12#include "gpu/command_buffer/client/gles2_implementation.h"
13#include "ppapi/shared_impl/ppb_graphics_3d_shared.h"
14#include "ppapi/thunk/enter.h"
15
16namespace ppapi {
17
18namespace {
19
20typedef thunk::EnterResource<thunk::PPB_Graphics3D_API> Enter3D;
21
22gpu::gles2::GLES2Implementation* ToGles2Impl(Enter3D* enter) {
23  DCHECK(enter);
24  DCHECK(enter->succeeded());
25  return static_cast<PPB_Graphics3D_Shared*>(enter->object())->gles2_impl();
26}
27
28void ActiveTexture(PP_Resource context_id, GLenum texture) {
29  Enter3D enter(context_id, true);
30  if (enter.succeeded()) {
31    ToGles2Impl(&enter)->ActiveTexture(texture);
32  }
33}
34
35void AttachShader(PP_Resource context_id, GLuint program, GLuint shader) {
36  Enter3D enter(context_id, true);
37  if (enter.succeeded()) {
38    ToGles2Impl(&enter)->AttachShader(program, shader);
39  }
40}
41
42void BindAttribLocation(
43    PP_Resource context_id, GLuint program, GLuint index, const char* name) {
44  Enter3D enter(context_id, true);
45  if (enter.succeeded()) {
46    ToGles2Impl(&enter)->BindAttribLocation(program, index, name);
47  }
48}
49
50void BindBuffer(PP_Resource context_id, GLenum target, GLuint buffer) {
51  Enter3D enter(context_id, true);
52  if (enter.succeeded()) {
53    ToGles2Impl(&enter)->BindBuffer(target, buffer);
54  }
55}
56
57void BindFramebuffer(
58    PP_Resource context_id, GLenum target, GLuint framebuffer) {
59  Enter3D enter(context_id, true);
60  if (enter.succeeded()) {
61    ToGles2Impl(&enter)->BindFramebuffer(target, framebuffer);
62  }
63}
64
65void BindRenderbuffer(
66    PP_Resource context_id, GLenum target, GLuint renderbuffer) {
67  Enter3D enter(context_id, true);
68  if (enter.succeeded()) {
69    ToGles2Impl(&enter)->BindRenderbuffer(target, renderbuffer);
70  }
71}
72
73void BindTexture(PP_Resource context_id, GLenum target, GLuint texture) {
74  Enter3D enter(context_id, true);
75  if (enter.succeeded()) {
76    ToGles2Impl(&enter)->BindTexture(target, texture);
77  }
78}
79
80void BlendColor(
81    PP_Resource context_id, GLclampf red, GLclampf green, GLclampf blue,
82    GLclampf alpha) {
83  Enter3D enter(context_id, true);
84  if (enter.succeeded()) {
85    ToGles2Impl(&enter)->BlendColor(red, green, blue, alpha);
86  }
87}
88
89void BlendEquation(PP_Resource context_id, GLenum mode) {
90  Enter3D enter(context_id, true);
91  if (enter.succeeded()) {
92    ToGles2Impl(&enter)->BlendEquation(mode);
93  }
94}
95
96void BlendEquationSeparate(
97    PP_Resource context_id, GLenum modeRGB, GLenum modeAlpha) {
98  Enter3D enter(context_id, true);
99  if (enter.succeeded()) {
100    ToGles2Impl(&enter)->BlendEquationSeparate(modeRGB, modeAlpha);
101  }
102}
103
104void BlendFunc(PP_Resource context_id, GLenum sfactor, GLenum dfactor) {
105  Enter3D enter(context_id, true);
106  if (enter.succeeded()) {
107    ToGles2Impl(&enter)->BlendFunc(sfactor, dfactor);
108  }
109}
110
111void BlendFuncSeparate(
112    PP_Resource context_id, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha,
113    GLenum dstAlpha) {
114  Enter3D enter(context_id, true);
115  if (enter.succeeded()) {
116    ToGles2Impl(&enter)->BlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
117  }
118}
119
120void BufferData(
121    PP_Resource context_id, GLenum target, GLsizeiptr size, const void* data,
122    GLenum usage) {
123  Enter3D enter(context_id, true);
124  if (enter.succeeded()) {
125    ToGles2Impl(&enter)->BufferData(target, size, data, usage);
126  }
127}
128
129void BufferSubData(
130    PP_Resource context_id, GLenum target, GLintptr offset, GLsizeiptr size,
131    const void* data) {
132  Enter3D enter(context_id, true);
133  if (enter.succeeded()) {
134    ToGles2Impl(&enter)->BufferSubData(target, offset, size, data);
135  }
136}
137
138GLenum CheckFramebufferStatus(PP_Resource context_id, GLenum target) {
139  Enter3D enter(context_id, true);
140  if (enter.succeeded()) {
141    return ToGles2Impl(&enter)->CheckFramebufferStatus(target);
142  } else {
143    return 0;
144  }
145}
146
147void Clear(PP_Resource context_id, GLbitfield mask) {
148  Enter3D enter(context_id, true);
149  if (enter.succeeded()) {
150    ToGles2Impl(&enter)->Clear(mask);
151  }
152}
153
154void ClearColor(
155    PP_Resource context_id, GLclampf red, GLclampf green, GLclampf blue,
156    GLclampf alpha) {
157  Enter3D enter(context_id, true);
158  if (enter.succeeded()) {
159    ToGles2Impl(&enter)->ClearColor(red, green, blue, alpha);
160  }
161}
162
163void ClearDepthf(PP_Resource context_id, GLclampf depth) {
164  Enter3D enter(context_id, true);
165  if (enter.succeeded()) {
166    ToGles2Impl(&enter)->ClearDepthf(depth);
167  }
168}
169
170void ClearStencil(PP_Resource context_id, GLint s) {
171  Enter3D enter(context_id, true);
172  if (enter.succeeded()) {
173    ToGles2Impl(&enter)->ClearStencil(s);
174  }
175}
176
177void ColorMask(
178    PP_Resource context_id, GLboolean red, GLboolean green, GLboolean blue,
179    GLboolean alpha) {
180  Enter3D enter(context_id, true);
181  if (enter.succeeded()) {
182    ToGles2Impl(&enter)->ColorMask(red, green, blue, alpha);
183  }
184}
185
186void CompileShader(PP_Resource context_id, GLuint shader) {
187  Enter3D enter(context_id, true);
188  if (enter.succeeded()) {
189    ToGles2Impl(&enter)->CompileShader(shader);
190  }
191}
192
193void CompressedTexImage2D(
194    PP_Resource context_id, GLenum target, GLint level, GLenum internalformat,
195    GLsizei width, GLsizei height, GLint border, GLsizei imageSize,
196    const void* data) {
197  Enter3D enter(context_id, true);
198  if (enter.succeeded()) {
199    ToGles2Impl(
200        &enter)->CompressedTexImage2D(
201            target, level, internalformat, width, height, border, imageSize,
202            data);
203  }
204}
205
206void CompressedTexSubImage2D(
207    PP_Resource context_id, GLenum target, GLint level, GLint xoffset,
208    GLint yoffset, GLsizei width, GLsizei height, GLenum format,
209    GLsizei imageSize, const void* data) {
210  Enter3D enter(context_id, true);
211  if (enter.succeeded()) {
212    ToGles2Impl(
213        &enter)->CompressedTexSubImage2D(
214            target, level, xoffset, yoffset, width, height, format, imageSize,
215            data);
216  }
217}
218
219void CopyTexImage2D(
220    PP_Resource context_id, GLenum target, GLint level, GLenum internalformat,
221    GLint x, GLint y, GLsizei width, GLsizei height, GLint border) {
222  Enter3D enter(context_id, true);
223  if (enter.succeeded()) {
224    ToGles2Impl(
225        &enter)->CopyTexImage2D(
226            target, level, internalformat, x, y, width, height, border);
227  }
228}
229
230void CopyTexSubImage2D(
231    PP_Resource context_id, GLenum target, GLint level, GLint xoffset,
232    GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) {
233  Enter3D enter(context_id, true);
234  if (enter.succeeded()) {
235    ToGles2Impl(
236        &enter)->CopyTexSubImage2D(
237            target, level, xoffset, yoffset, x, y, width, height);
238  }
239}
240
241GLuint CreateProgram(PP_Resource context_id) {
242  Enter3D enter(context_id, true);
243  if (enter.succeeded()) {
244    return ToGles2Impl(&enter)->CreateProgram();
245  } else {
246    return 0;
247  }
248}
249
250GLuint CreateShader(PP_Resource context_id, GLenum type) {
251  Enter3D enter(context_id, true);
252  if (enter.succeeded()) {
253    return ToGles2Impl(&enter)->CreateShader(type);
254  } else {
255    return 0;
256  }
257}
258
259void CullFace(PP_Resource context_id, GLenum mode) {
260  Enter3D enter(context_id, true);
261  if (enter.succeeded()) {
262    ToGles2Impl(&enter)->CullFace(mode);
263  }
264}
265
266void DeleteBuffers(PP_Resource context_id, GLsizei n, const GLuint* buffers) {
267  Enter3D enter(context_id, true);
268  if (enter.succeeded()) {
269    ToGles2Impl(&enter)->DeleteBuffers(n, buffers);
270  }
271}
272
273void DeleteFramebuffers(
274    PP_Resource context_id, GLsizei n, const GLuint* framebuffers) {
275  Enter3D enter(context_id, true);
276  if (enter.succeeded()) {
277    ToGles2Impl(&enter)->DeleteFramebuffers(n, framebuffers);
278  }
279}
280
281void DeleteProgram(PP_Resource context_id, GLuint program) {
282  Enter3D enter(context_id, true);
283  if (enter.succeeded()) {
284    ToGles2Impl(&enter)->DeleteProgram(program);
285  }
286}
287
288void DeleteRenderbuffers(
289    PP_Resource context_id, GLsizei n, const GLuint* renderbuffers) {
290  Enter3D enter(context_id, true);
291  if (enter.succeeded()) {
292    ToGles2Impl(&enter)->DeleteRenderbuffers(n, renderbuffers);
293  }
294}
295
296void DeleteShader(PP_Resource context_id, GLuint shader) {
297  Enter3D enter(context_id, true);
298  if (enter.succeeded()) {
299    ToGles2Impl(&enter)->DeleteShader(shader);
300  }
301}
302
303void DeleteTextures(
304    PP_Resource context_id, GLsizei n, const GLuint* textures) {
305  Enter3D enter(context_id, true);
306  if (enter.succeeded()) {
307    ToGles2Impl(&enter)->DeleteTextures(n, textures);
308  }
309}
310
311void DepthFunc(PP_Resource context_id, GLenum func) {
312  Enter3D enter(context_id, true);
313  if (enter.succeeded()) {
314    ToGles2Impl(&enter)->DepthFunc(func);
315  }
316}
317
318void DepthMask(PP_Resource context_id, GLboolean flag) {
319  Enter3D enter(context_id, true);
320  if (enter.succeeded()) {
321    ToGles2Impl(&enter)->DepthMask(flag);
322  }
323}
324
325void DepthRangef(PP_Resource context_id, GLclampf zNear, GLclampf zFar) {
326  Enter3D enter(context_id, true);
327  if (enter.succeeded()) {
328    ToGles2Impl(&enter)->DepthRangef(zNear, zFar);
329  }
330}
331
332void DetachShader(PP_Resource context_id, GLuint program, GLuint shader) {
333  Enter3D enter(context_id, true);
334  if (enter.succeeded()) {
335    ToGles2Impl(&enter)->DetachShader(program, shader);
336  }
337}
338
339void Disable(PP_Resource context_id, GLenum cap) {
340  Enter3D enter(context_id, true);
341  if (enter.succeeded()) {
342    ToGles2Impl(&enter)->Disable(cap);
343  }
344}
345
346void DisableVertexAttribArray(PP_Resource context_id, GLuint index) {
347  Enter3D enter(context_id, true);
348  if (enter.succeeded()) {
349    ToGles2Impl(&enter)->DisableVertexAttribArray(index);
350  }
351}
352
353void DrawArrays(
354    PP_Resource context_id, GLenum mode, GLint first, GLsizei count) {
355  Enter3D enter(context_id, true);
356  if (enter.succeeded()) {
357    ToGles2Impl(&enter)->DrawArrays(mode, first, count);
358  }
359}
360
361void DrawElements(
362    PP_Resource context_id, GLenum mode, GLsizei count, GLenum type,
363    const void* indices) {
364  Enter3D enter(context_id, true);
365  if (enter.succeeded()) {
366    ToGles2Impl(&enter)->DrawElements(mode, count, type, indices);
367  }
368}
369
370void Enable(PP_Resource context_id, GLenum cap) {
371  Enter3D enter(context_id, true);
372  if (enter.succeeded()) {
373    ToGles2Impl(&enter)->Enable(cap);
374  }
375}
376
377void EnableVertexAttribArray(PP_Resource context_id, GLuint index) {
378  Enter3D enter(context_id, true);
379  if (enter.succeeded()) {
380    ToGles2Impl(&enter)->EnableVertexAttribArray(index);
381  }
382}
383
384void Finish(PP_Resource context_id) {
385  Enter3D enter(context_id, true);
386  if (enter.succeeded()) {
387    ToGles2Impl(&enter)->Finish();
388  }
389}
390
391void Flush(PP_Resource context_id) {
392  Enter3D enter(context_id, true);
393  if (enter.succeeded()) {
394    ToGles2Impl(&enter)->Flush();
395  }
396}
397
398void FramebufferRenderbuffer(
399    PP_Resource context_id, GLenum target, GLenum attachment,
400    GLenum renderbuffertarget, GLuint renderbuffer) {
401  Enter3D enter(context_id, true);
402  if (enter.succeeded()) {
403    ToGles2Impl(
404        &enter)->FramebufferRenderbuffer(
405            target, attachment, renderbuffertarget, renderbuffer);
406  }
407}
408
409void FramebufferTexture2D(
410    PP_Resource context_id, GLenum target, GLenum attachment, GLenum textarget,
411    GLuint texture, GLint level) {
412  Enter3D enter(context_id, true);
413  if (enter.succeeded()) {
414    ToGles2Impl(
415        &enter)->FramebufferTexture2D(
416            target, attachment, textarget, texture, level);
417  }
418}
419
420void FrontFace(PP_Resource context_id, GLenum mode) {
421  Enter3D enter(context_id, true);
422  if (enter.succeeded()) {
423    ToGles2Impl(&enter)->FrontFace(mode);
424  }
425}
426
427void GenBuffers(PP_Resource context_id, GLsizei n, GLuint* buffers) {
428  Enter3D enter(context_id, true);
429  if (enter.succeeded()) {
430    ToGles2Impl(&enter)->GenBuffers(n, buffers);
431  }
432}
433
434void GenerateMipmap(PP_Resource context_id, GLenum target) {
435  Enter3D enter(context_id, true);
436  if (enter.succeeded()) {
437    ToGles2Impl(&enter)->GenerateMipmap(target);
438  }
439}
440
441void GenFramebuffers(PP_Resource context_id, GLsizei n, GLuint* framebuffers) {
442  Enter3D enter(context_id, true);
443  if (enter.succeeded()) {
444    ToGles2Impl(&enter)->GenFramebuffers(n, framebuffers);
445  }
446}
447
448void GenRenderbuffers(
449    PP_Resource context_id, GLsizei n, GLuint* renderbuffers) {
450  Enter3D enter(context_id, true);
451  if (enter.succeeded()) {
452    ToGles2Impl(&enter)->GenRenderbuffers(n, renderbuffers);
453  }
454}
455
456void GenTextures(PP_Resource context_id, GLsizei n, GLuint* textures) {
457  Enter3D enter(context_id, true);
458  if (enter.succeeded()) {
459    ToGles2Impl(&enter)->GenTextures(n, textures);
460  }
461}
462
463void GetActiveAttrib(
464    PP_Resource context_id, GLuint program, GLuint index, GLsizei bufsize,
465    GLsizei* length, GLint* size, GLenum* type, char* name) {
466  Enter3D enter(context_id, true);
467  if (enter.succeeded()) {
468    ToGles2Impl(
469        &enter)->GetActiveAttrib(
470            program, index, bufsize, length, size, type, name);
471  }
472}
473
474void GetActiveUniform(
475    PP_Resource context_id, GLuint program, GLuint index, GLsizei bufsize,
476    GLsizei* length, GLint* size, GLenum* type, char* name) {
477  Enter3D enter(context_id, true);
478  if (enter.succeeded()) {
479    ToGles2Impl(
480        &enter)->GetActiveUniform(
481            program, index, bufsize, length, size, type, name);
482  }
483}
484
485void GetAttachedShaders(
486    PP_Resource context_id, GLuint program, GLsizei maxcount, GLsizei* count,
487    GLuint* shaders) {
488  Enter3D enter(context_id, true);
489  if (enter.succeeded()) {
490    ToGles2Impl(&enter)->GetAttachedShaders(program, maxcount, count, shaders);
491  }
492}
493
494GLint GetAttribLocation(
495    PP_Resource context_id, GLuint program, const char* name) {
496  Enter3D enter(context_id, true);
497  if (enter.succeeded()) {
498    return ToGles2Impl(&enter)->GetAttribLocation(program, name);
499  } else {
500    return -1;
501  }
502}
503
504void GetBooleanv(PP_Resource context_id, GLenum pname, GLboolean* params) {
505  Enter3D enter(context_id, true);
506  if (enter.succeeded()) {
507    ToGles2Impl(&enter)->GetBooleanv(pname, params);
508  }
509}
510
511void GetBufferParameteriv(
512    PP_Resource context_id, GLenum target, GLenum pname, GLint* params) {
513  Enter3D enter(context_id, true);
514  if (enter.succeeded()) {
515    ToGles2Impl(&enter)->GetBufferParameteriv(target, pname, params);
516  }
517}
518
519GLenum GetError(PP_Resource context_id) {
520  Enter3D enter(context_id, true);
521  if (enter.succeeded()) {
522    return ToGles2Impl(&enter)->GetError();
523  } else {
524    return 0;
525  }
526}
527
528void GetFloatv(PP_Resource context_id, GLenum pname, GLfloat* params) {
529  Enter3D enter(context_id, true);
530  if (enter.succeeded()) {
531    ToGles2Impl(&enter)->GetFloatv(pname, params);
532  }
533}
534
535void GetFramebufferAttachmentParameteriv(
536    PP_Resource context_id, GLenum target, GLenum attachment, GLenum pname,
537    GLint* params) {
538  Enter3D enter(context_id, true);
539  if (enter.succeeded()) {
540    ToGles2Impl(
541        &enter)->GetFramebufferAttachmentParameteriv(
542            target, attachment, pname, params);
543  }
544}
545
546void GetIntegerv(PP_Resource context_id, GLenum pname, GLint* params) {
547  Enter3D enter(context_id, true);
548  if (enter.succeeded()) {
549    ToGles2Impl(&enter)->GetIntegerv(pname, params);
550  }
551}
552
553void GetProgramiv(
554    PP_Resource context_id, GLuint program, GLenum pname, GLint* params) {
555  Enter3D enter(context_id, true);
556  if (enter.succeeded()) {
557    ToGles2Impl(&enter)->GetProgramiv(program, pname, params);
558  }
559}
560
561void GetProgramInfoLog(
562    PP_Resource context_id, GLuint program, GLsizei bufsize, GLsizei* length,
563    char* infolog) {
564  Enter3D enter(context_id, true);
565  if (enter.succeeded()) {
566    ToGles2Impl(&enter)->GetProgramInfoLog(program, bufsize, length, infolog);
567  }
568}
569
570void GetRenderbufferParameteriv(
571    PP_Resource context_id, GLenum target, GLenum pname, GLint* params) {
572  Enter3D enter(context_id, true);
573  if (enter.succeeded()) {
574    ToGles2Impl(&enter)->GetRenderbufferParameteriv(target, pname, params);
575  }
576}
577
578void GetShaderiv(
579    PP_Resource context_id, GLuint shader, GLenum pname, GLint* params) {
580  Enter3D enter(context_id, true);
581  if (enter.succeeded()) {
582    ToGles2Impl(&enter)->GetShaderiv(shader, pname, params);
583  }
584}
585
586void GetShaderInfoLog(
587    PP_Resource context_id, GLuint shader, GLsizei bufsize, GLsizei* length,
588    char* infolog) {
589  Enter3D enter(context_id, true);
590  if (enter.succeeded()) {
591    ToGles2Impl(&enter)->GetShaderInfoLog(shader, bufsize, length, infolog);
592  }
593}
594
595void GetShaderPrecisionFormat(
596    PP_Resource context_id, GLenum shadertype, GLenum precisiontype,
597    GLint* range, GLint* precision) {
598  Enter3D enter(context_id, true);
599  if (enter.succeeded()) {
600    ToGles2Impl(
601        &enter)->GetShaderPrecisionFormat(
602            shadertype, precisiontype, range, precision);
603  }
604}
605
606void GetShaderSource(
607    PP_Resource context_id, GLuint shader, GLsizei bufsize, GLsizei* length,
608    char* source) {
609  Enter3D enter(context_id, true);
610  if (enter.succeeded()) {
611    ToGles2Impl(&enter)->GetShaderSource(shader, bufsize, length, source);
612  }
613}
614
615const GLubyte* GetString(PP_Resource context_id, GLenum name) {
616  Enter3D enter(context_id, true);
617  if (enter.succeeded()) {
618    return ToGles2Impl(&enter)->GetString(name);
619  } else {
620    return NULL;
621  }
622}
623
624void GetTexParameterfv(
625    PP_Resource context_id, GLenum target, GLenum pname, GLfloat* params) {
626  Enter3D enter(context_id, true);
627  if (enter.succeeded()) {
628    ToGles2Impl(&enter)->GetTexParameterfv(target, pname, params);
629  }
630}
631
632void GetTexParameteriv(
633    PP_Resource context_id, GLenum target, GLenum pname, GLint* params) {
634  Enter3D enter(context_id, true);
635  if (enter.succeeded()) {
636    ToGles2Impl(&enter)->GetTexParameteriv(target, pname, params);
637  }
638}
639
640void GetUniformfv(
641    PP_Resource context_id, GLuint program, GLint location, GLfloat* params) {
642  Enter3D enter(context_id, true);
643  if (enter.succeeded()) {
644    ToGles2Impl(&enter)->GetUniformfv(program, location, params);
645  }
646}
647
648void GetUniformiv(
649    PP_Resource context_id, GLuint program, GLint location, GLint* params) {
650  Enter3D enter(context_id, true);
651  if (enter.succeeded()) {
652    ToGles2Impl(&enter)->GetUniformiv(program, location, params);
653  }
654}
655
656GLint GetUniformLocation(
657    PP_Resource context_id, GLuint program, const char* name) {
658  Enter3D enter(context_id, true);
659  if (enter.succeeded()) {
660    return ToGles2Impl(&enter)->GetUniformLocation(program, name);
661  } else {
662    return -1;
663  }
664}
665
666void GetVertexAttribfv(
667    PP_Resource context_id, GLuint index, GLenum pname, GLfloat* params) {
668  Enter3D enter(context_id, true);
669  if (enter.succeeded()) {
670    ToGles2Impl(&enter)->GetVertexAttribfv(index, pname, params);
671  }
672}
673
674void GetVertexAttribiv(
675    PP_Resource context_id, GLuint index, GLenum pname, GLint* params) {
676  Enter3D enter(context_id, true);
677  if (enter.succeeded()) {
678    ToGles2Impl(&enter)->GetVertexAttribiv(index, pname, params);
679  }
680}
681
682void GetVertexAttribPointerv(
683    PP_Resource context_id, GLuint index, GLenum pname, void** pointer) {
684  Enter3D enter(context_id, true);
685  if (enter.succeeded()) {
686    ToGles2Impl(&enter)->GetVertexAttribPointerv(index, pname, pointer);
687  }
688}
689
690void Hint(PP_Resource context_id, GLenum target, GLenum mode) {
691  Enter3D enter(context_id, true);
692  if (enter.succeeded()) {
693    ToGles2Impl(&enter)->Hint(target, mode);
694  }
695}
696
697GLboolean IsBuffer(PP_Resource context_id, GLuint buffer) {
698  Enter3D enter(context_id, true);
699  if (enter.succeeded()) {
700    return ToGles2Impl(&enter)->IsBuffer(buffer);
701  } else {
702    return GL_FALSE;
703  }
704}
705
706GLboolean IsEnabled(PP_Resource context_id, GLenum cap) {
707  Enter3D enter(context_id, true);
708  if (enter.succeeded()) {
709    return ToGles2Impl(&enter)->IsEnabled(cap);
710  } else {
711    return GL_FALSE;
712  }
713}
714
715GLboolean IsFramebuffer(PP_Resource context_id, GLuint framebuffer) {
716  Enter3D enter(context_id, true);
717  if (enter.succeeded()) {
718    return ToGles2Impl(&enter)->IsFramebuffer(framebuffer);
719  } else {
720    return GL_FALSE;
721  }
722}
723
724GLboolean IsProgram(PP_Resource context_id, GLuint program) {
725  Enter3D enter(context_id, true);
726  if (enter.succeeded()) {
727    return ToGles2Impl(&enter)->IsProgram(program);
728  } else {
729    return GL_FALSE;
730  }
731}
732
733GLboolean IsRenderbuffer(PP_Resource context_id, GLuint renderbuffer) {
734  Enter3D enter(context_id, true);
735  if (enter.succeeded()) {
736    return ToGles2Impl(&enter)->IsRenderbuffer(renderbuffer);
737  } else {
738    return GL_FALSE;
739  }
740}
741
742GLboolean IsShader(PP_Resource context_id, GLuint shader) {
743  Enter3D enter(context_id, true);
744  if (enter.succeeded()) {
745    return ToGles2Impl(&enter)->IsShader(shader);
746  } else {
747    return GL_FALSE;
748  }
749}
750
751GLboolean IsTexture(PP_Resource context_id, GLuint texture) {
752  Enter3D enter(context_id, true);
753  if (enter.succeeded()) {
754    return ToGles2Impl(&enter)->IsTexture(texture);
755  } else {
756    return GL_FALSE;
757  }
758}
759
760void LineWidth(PP_Resource context_id, GLfloat width) {
761  Enter3D enter(context_id, true);
762  if (enter.succeeded()) {
763    ToGles2Impl(&enter)->LineWidth(width);
764  }
765}
766
767void LinkProgram(PP_Resource context_id, GLuint program) {
768  Enter3D enter(context_id, true);
769  if (enter.succeeded()) {
770    ToGles2Impl(&enter)->LinkProgram(program);
771  }
772}
773
774void PixelStorei(PP_Resource context_id, GLenum pname, GLint param) {
775  Enter3D enter(context_id, true);
776  if (enter.succeeded()) {
777    ToGles2Impl(&enter)->PixelStorei(pname, param);
778  }
779}
780
781void PolygonOffset(PP_Resource context_id, GLfloat factor, GLfloat units) {
782  Enter3D enter(context_id, true);
783  if (enter.succeeded()) {
784    ToGles2Impl(&enter)->PolygonOffset(factor, units);
785  }
786}
787
788void ReadPixels(
789    PP_Resource context_id, GLint x, GLint y, GLsizei width, GLsizei height,
790    GLenum format, GLenum type, void* pixels) {
791  Enter3D enter(context_id, true);
792  if (enter.succeeded()) {
793    ToGles2Impl(&enter)->ReadPixels(x, y, width, height, format, type, pixels);
794  }
795}
796
797void ReleaseShaderCompiler(PP_Resource context_id) {
798  Enter3D enter(context_id, true);
799  if (enter.succeeded()) {
800    ToGles2Impl(&enter)->ReleaseShaderCompiler();
801  }
802}
803
804void RenderbufferStorage(
805    PP_Resource context_id, GLenum target, GLenum internalformat, GLsizei width,
806    GLsizei height) {
807  Enter3D enter(context_id, true);
808  if (enter.succeeded()) {
809    ToGles2Impl(
810        &enter)->RenderbufferStorage(target, internalformat, width, height);
811  }
812}
813
814void SampleCoverage(PP_Resource context_id, GLclampf value, GLboolean invert) {
815  Enter3D enter(context_id, true);
816  if (enter.succeeded()) {
817    ToGles2Impl(&enter)->SampleCoverage(value, invert);
818  }
819}
820
821void Scissor(
822    PP_Resource context_id, GLint x, GLint y, GLsizei width, GLsizei height) {
823  Enter3D enter(context_id, true);
824  if (enter.succeeded()) {
825    ToGles2Impl(&enter)->Scissor(x, y, width, height);
826  }
827}
828
829void ShaderBinary(
830    PP_Resource context_id, GLsizei n, const GLuint* shaders,
831    GLenum binaryformat, const void* binary, GLsizei length) {
832  Enter3D enter(context_id, true);
833  if (enter.succeeded()) {
834    ToGles2Impl(
835        &enter)->ShaderBinary(n, shaders, binaryformat, binary, length);
836  }
837}
838
839void ShaderSource(
840    PP_Resource context_id, GLuint shader, GLsizei count, const char** str,
841    const GLint* length) {
842  Enter3D enter(context_id, true);
843  if (enter.succeeded()) {
844    ToGles2Impl(&enter)->ShaderSource(shader, count, str, length);
845  }
846}
847
848void StencilFunc(PP_Resource context_id, GLenum func, GLint ref, GLuint mask) {
849  Enter3D enter(context_id, true);
850  if (enter.succeeded()) {
851    ToGles2Impl(&enter)->StencilFunc(func, ref, mask);
852  }
853}
854
855void StencilFuncSeparate(
856    PP_Resource context_id, GLenum face, GLenum func, GLint ref, GLuint mask) {
857  Enter3D enter(context_id, true);
858  if (enter.succeeded()) {
859    ToGles2Impl(&enter)->StencilFuncSeparate(face, func, ref, mask);
860  }
861}
862
863void StencilMask(PP_Resource context_id, GLuint mask) {
864  Enter3D enter(context_id, true);
865  if (enter.succeeded()) {
866    ToGles2Impl(&enter)->StencilMask(mask);
867  }
868}
869
870void StencilMaskSeparate(PP_Resource context_id, GLenum face, GLuint mask) {
871  Enter3D enter(context_id, true);
872  if (enter.succeeded()) {
873    ToGles2Impl(&enter)->StencilMaskSeparate(face, mask);
874  }
875}
876
877void StencilOp(
878    PP_Resource context_id, GLenum fail, GLenum zfail, GLenum zpass) {
879  Enter3D enter(context_id, true);
880  if (enter.succeeded()) {
881    ToGles2Impl(&enter)->StencilOp(fail, zfail, zpass);
882  }
883}
884
885void StencilOpSeparate(
886    PP_Resource context_id, GLenum face, GLenum fail, GLenum zfail,
887    GLenum zpass) {
888  Enter3D enter(context_id, true);
889  if (enter.succeeded()) {
890    ToGles2Impl(&enter)->StencilOpSeparate(face, fail, zfail, zpass);
891  }
892}
893
894void TexImage2D(
895    PP_Resource context_id, GLenum target, GLint level, GLint internalformat,
896    GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type,
897    const void* pixels) {
898  Enter3D enter(context_id, true);
899  if (enter.succeeded()) {
900    ToGles2Impl(
901        &enter)->TexImage2D(
902            target, level, internalformat, width, height, border, format, type,
903            pixels);
904  }
905}
906
907void TexParameterf(
908    PP_Resource context_id, GLenum target, GLenum pname, GLfloat param) {
909  Enter3D enter(context_id, true);
910  if (enter.succeeded()) {
911    ToGles2Impl(&enter)->TexParameterf(target, pname, param);
912  }
913}
914
915void TexParameterfv(
916    PP_Resource context_id, GLenum target, GLenum pname,
917    const GLfloat* params) {
918  Enter3D enter(context_id, true);
919  if (enter.succeeded()) {
920    ToGles2Impl(&enter)->TexParameterfv(target, pname, params);
921  }
922}
923
924void TexParameteri(
925    PP_Resource context_id, GLenum target, GLenum pname, GLint param) {
926  Enter3D enter(context_id, true);
927  if (enter.succeeded()) {
928    ToGles2Impl(&enter)->TexParameteri(target, pname, param);
929  }
930}
931
932void TexParameteriv(
933    PP_Resource context_id, GLenum target, GLenum pname, const GLint* params) {
934  Enter3D enter(context_id, true);
935  if (enter.succeeded()) {
936    ToGles2Impl(&enter)->TexParameteriv(target, pname, params);
937  }
938}
939
940void TexSubImage2D(
941    PP_Resource context_id, GLenum target, GLint level, GLint xoffset,
942    GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type,
943    const void* pixels) {
944  Enter3D enter(context_id, true);
945  if (enter.succeeded()) {
946    ToGles2Impl(
947        &enter)->TexSubImage2D(
948            target, level, xoffset, yoffset, width, height, format, type,
949            pixels);
950  }
951}
952
953void Uniform1f(PP_Resource context_id, GLint location, GLfloat x) {
954  Enter3D enter(context_id, true);
955  if (enter.succeeded()) {
956    ToGles2Impl(&enter)->Uniform1f(location, x);
957  }
958}
959
960void Uniform1fv(
961    PP_Resource context_id, GLint location, GLsizei count, const GLfloat* v) {
962  Enter3D enter(context_id, true);
963  if (enter.succeeded()) {
964    ToGles2Impl(&enter)->Uniform1fv(location, count, v);
965  }
966}
967
968void Uniform1i(PP_Resource context_id, GLint location, GLint x) {
969  Enter3D enter(context_id, true);
970  if (enter.succeeded()) {
971    ToGles2Impl(&enter)->Uniform1i(location, x);
972  }
973}
974
975void Uniform1iv(
976    PP_Resource context_id, GLint location, GLsizei count, const GLint* v) {
977  Enter3D enter(context_id, true);
978  if (enter.succeeded()) {
979    ToGles2Impl(&enter)->Uniform1iv(location, count, v);
980  }
981}
982
983void Uniform2f(PP_Resource context_id, GLint location, GLfloat x, GLfloat y) {
984  Enter3D enter(context_id, true);
985  if (enter.succeeded()) {
986    ToGles2Impl(&enter)->Uniform2f(location, x, y);
987  }
988}
989
990void Uniform2fv(
991    PP_Resource context_id, GLint location, GLsizei count, const GLfloat* v) {
992  Enter3D enter(context_id, true);
993  if (enter.succeeded()) {
994    ToGles2Impl(&enter)->Uniform2fv(location, count, v);
995  }
996}
997
998void Uniform2i(PP_Resource context_id, GLint location, GLint x, GLint y) {
999  Enter3D enter(context_id, true);
1000  if (enter.succeeded()) {
1001    ToGles2Impl(&enter)->Uniform2i(location, x, y);
1002  }
1003}
1004
1005void Uniform2iv(
1006    PP_Resource context_id, GLint location, GLsizei count, const GLint* v) {
1007  Enter3D enter(context_id, true);
1008  if (enter.succeeded()) {
1009    ToGles2Impl(&enter)->Uniform2iv(location, count, v);
1010  }
1011}
1012
1013void Uniform3f(
1014    PP_Resource context_id, GLint location, GLfloat x, GLfloat y, GLfloat z) {
1015  Enter3D enter(context_id, true);
1016  if (enter.succeeded()) {
1017    ToGles2Impl(&enter)->Uniform3f(location, x, y, z);
1018  }
1019}
1020
1021void Uniform3fv(
1022    PP_Resource context_id, GLint location, GLsizei count, const GLfloat* v) {
1023  Enter3D enter(context_id, true);
1024  if (enter.succeeded()) {
1025    ToGles2Impl(&enter)->Uniform3fv(location, count, v);
1026  }
1027}
1028
1029void Uniform3i(
1030    PP_Resource context_id, GLint location, GLint x, GLint y, GLint z) {
1031  Enter3D enter(context_id, true);
1032  if (enter.succeeded()) {
1033    ToGles2Impl(&enter)->Uniform3i(location, x, y, z);
1034  }
1035}
1036
1037void Uniform3iv(
1038    PP_Resource context_id, GLint location, GLsizei count, const GLint* v) {
1039  Enter3D enter(context_id, true);
1040  if (enter.succeeded()) {
1041    ToGles2Impl(&enter)->Uniform3iv(location, count, v);
1042  }
1043}
1044
1045void Uniform4f(
1046    PP_Resource context_id, GLint location, GLfloat x, GLfloat y, GLfloat z,
1047    GLfloat w) {
1048  Enter3D enter(context_id, true);
1049  if (enter.succeeded()) {
1050    ToGles2Impl(&enter)->Uniform4f(location, x, y, z, w);
1051  }
1052}
1053
1054void Uniform4fv(
1055    PP_Resource context_id, GLint location, GLsizei count, const GLfloat* v) {
1056  Enter3D enter(context_id, true);
1057  if (enter.succeeded()) {
1058    ToGles2Impl(&enter)->Uniform4fv(location, count, v);
1059  }
1060}
1061
1062void Uniform4i(
1063    PP_Resource context_id, GLint location, GLint x, GLint y, GLint z,
1064    GLint w) {
1065  Enter3D enter(context_id, true);
1066  if (enter.succeeded()) {
1067    ToGles2Impl(&enter)->Uniform4i(location, x, y, z, w);
1068  }
1069}
1070
1071void Uniform4iv(
1072    PP_Resource context_id, GLint location, GLsizei count, const GLint* v) {
1073  Enter3D enter(context_id, true);
1074  if (enter.succeeded()) {
1075    ToGles2Impl(&enter)->Uniform4iv(location, count, v);
1076  }
1077}
1078
1079void UniformMatrix2fv(
1080    PP_Resource context_id, GLint location, GLsizei count, GLboolean transpose,
1081    const GLfloat* value) {
1082  Enter3D enter(context_id, true);
1083  if (enter.succeeded()) {
1084    ToGles2Impl(&enter)->UniformMatrix2fv(location, count, transpose, value);
1085  }
1086}
1087
1088void UniformMatrix3fv(
1089    PP_Resource context_id, GLint location, GLsizei count, GLboolean transpose,
1090    const GLfloat* value) {
1091  Enter3D enter(context_id, true);
1092  if (enter.succeeded()) {
1093    ToGles2Impl(&enter)->UniformMatrix3fv(location, count, transpose, value);
1094  }
1095}
1096
1097void UniformMatrix4fv(
1098    PP_Resource context_id, GLint location, GLsizei count, GLboolean transpose,
1099    const GLfloat* value) {
1100  Enter3D enter(context_id, true);
1101  if (enter.succeeded()) {
1102    ToGles2Impl(&enter)->UniformMatrix4fv(location, count, transpose, value);
1103  }
1104}
1105
1106void UseProgram(PP_Resource context_id, GLuint program) {
1107  Enter3D enter(context_id, true);
1108  if (enter.succeeded()) {
1109    ToGles2Impl(&enter)->UseProgram(program);
1110  }
1111}
1112
1113void ValidateProgram(PP_Resource context_id, GLuint program) {
1114  Enter3D enter(context_id, true);
1115  if (enter.succeeded()) {
1116    ToGles2Impl(&enter)->ValidateProgram(program);
1117  }
1118}
1119
1120void VertexAttrib1f(PP_Resource context_id, GLuint indx, GLfloat x) {
1121  Enter3D enter(context_id, true);
1122  if (enter.succeeded()) {
1123    ToGles2Impl(&enter)->VertexAttrib1f(indx, x);
1124  }
1125}
1126
1127void VertexAttrib1fv(
1128    PP_Resource context_id, GLuint indx, const GLfloat* values) {
1129  Enter3D enter(context_id, true);
1130  if (enter.succeeded()) {
1131    ToGles2Impl(&enter)->VertexAttrib1fv(indx, values);
1132  }
1133}
1134
1135void VertexAttrib2f(
1136    PP_Resource context_id, GLuint indx, GLfloat x, GLfloat y) {
1137  Enter3D enter(context_id, true);
1138  if (enter.succeeded()) {
1139    ToGles2Impl(&enter)->VertexAttrib2f(indx, x, y);
1140  }
1141}
1142
1143void VertexAttrib2fv(
1144    PP_Resource context_id, GLuint indx, const GLfloat* values) {
1145  Enter3D enter(context_id, true);
1146  if (enter.succeeded()) {
1147    ToGles2Impl(&enter)->VertexAttrib2fv(indx, values);
1148  }
1149}
1150
1151void VertexAttrib3f(
1152    PP_Resource context_id, GLuint indx, GLfloat x, GLfloat y, GLfloat z) {
1153  Enter3D enter(context_id, true);
1154  if (enter.succeeded()) {
1155    ToGles2Impl(&enter)->VertexAttrib3f(indx, x, y, z);
1156  }
1157}
1158
1159void VertexAttrib3fv(
1160    PP_Resource context_id, GLuint indx, const GLfloat* values) {
1161  Enter3D enter(context_id, true);
1162  if (enter.succeeded()) {
1163    ToGles2Impl(&enter)->VertexAttrib3fv(indx, values);
1164  }
1165}
1166
1167void VertexAttrib4f(
1168    PP_Resource context_id, GLuint indx, GLfloat x, GLfloat y, GLfloat z,
1169    GLfloat w) {
1170  Enter3D enter(context_id, true);
1171  if (enter.succeeded()) {
1172    ToGles2Impl(&enter)->VertexAttrib4f(indx, x, y, z, w);
1173  }
1174}
1175
1176void VertexAttrib4fv(
1177    PP_Resource context_id, GLuint indx, const GLfloat* values) {
1178  Enter3D enter(context_id, true);
1179  if (enter.succeeded()) {
1180    ToGles2Impl(&enter)->VertexAttrib4fv(indx, values);
1181  }
1182}
1183
1184void VertexAttribPointer(
1185    PP_Resource context_id, GLuint indx, GLint size, GLenum type,
1186    GLboolean normalized, GLsizei stride, const void* ptr) {
1187  Enter3D enter(context_id, true);
1188  if (enter.succeeded()) {
1189    ToGles2Impl(
1190        &enter)->VertexAttribPointer(
1191            indx, size, type, normalized, stride, ptr);
1192  }
1193}
1194
1195void Viewport(
1196    PP_Resource context_id, GLint x, GLint y, GLsizei width, GLsizei height) {
1197  Enter3D enter(context_id, true);
1198  if (enter.succeeded()) {
1199    ToGles2Impl(&enter)->Viewport(x, y, width, height);
1200  }
1201}
1202
1203void BlitFramebufferEXT(
1204    PP_Resource context_id, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
1205    GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask,
1206    GLenum filter) {
1207  Enter3D enter(context_id, true);
1208  if (enter.succeeded()) {
1209    ToGles2Impl(
1210        &enter)->BlitFramebufferCHROMIUM(
1211            srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask,
1212            filter);
1213  }
1214}
1215
1216void RenderbufferStorageMultisampleEXT(
1217    PP_Resource context_id, GLenum target, GLsizei samples,
1218    GLenum internalformat, GLsizei width, GLsizei height) {
1219  Enter3D enter(context_id, true);
1220  if (enter.succeeded()) {
1221    ToGles2Impl(
1222        &enter)->RenderbufferStorageMultisampleCHROMIUM(
1223            target, samples, internalformat, width, height);
1224  }
1225}
1226
1227void GenQueriesEXT(PP_Resource context_id, GLsizei n, GLuint* queries) {
1228  Enter3D enter(context_id, true);
1229  if (enter.succeeded()) {
1230    ToGles2Impl(&enter)->GenQueriesEXT(n, queries);
1231  }
1232}
1233
1234void DeleteQueriesEXT(
1235    PP_Resource context_id, GLsizei n, const GLuint* queries) {
1236  Enter3D enter(context_id, true);
1237  if (enter.succeeded()) {
1238    ToGles2Impl(&enter)->DeleteQueriesEXT(n, queries);
1239  }
1240}
1241
1242GLboolean IsQueryEXT(PP_Resource context_id, GLuint id) {
1243  Enter3D enter(context_id, true);
1244  if (enter.succeeded()) {
1245    return ToGles2Impl(&enter)->IsQueryEXT(id);
1246  } else {
1247    return GL_FALSE;
1248  }
1249}
1250
1251void BeginQueryEXT(PP_Resource context_id, GLenum target, GLuint id) {
1252  Enter3D enter(context_id, true);
1253  if (enter.succeeded()) {
1254    ToGles2Impl(&enter)->BeginQueryEXT(target, id);
1255  }
1256}
1257
1258void EndQueryEXT(PP_Resource context_id, GLenum target) {
1259  Enter3D enter(context_id, true);
1260  if (enter.succeeded()) {
1261    ToGles2Impl(&enter)->EndQueryEXT(target);
1262  }
1263}
1264
1265void GetQueryivEXT(
1266    PP_Resource context_id, GLenum target, GLenum pname, GLint* params) {
1267  Enter3D enter(context_id, true);
1268  if (enter.succeeded()) {
1269    ToGles2Impl(&enter)->GetQueryivEXT(target, pname, params);
1270  }
1271}
1272
1273void GetQueryObjectuivEXT(
1274    PP_Resource context_id, GLuint id, GLenum pname, GLuint* params) {
1275  Enter3D enter(context_id, true);
1276  if (enter.succeeded()) {
1277    ToGles2Impl(&enter)->GetQueryObjectuivEXT(id, pname, params);
1278  }
1279}
1280
1281GLboolean EnableFeatureCHROMIUM(PP_Resource context_id, const char* feature) {
1282  Enter3D enter(context_id, true);
1283  if (enter.succeeded()) {
1284    return ToGles2Impl(&enter)->EnableFeatureCHROMIUM(feature);
1285  } else {
1286    return GL_FALSE;
1287  }
1288}
1289
1290void* MapBufferSubDataCHROMIUM(
1291    PP_Resource context_id, GLuint target, GLintptr offset, GLsizeiptr size,
1292    GLenum access) {
1293  Enter3D enter(context_id, true);
1294  if (enter.succeeded()) {
1295    return ToGles2Impl(
1296        &enter)->MapBufferSubDataCHROMIUM(target, offset, size, access);
1297  } else {
1298    return NULL;
1299  }
1300}
1301
1302void UnmapBufferSubDataCHROMIUM(PP_Resource context_id, const void* mem) {
1303  Enter3D enter(context_id, true);
1304  if (enter.succeeded()) {
1305    ToGles2Impl(&enter)->UnmapBufferSubDataCHROMIUM(mem);
1306  }
1307}
1308
1309void* MapTexSubImage2DCHROMIUM(
1310    PP_Resource context_id, GLenum target, GLint level, GLint xoffset,
1311    GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type,
1312    GLenum access) {
1313  Enter3D enter(context_id, true);
1314  if (enter.succeeded()) {
1315    return ToGles2Impl(
1316        &enter)->MapTexSubImage2DCHROMIUM(
1317            target, level, xoffset, yoffset, width, height, format, type,
1318            access);
1319  } else {
1320    return NULL;
1321  }
1322}
1323
1324void UnmapTexSubImage2DCHROMIUM(PP_Resource context_id, const void* mem) {
1325  Enter3D enter(context_id, true);
1326  if (enter.succeeded()) {
1327    ToGles2Impl(&enter)->UnmapTexSubImage2DCHROMIUM(mem);
1328  }
1329}
1330
1331void DrawArraysInstancedANGLE(
1332    PP_Resource context_id, GLenum mode, GLint first, GLsizei count,
1333    GLsizei primcount) {
1334  Enter3D enter(context_id, true);
1335  if (enter.succeeded()) {
1336    ToGles2Impl(
1337        &enter)->DrawArraysInstancedANGLE(mode, first, count, primcount);
1338  }
1339}
1340
1341void DrawElementsInstancedANGLE(
1342    PP_Resource context_id, GLenum mode, GLsizei count, GLenum type,
1343    const void* indices, GLsizei primcount) {
1344  Enter3D enter(context_id, true);
1345  if (enter.succeeded()) {
1346    ToGles2Impl(
1347        &enter)->DrawElementsInstancedANGLE(
1348            mode, count, type, indices, primcount);
1349  }
1350}
1351
1352void VertexAttribDivisorANGLE(
1353    PP_Resource context_id, GLuint index, GLuint divisor) {
1354  Enter3D enter(context_id, true);
1355  if (enter.succeeded()) {
1356    ToGles2Impl(&enter)->VertexAttribDivisorANGLE(index, divisor);
1357  }
1358}
1359
1360}  // namespace
1361const PPB_OpenGLES2* PPB_OpenGLES2_Shared::GetInterface() {
1362  static const struct PPB_OpenGLES2 ppb_opengles2 = {
1363    &ActiveTexture,
1364    &AttachShader,
1365    &BindAttribLocation,
1366    &BindBuffer,
1367    &BindFramebuffer,
1368    &BindRenderbuffer,
1369    &BindTexture,
1370    &BlendColor,
1371    &BlendEquation,
1372    &BlendEquationSeparate,
1373    &BlendFunc,
1374    &BlendFuncSeparate,
1375    &BufferData,
1376    &BufferSubData,
1377    &CheckFramebufferStatus,
1378    &Clear,
1379    &ClearColor,
1380    &ClearDepthf,
1381    &ClearStencil,
1382    &ColorMask,
1383    &CompileShader,
1384    &CompressedTexImage2D,
1385    &CompressedTexSubImage2D,
1386    &CopyTexImage2D,
1387    &CopyTexSubImage2D,
1388    &CreateProgram,
1389    &CreateShader,
1390    &CullFace,
1391    &DeleteBuffers,
1392    &DeleteFramebuffers,
1393    &DeleteProgram,
1394    &DeleteRenderbuffers,
1395    &DeleteShader,
1396    &DeleteTextures,
1397    &DepthFunc,
1398    &DepthMask,
1399    &DepthRangef,
1400    &DetachShader,
1401    &Disable,
1402    &DisableVertexAttribArray,
1403    &DrawArrays,
1404    &DrawElements,
1405    &Enable,
1406    &EnableVertexAttribArray,
1407    &Finish,
1408    &Flush,
1409    &FramebufferRenderbuffer,
1410    &FramebufferTexture2D,
1411    &FrontFace,
1412    &GenBuffers,
1413    &GenerateMipmap,
1414    &GenFramebuffers,
1415    &GenRenderbuffers,
1416    &GenTextures,
1417    &GetActiveAttrib,
1418    &GetActiveUniform,
1419    &GetAttachedShaders,
1420    &GetAttribLocation,
1421    &GetBooleanv,
1422    &GetBufferParameteriv,
1423    &GetError,
1424    &GetFloatv,
1425    &GetFramebufferAttachmentParameteriv,
1426    &GetIntegerv,
1427    &GetProgramiv,
1428    &GetProgramInfoLog,
1429    &GetRenderbufferParameteriv,
1430    &GetShaderiv,
1431    &GetShaderInfoLog,
1432    &GetShaderPrecisionFormat,
1433    &GetShaderSource,
1434    &GetString,
1435    &GetTexParameterfv,
1436    &GetTexParameteriv,
1437    &GetUniformfv,
1438    &GetUniformiv,
1439    &GetUniformLocation,
1440    &GetVertexAttribfv,
1441    &GetVertexAttribiv,
1442    &GetVertexAttribPointerv,
1443    &Hint,
1444    &IsBuffer,
1445    &IsEnabled,
1446    &IsFramebuffer,
1447    &IsProgram,
1448    &IsRenderbuffer,
1449    &IsShader,
1450    &IsTexture,
1451    &LineWidth,
1452    &LinkProgram,
1453    &PixelStorei,
1454    &PolygonOffset,
1455    &ReadPixels,
1456    &ReleaseShaderCompiler,
1457    &RenderbufferStorage,
1458    &SampleCoverage,
1459    &Scissor,
1460    &ShaderBinary,
1461    &ShaderSource,
1462    &StencilFunc,
1463    &StencilFuncSeparate,
1464    &StencilMask,
1465    &StencilMaskSeparate,
1466    &StencilOp,
1467    &StencilOpSeparate,
1468    &TexImage2D,
1469    &TexParameterf,
1470    &TexParameterfv,
1471    &TexParameteri,
1472    &TexParameteriv,
1473    &TexSubImage2D,
1474    &Uniform1f,
1475    &Uniform1fv,
1476    &Uniform1i,
1477    &Uniform1iv,
1478    &Uniform2f,
1479    &Uniform2fv,
1480    &Uniform2i,
1481    &Uniform2iv,
1482    &Uniform3f,
1483    &Uniform3fv,
1484    &Uniform3i,
1485    &Uniform3iv,
1486    &Uniform4f,
1487    &Uniform4fv,
1488    &Uniform4i,
1489    &Uniform4iv,
1490    &UniformMatrix2fv,
1491    &UniformMatrix3fv,
1492    &UniformMatrix4fv,
1493    &UseProgram,
1494    &ValidateProgram,
1495    &VertexAttrib1f,
1496    &VertexAttrib1fv,
1497    &VertexAttrib2f,
1498    &VertexAttrib2fv,
1499    &VertexAttrib3f,
1500    &VertexAttrib3fv,
1501    &VertexAttrib4f,
1502    &VertexAttrib4fv,
1503    &VertexAttribPointer,
1504    &Viewport
1505  };
1506  return &ppb_opengles2;
1507}
1508const PPB_OpenGLES2InstancedArrays* PPB_OpenGLES2_Shared::GetInstancedArraysInterface() {  // NOLINT
1509  static const struct PPB_OpenGLES2InstancedArrays ppb_opengles2 = {
1510    &DrawArraysInstancedANGLE,
1511    &DrawElementsInstancedANGLE,
1512    &VertexAttribDivisorANGLE
1513  };
1514  return &ppb_opengles2;
1515}
1516const PPB_OpenGLES2FramebufferBlit* PPB_OpenGLES2_Shared::GetFramebufferBlitInterface() {  // NOLINT
1517  static const struct PPB_OpenGLES2FramebufferBlit ppb_opengles2 = {
1518    &BlitFramebufferEXT
1519  };
1520  return &ppb_opengles2;
1521}
1522const PPB_OpenGLES2FramebufferMultisample* PPB_OpenGLES2_Shared::GetFramebufferMultisampleInterface() {  // NOLINT
1523  static const struct PPB_OpenGLES2FramebufferMultisample ppb_opengles2 = {
1524    &RenderbufferStorageMultisampleEXT
1525  };
1526  return &ppb_opengles2;
1527}
1528const PPB_OpenGLES2ChromiumEnableFeature* PPB_OpenGLES2_Shared::GetChromiumEnableFeatureInterface() {  // NOLINT
1529  static const struct PPB_OpenGLES2ChromiumEnableFeature ppb_opengles2 = {
1530    &EnableFeatureCHROMIUM
1531  };
1532  return &ppb_opengles2;
1533}
1534const PPB_OpenGLES2ChromiumMapSub* PPB_OpenGLES2_Shared::GetChromiumMapSubInterface() {  // NOLINT
1535  static const struct PPB_OpenGLES2ChromiumMapSub ppb_opengles2 = {
1536    &MapBufferSubDataCHROMIUM,
1537    &UnmapBufferSubDataCHROMIUM,
1538    &MapTexSubImage2DCHROMIUM,
1539    &UnmapTexSubImage2DCHROMIUM
1540  };
1541  return &ppb_opengles2;
1542}
1543const PPB_OpenGLES2Query* PPB_OpenGLES2_Shared::GetQueryInterface() {
1544  static const struct PPB_OpenGLES2Query ppb_opengles2 = {
1545    &GenQueriesEXT,
1546    &DeleteQueriesEXT,
1547    &IsQueryEXT,
1548    &BeginQueryEXT,
1549    &EndQueryEXT,
1550    &GetQueryivEXT,
1551    &GetQueryObjectuivEXT
1552  };
1553  return &ppb_opengles2;
1554}
1555}  // namespace ppapi
1556