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