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