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