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