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_ 612