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