Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / webkit / common / gpu / webgraphicscontext3d_impl.h
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 #ifndef WEBKIT_COMMON_GPU_WEBGRAPHICSCONTEXT3D_IMPL_H_
6 #define WEBKIT_COMMON_GPU_WEBGRAPHICSCONTEXT3D_IMPL_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "base/callback.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
14 #include "third_party/WebKit/public/platform/WebString.h"
15 #include "webkit/common/gpu/webkit_gpu_export.h"
16
17 namespace gpu {
18
19 namespace gles2 {
20 class GLES2Interface;
21 class GLES2ImplementationErrorMessageCallback;
22 struct ContextCreationAttribHelper;
23 }
24 }
25
26 using blink::WebGLId;
27
28 using blink::WGC3Dbyte;
29 using blink::WGC3Dchar;
30 using blink::WGC3Denum;
31 using blink::WGC3Dboolean;
32 using blink::WGC3Dbitfield;
33 using blink::WGC3Dint;
34 using blink::WGC3Dsizei;
35 using blink::WGC3Duint;
36 using blink::WGC3Dfloat;
37 using blink::WGC3Dclampf;
38 using blink::WGC3Dintptr;
39 using blink::WGC3Dsizeiptr;
40
41 namespace webkit {
42 namespace gpu {
43
44 class WebGraphicsContext3DErrorMessageCallback;
45
46 class WEBKIT_GPU_EXPORT WebGraphicsContext3DImpl
47     : public NON_EXPORTED_BASE(blink::WebGraphicsContext3D) {
48  public:
49   //----------------------------------------------------------------------
50   // WebGraphicsContext3D methods
51
52   virtual uint32_t lastFlushID();
53
54   virtual unsigned int insertSyncPoint();
55   virtual void waitSyncPoint(unsigned int sync_point);
56
57   virtual void loseContextCHROMIUM(WGC3Denum current, WGC3Denum other);
58
59   virtual void reshapeWithScaleFactor(
60       int width, int height, float scale_factor);
61
62   virtual void prepareTexture();
63   virtual void postSubBufferCHROMIUM(int x, int y, int width, int height);
64
65   virtual void activeTexture(WGC3Denum texture);
66   virtual void attachShader(WebGLId program, WebGLId shader);
67   virtual void bindAttribLocation(WebGLId program, WGC3Duint index,
68                                   const WGC3Dchar* name);
69   virtual void bindBuffer(WGC3Denum target, WebGLId buffer);
70   virtual void bindFramebuffer(WGC3Denum target, WebGLId framebuffer);
71   virtual void bindRenderbuffer(WGC3Denum target, WebGLId renderbuffer);
72   virtual void bindTexture(WGC3Denum target, WebGLId texture);
73   virtual void blendColor(WGC3Dclampf red, WGC3Dclampf green,
74                           WGC3Dclampf blue, WGC3Dclampf alpha);
75   virtual void blendEquation(WGC3Denum mode);
76   virtual void blendEquationSeparate(WGC3Denum modeRGB,
77                                      WGC3Denum modeAlpha);
78   virtual void blendFunc(WGC3Denum sfactor, WGC3Denum dfactor);
79   virtual void blendFuncSeparate(WGC3Denum srcRGB,
80                                  WGC3Denum dstRGB,
81                                  WGC3Denum srcAlpha,
82                                  WGC3Denum dstAlpha);
83
84   virtual void bufferData(WGC3Denum target, WGC3Dsizeiptr size,
85                           const void* data, WGC3Denum usage);
86   virtual void bufferSubData(WGC3Denum target, WGC3Dintptr offset,
87                              WGC3Dsizeiptr size, const void* data);
88
89   virtual WGC3Denum checkFramebufferStatus(WGC3Denum target);
90   virtual void clear(WGC3Dbitfield mask);
91   virtual void clearColor(WGC3Dclampf red, WGC3Dclampf green,
92                           WGC3Dclampf blue, WGC3Dclampf alpha);
93   virtual void clearDepth(WGC3Dclampf depth);
94   virtual void clearStencil(WGC3Dint s);
95   virtual void colorMask(WGC3Dboolean red, WGC3Dboolean green,
96                          WGC3Dboolean blue, WGC3Dboolean alpha);
97   virtual void compileShader(WebGLId shader);
98
99   virtual void compressedTexImage2D(WGC3Denum target,
100                                     WGC3Dint level,
101                                     WGC3Denum internalformat,
102                                     WGC3Dsizei width,
103                                     WGC3Dsizei height,
104                                     WGC3Dint border,
105                                     WGC3Dsizei imageSize,
106                                     const void* data);
107   virtual void compressedTexSubImage2D(WGC3Denum target,
108                                        WGC3Dint level,
109                                        WGC3Dint xoffset,
110                                        WGC3Dint yoffset,
111                                        WGC3Dsizei width,
112                                        WGC3Dsizei height,
113                                        WGC3Denum format,
114                                        WGC3Dsizei imageSize,
115                                        const void* data);
116   virtual void copyTexImage2D(WGC3Denum target,
117                               WGC3Dint level,
118                               WGC3Denum internalformat,
119                               WGC3Dint x,
120                               WGC3Dint y,
121                               WGC3Dsizei width,
122                               WGC3Dsizei height,
123                               WGC3Dint border);
124   virtual void copyTexSubImage2D(WGC3Denum target,
125                                  WGC3Dint level,
126                                  WGC3Dint xoffset,
127                                  WGC3Dint yoffset,
128                                  WGC3Dint x,
129                                  WGC3Dint y,
130                                  WGC3Dsizei width,
131                                  WGC3Dsizei height);
132   virtual void cullFace(WGC3Denum mode);
133   virtual void depthFunc(WGC3Denum func);
134   virtual void depthMask(WGC3Dboolean flag);
135   virtual void depthRange(WGC3Dclampf zNear, WGC3Dclampf zFar);
136   virtual void detachShader(WebGLId program, WebGLId shader);
137   virtual void disable(WGC3Denum cap);
138   virtual void disableVertexAttribArray(WGC3Duint index);
139   virtual void drawArrays(WGC3Denum mode, WGC3Dint first, WGC3Dsizei count);
140   virtual void drawElements(WGC3Denum mode,
141                             WGC3Dsizei count,
142                             WGC3Denum type,
143                             WGC3Dintptr offset);
144
145   virtual void enable(WGC3Denum cap);
146   virtual void enableVertexAttribArray(WGC3Duint index);
147   virtual void finish();
148   virtual void flush();
149   virtual void framebufferRenderbuffer(WGC3Denum target,
150                                        WGC3Denum attachment,
151                                        WGC3Denum renderbuffertarget,
152                                        WebGLId renderbuffer);
153   virtual void framebufferTexture2D(WGC3Denum target,
154                                     WGC3Denum attachment,
155                                     WGC3Denum textarget,
156                                     WebGLId texture,
157                                     WGC3Dint level);
158   virtual void frontFace(WGC3Denum mode);
159   virtual void generateMipmap(WGC3Denum target);
160
161   virtual bool getActiveAttrib(WebGLId program,
162                                WGC3Duint index,
163                                ActiveInfo&);
164   virtual bool getActiveUniform(WebGLId program,
165                                 WGC3Duint index,
166                                 ActiveInfo&);
167
168   virtual void getAttachedShaders(WebGLId program,
169                                   WGC3Dsizei maxCount,
170                                   WGC3Dsizei* count,
171                                   WebGLId* shaders);
172
173   virtual WGC3Dint  getAttribLocation(WebGLId program, const WGC3Dchar* name);
174
175   virtual void getBooleanv(WGC3Denum pname, WGC3Dboolean* value);
176
177   virtual void getBufferParameteriv(WGC3Denum target,
178                                     WGC3Denum pname,
179                                     WGC3Dint* value);
180
181   virtual WGC3Denum getError();
182
183   virtual void getFloatv(WGC3Denum pname, WGC3Dfloat* value);
184
185   virtual void getFramebufferAttachmentParameteriv(WGC3Denum target,
186                                                    WGC3Denum attachment,
187                                                    WGC3Denum pname,
188                                                    WGC3Dint* value);
189
190   virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value);
191
192   virtual void getProgramiv(WebGLId program, WGC3Denum pname, WGC3Dint* value);
193
194   virtual blink::WebString getProgramInfoLog(WebGLId program);
195
196   virtual void getRenderbufferParameteriv(WGC3Denum target,
197                                           WGC3Denum pname,
198                                           WGC3Dint* value);
199
200   virtual void getShaderiv(WebGLId shader, WGC3Denum pname, WGC3Dint* value);
201
202   virtual blink::WebString getShaderInfoLog(WebGLId shader);
203
204   virtual void getShaderPrecisionFormat(WGC3Denum shadertype,
205                                         WGC3Denum precisiontype,
206                                         WGC3Dint* range,
207                                         WGC3Dint* precision);
208
209   virtual blink::WebString getShaderSource(WebGLId shader);
210   virtual blink::WebString getString(WGC3Denum name);
211
212   virtual void getTexParameterfv(WGC3Denum target,
213                                  WGC3Denum pname,
214                                  WGC3Dfloat* value);
215   virtual void getTexParameteriv(WGC3Denum target,
216                                  WGC3Denum pname,
217                                  WGC3Dint* value);
218
219   virtual void getUniformfv(WebGLId program,
220                             WGC3Dint location,
221                             WGC3Dfloat* value);
222   virtual void getUniformiv(WebGLId program,
223                             WGC3Dint location,
224                             WGC3Dint* value);
225
226   virtual WGC3Dint getUniformLocation(WebGLId program, const WGC3Dchar* name);
227
228   virtual void getVertexAttribfv(WGC3Duint index, WGC3Denum pname,
229                                  WGC3Dfloat* value);
230   virtual void getVertexAttribiv(WGC3Duint index, WGC3Denum pname,
231                                  WGC3Dint* value);
232
233   virtual WGC3Dsizeiptr getVertexAttribOffset(WGC3Duint index, WGC3Denum pname);
234
235   virtual void hint(WGC3Denum target, WGC3Denum mode);
236   virtual WGC3Dboolean isBuffer(WebGLId buffer);
237   virtual WGC3Dboolean isEnabled(WGC3Denum cap);
238   virtual WGC3Dboolean isFramebuffer(WebGLId framebuffer);
239   virtual WGC3Dboolean isProgram(WebGLId program);
240   virtual WGC3Dboolean isRenderbuffer(WebGLId renderbuffer);
241   virtual WGC3Dboolean isShader(WebGLId shader);
242   virtual WGC3Dboolean isTexture(WebGLId texture);
243   virtual void lineWidth(WGC3Dfloat);
244   virtual void linkProgram(WebGLId program);
245   virtual void pixelStorei(WGC3Denum pname, WGC3Dint param);
246   virtual void polygonOffset(WGC3Dfloat factor, WGC3Dfloat units);
247
248   virtual void readPixels(WGC3Dint x,
249                           WGC3Dint y,
250                           WGC3Dsizei width,
251                           WGC3Dsizei height,
252                           WGC3Denum format,
253                           WGC3Denum type,
254                           void* pixels);
255
256   virtual void releaseShaderCompiler();
257   virtual void renderbufferStorage(WGC3Denum target,
258                                    WGC3Denum internalformat,
259                                    WGC3Dsizei width,
260                                    WGC3Dsizei height);
261   virtual void sampleCoverage(WGC3Dfloat value, WGC3Dboolean invert);
262   virtual void scissor(WGC3Dint x, WGC3Dint y,
263                        WGC3Dsizei width, WGC3Dsizei height);
264   virtual void shaderSource(WebGLId shader, const WGC3Dchar* string);
265   virtual void stencilFunc(WGC3Denum func, WGC3Dint ref, WGC3Duint mask);
266   virtual void stencilFuncSeparate(WGC3Denum face,
267                                    WGC3Denum func,
268                                    WGC3Dint ref,
269                                    WGC3Duint mask);
270   virtual void stencilMask(WGC3Duint mask);
271   virtual void stencilMaskSeparate(WGC3Denum face, WGC3Duint mask);
272   virtual void stencilOp(WGC3Denum fail,
273                          WGC3Denum zfail,
274                          WGC3Denum zpass);
275   virtual void stencilOpSeparate(WGC3Denum face,
276                                  WGC3Denum fail,
277                                  WGC3Denum zfail,
278                                  WGC3Denum zpass);
279
280   virtual void texImage2D(WGC3Denum target,
281                           WGC3Dint level,
282                           WGC3Denum internalformat,
283                           WGC3Dsizei width,
284                           WGC3Dsizei height,
285                           WGC3Dint border,
286                           WGC3Denum format,
287                           WGC3Denum type,
288                           const void* pixels);
289
290   virtual void texParameterf(WGC3Denum target,
291                              WGC3Denum pname,
292                              WGC3Dfloat param);
293   virtual void texParameteri(WGC3Denum target,
294                              WGC3Denum pname,
295                              WGC3Dint param);
296
297   virtual void texSubImage2D(WGC3Denum target,
298                              WGC3Dint level,
299                              WGC3Dint xoffset,
300                              WGC3Dint yoffset,
301                              WGC3Dsizei width,
302                              WGC3Dsizei height,
303                              WGC3Denum format,
304                              WGC3Denum type,
305                              const void* pixels);
306
307   virtual void uniform1f(WGC3Dint location, WGC3Dfloat x);
308   virtual void uniform1fv(WGC3Dint location,
309                           WGC3Dsizei count, const WGC3Dfloat* v);
310   virtual void uniform1i(WGC3Dint location, WGC3Dint x);
311   virtual void uniform1iv(WGC3Dint location,
312                           WGC3Dsizei count, const WGC3Dint* v);
313   virtual void uniform2f(WGC3Dint location, WGC3Dfloat x, WGC3Dfloat y);
314   virtual void uniform2fv(WGC3Dint location,
315                           WGC3Dsizei count, const WGC3Dfloat* v);
316   virtual void uniform2i(WGC3Dint location, WGC3Dint x, WGC3Dint y);
317   virtual void uniform2iv(WGC3Dint location,
318                           WGC3Dsizei count, const WGC3Dint* v);
319   virtual void uniform3f(WGC3Dint location,
320                          WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z);
321   virtual void uniform3fv(WGC3Dint location,
322                           WGC3Dsizei count, const WGC3Dfloat* v);
323   virtual void uniform3i(WGC3Dint location,
324                          WGC3Dint x, WGC3Dint y, WGC3Dint z);
325   virtual void uniform3iv(WGC3Dint location,
326                           WGC3Dsizei count, const WGC3Dint* v);
327   virtual void uniform4f(WGC3Dint location,
328                          WGC3Dfloat x, WGC3Dfloat y,
329                          WGC3Dfloat z, WGC3Dfloat w);
330   virtual void uniform4fv(WGC3Dint location,
331                           WGC3Dsizei count, const WGC3Dfloat* v);
332   virtual void uniform4i(WGC3Dint location,
333                          WGC3Dint x, WGC3Dint y, WGC3Dint z, WGC3Dint w);
334   virtual void uniform4iv(WGC3Dint location,
335                           WGC3Dsizei count, const WGC3Dint* v);
336   virtual void uniformMatrix2fv(WGC3Dint location,
337                                 WGC3Dsizei count,
338                                 WGC3Dboolean transpose,
339                                 const WGC3Dfloat* value);
340   virtual void uniformMatrix3fv(WGC3Dint location,
341                                 WGC3Dsizei count,
342                                 WGC3Dboolean transpose,
343                                 const WGC3Dfloat* value);
344   virtual void uniformMatrix4fv(WGC3Dint location,
345                                 WGC3Dsizei count,
346                                 WGC3Dboolean transpose,
347                                 const WGC3Dfloat* value);
348
349   virtual void useProgram(WebGLId program);
350   virtual void validateProgram(WebGLId program);
351
352   virtual void vertexAttrib1f(WGC3Duint index, WGC3Dfloat x);
353   virtual void vertexAttrib1fv(WGC3Duint index, const WGC3Dfloat* values);
354   virtual void vertexAttrib2f(WGC3Duint index, WGC3Dfloat x, WGC3Dfloat y);
355   virtual void vertexAttrib2fv(WGC3Duint index, const WGC3Dfloat* values);
356   virtual void vertexAttrib3f(WGC3Duint index,
357                               WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z);
358   virtual void vertexAttrib3fv(WGC3Duint index, const WGC3Dfloat* values);
359   virtual void vertexAttrib4f(WGC3Duint index,
360                               WGC3Dfloat x, WGC3Dfloat y,
361                               WGC3Dfloat z, WGC3Dfloat w);
362   virtual void vertexAttrib4fv(WGC3Duint index, const WGC3Dfloat* values);
363   virtual void vertexAttribPointer(WGC3Duint index,
364                                    WGC3Dint size,
365                                    WGC3Denum type,
366                                    WGC3Dboolean normalized,
367                                    WGC3Dsizei stride,
368                                    WGC3Dintptr offset);
369
370   virtual void viewport(WGC3Dint x, WGC3Dint y,
371                         WGC3Dsizei width, WGC3Dsizei height);
372
373   // Support for buffer creation and deletion
374   virtual void genBuffers(WGC3Dsizei count, WebGLId* ids);
375   virtual void genFramebuffers(WGC3Dsizei count, WebGLId* ids);
376   virtual void genRenderbuffers(WGC3Dsizei count, WebGLId* ids);
377   virtual void genTextures(WGC3Dsizei count, WebGLId* ids);
378
379   virtual void deleteBuffers(WGC3Dsizei count, WebGLId* ids);
380   virtual void deleteFramebuffers(WGC3Dsizei count, WebGLId* ids);
381   virtual void deleteRenderbuffers(WGC3Dsizei count, WebGLId* ids);
382   virtual void deleteTextures(WGC3Dsizei count, WebGLId* ids);
383
384   virtual WebGLId createBuffer();
385   virtual WebGLId createFramebuffer();
386   virtual WebGLId createRenderbuffer();
387   virtual WebGLId createTexture();
388
389   virtual void deleteBuffer(WebGLId);
390   virtual void deleteFramebuffer(WebGLId);
391   virtual void deleteRenderbuffer(WebGLId);
392   virtual void deleteTexture(WebGLId);
393
394   virtual WebGLId createProgram();
395   virtual WebGLId createShader(WGC3Denum);
396
397   virtual void deleteProgram(WebGLId);
398   virtual void deleteShader(WebGLId);
399
400   virtual void synthesizeGLError(WGC3Denum);
401
402   virtual void* mapBufferSubDataCHROMIUM(
403       WGC3Denum target, WGC3Dintptr offset,
404       WGC3Dsizeiptr size, WGC3Denum access);
405   virtual void unmapBufferSubDataCHROMIUM(const void*);
406   virtual void* mapTexSubImage2DCHROMIUM(
407       WGC3Denum target,
408       WGC3Dint level,
409       WGC3Dint xoffset,
410       WGC3Dint yoffset,
411       WGC3Dsizei width,
412       WGC3Dsizei height,
413       WGC3Denum format,
414       WGC3Denum type,
415       WGC3Denum access);
416   virtual void unmapTexSubImage2DCHROMIUM(const void*);
417
418   virtual void setVisibilityCHROMIUM(bool visible);
419
420   virtual void discardFramebufferEXT(WGC3Denum target,
421                                      WGC3Dsizei numAttachments,
422                                      const WGC3Denum* attachments);
423   virtual void copyTextureToParentTextureCHROMIUM(
424       WebGLId texture, WebGLId parentTexture);
425
426   virtual blink::WebString getRequestableExtensionsCHROMIUM();
427   virtual void requestExtensionCHROMIUM(const char*);
428
429   virtual void blitFramebufferCHROMIUM(
430       WGC3Dint srcX0, WGC3Dint srcY0, WGC3Dint srcX1, WGC3Dint srcY1,
431       WGC3Dint dstX0, WGC3Dint dstY0, WGC3Dint dstX1, WGC3Dint dstY1,
432       WGC3Dbitfield mask, WGC3Denum filter);
433   virtual void renderbufferStorageMultisampleCHROMIUM(
434       WGC3Denum target, WGC3Dsizei samples, WGC3Denum internalformat,
435       WGC3Dsizei width, WGC3Dsizei height);
436
437   virtual blink::WebString getTranslatedShaderSourceANGLE(WebGLId shader);
438
439   virtual void setContextLostCallback(
440       WebGraphicsContext3D::WebGraphicsContextLostCallback* callback);
441
442   virtual void setErrorMessageCallback(
443       WebGraphicsContext3D::WebGraphicsErrorMessageCallback* callback);
444
445   virtual void texImageIOSurface2DCHROMIUM(
446       WGC3Denum target, WGC3Dint width, WGC3Dint height,
447       WGC3Duint ioSurfaceId, WGC3Duint plane);
448
449   virtual void texStorage2DEXT(
450       WGC3Denum target, WGC3Dint levels, WGC3Duint internalformat,
451       WGC3Dint width, WGC3Dint height);
452
453   virtual WebGLId createQueryEXT();
454   virtual void deleteQueryEXT(WebGLId query);
455   virtual WGC3Dboolean isQueryEXT(WGC3Duint query);
456   virtual void beginQueryEXT(WGC3Denum target, WebGLId query);
457   virtual void endQueryEXT(WGC3Denum target);
458   virtual void getQueryivEXT(
459       WGC3Denum target, WGC3Denum pname, WGC3Dint* params);
460   virtual void getQueryObjectuivEXT(
461       WebGLId query, WGC3Denum pname, WGC3Duint* params);
462
463   virtual void copyTextureCHROMIUM(WGC3Denum target, WebGLId source_id,
464                                    WebGLId dest_id, WGC3Dint level,
465                                    WGC3Denum internal_format,
466                                    WGC3Denum dest_type);
467
468   virtual void bindUniformLocationCHROMIUM(WebGLId program, WGC3Dint location,
469                                            const WGC3Dchar* uniform);
470
471   virtual void shallowFlushCHROMIUM();
472   virtual void shallowFinishCHROMIUM();
473
474   virtual void genMailboxCHROMIUM(WGC3Dbyte* mailbox);
475   virtual void produceTextureCHROMIUM(WGC3Denum target,
476                                       const WGC3Dbyte* mailbox);
477   virtual void produceTextureDirectCHROMIUM(WebGLId texture, WGC3Denum target,
478                                       const WGC3Dbyte* mailbox);
479   virtual void consumeTextureCHROMIUM(WGC3Denum target,
480                                       const WGC3Dbyte* mailbox);
481   virtual WebGLId createAndConsumeTextureCHROMIUM(WGC3Denum target,
482                                       const WGC3Dbyte* mailbox);
483
484   virtual void insertEventMarkerEXT(const WGC3Dchar* marker);
485   virtual void pushGroupMarkerEXT(const WGC3Dchar* marker);
486   virtual void popGroupMarkerEXT();
487
488   // GL_OES_vertex_array_object
489   virtual WebGLId createVertexArrayOES();
490   virtual void deleteVertexArrayOES(WebGLId array);
491   virtual WGC3Dboolean isVertexArrayOES(WebGLId array);
492   virtual void bindVertexArrayOES(WebGLId array);
493
494   virtual void bindTexImage2DCHROMIUM(WGC3Denum target, WGC3Dint image_id);
495   virtual void releaseTexImage2DCHROMIUM(WGC3Denum target, WGC3Dint image_id);
496
497   virtual void* mapBufferCHROMIUM(WGC3Denum target, WGC3Denum access);
498   virtual WGC3Dboolean unmapBufferCHROMIUM(WGC3Denum target);
499
500   // Async pixel transfer functions.
501   virtual void asyncTexImage2DCHROMIUM(
502       WGC3Denum target,
503       WGC3Dint level,
504       WGC3Denum internalformat,
505       WGC3Dsizei width,
506       WGC3Dsizei height,
507       WGC3Dint border,
508       WGC3Denum format,
509       WGC3Denum type,
510       const void* pixels);
511   virtual void asyncTexSubImage2DCHROMIUM(
512       WGC3Denum target,
513       WGC3Dint level,
514       WGC3Dint xoffset,
515       WGC3Dint yoffset,
516       WGC3Dsizei width,
517       WGC3Dsizei height,
518       WGC3Denum format,
519       WGC3Denum type,
520       const void* pixels);
521   virtual void waitAsyncTexImage2DCHROMIUM(WGC3Denum target);
522
523   // GL_EXT_draw_buffers
524   virtual void drawBuffersEXT(
525       WGC3Dsizei n,
526       const WGC3Denum* bufs);
527
528   // GL_ANGLE_instanced_arrays
529   virtual void drawArraysInstancedANGLE(WGC3Denum mode, WGC3Dint first,
530       WGC3Dsizei count, WGC3Dsizei primcount);
531   virtual void drawElementsInstancedANGLE(WGC3Denum mode, WGC3Dsizei count,
532       WGC3Denum type, WGC3Dintptr offset, WGC3Dsizei primcount);
533   virtual void vertexAttribDivisorANGLE(WGC3Duint index, WGC3Duint divisor);
534
535   // GL_CHROMIUM_map_image
536   virtual WGC3Duint createImageCHROMIUM(WGC3Dsizei width,
537                                         WGC3Dsizei height,
538                                         WGC3Denum internalformat,
539                                         WGC3Denum usage);
540   virtual void destroyImageCHROMIUM(WGC3Duint image_id);
541   virtual void getImageParameterivCHROMIUM(
542       WGC3Duint image_id, WGC3Denum pname, WGC3Dint* params);
543   virtual void* mapImageCHROMIUM(WGC3Duint image_id);
544   virtual void unmapImageCHROMIUM(WGC3Duint image_id);
545
546   // GL_EXT_multisampled_render_to_texture
547   virtual void framebufferTexture2DMultisampleEXT(WGC3Denum target,
548                                     WGC3Denum attachment,
549                                     WGC3Denum textarget,
550                                     WebGLId texture,
551                                     WGC3Dint level,
552                                     WGC3Dsizei samples);
553   virtual void renderbufferStorageMultisampleEXT(
554       WGC3Denum target, WGC3Dsizei samples, WGC3Denum internalformat,
555       WGC3Dsizei width, WGC3Dsizei height);
556
557   virtual GrGLInterface* createGrGLInterface();
558
559   ::gpu::gles2::GLES2Interface* GetGLInterface() {
560     return gl_;
561   }
562
563   // Convert WebGL context creation attributes into command buffer / EGL size
564   // requests.
565   static void ConvertAttributes(
566       const blink::WebGraphicsContext3D::Attributes& attributes,
567       ::gpu::gles2::ContextCreationAttribHelper* output_attribs);
568
569  protected:
570   friend class WebGraphicsContext3DErrorMessageCallback;
571
572   WebGraphicsContext3DImpl();
573   virtual ~WebGraphicsContext3DImpl();
574
575   ::gpu::gles2::GLES2ImplementationErrorMessageCallback*
576       getErrorMessageCallback();
577   virtual void OnErrorMessage(const std::string& message, int id);
578
579   void setGLInterface(::gpu::gles2::GLES2Interface* gl) {
580     gl_ = gl;
581   }
582
583   bool initialized_;
584   bool initialize_failed_;
585
586   WebGraphicsContext3D::WebGraphicsContextLostCallback* context_lost_callback_;
587   WGC3Denum context_lost_reason_;
588
589   WebGraphicsContext3D::WebGraphicsErrorMessageCallback*
590       error_message_callback_;
591   scoped_ptr<WebGraphicsContext3DErrorMessageCallback>
592       client_error_message_callback_;
593
594   // Errors raised by synthesizeGLError().
595   std::vector<WGC3Denum> synthetic_errors_;
596
597   ::gpu::gles2::GLES2Interface* gl_;
598   bool lose_context_when_out_of_memory_;
599   uint32_t flush_id_;
600 };
601
602 }  // namespace gpu
603 }  // namespace webkit
604
605 #endif  // WEBKIT_COMMON_GPU_WEBGRAPHICSCONTEXT3D_IMPL_H_