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