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