blob: 293dd05699f508127b3e97a0b518f612278dd498 [file] [log] [blame]
[email protected]52dd2f842012-02-01 00:07:211// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]49861ff2011-01-11 19:50:402// 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_GPU_WEBGRAPHICSCONTEXT3D_IN_PROCESS_IMPL_H_
6#define WEBKIT_GPU_WEBGRAPHICSCONTEXT3D_IN_PROCESS_IMPL_H_
7
8#include <list>
9#include <set>
10
11#include "base/hash_tables.h"
[email protected]fbe20372011-06-01 01:46:3812#include "base/memory/ref_counted.h"
[email protected]49861ff2011-01-11 19:50:4013#include "third_party/angle/include/GLSLANG/ShaderLang.h"
[email protected]3034b6812011-12-03 00:00:1414#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebGraphicsContext3D.h"
15#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h"
[email protected]16e25212011-10-10 21:17:4216#include "ui/gfx/native_widget_types.h"
[email protected]49861ff2011-01-11 19:50:4017
18#if !defined(OS_MACOSX)
19#define FLIP_FRAMEBUFFER_VERTICALLY
20#endif
21namespace gfx {
22class GLContext;
[email protected]f62a5ab2011-05-23 20:34:1523class GLSurface;
[email protected]52ee7cf2011-10-15 22:52:0724class GLShareGroup;
[email protected]49861ff2011-01-11 19:50:4025}
26
[email protected]9cae4ee12011-01-27 18:06:5627using WebKit::WGC3Dchar;
28using WebKit::WGC3Denum;
29using WebKit::WGC3Dboolean;
30using WebKit::WGC3Dbitfield;
31using WebKit::WGC3Dint;
32using WebKit::WGC3Dsizei;
33using WebKit::WGC3Duint;
34using WebKit::WGC3Dfloat;
35using WebKit::WGC3Dclampf;
36using WebKit::WGC3Dintptr;
37using WebKit::WGC3Dsizeiptr;
[email protected]9cae4ee12011-01-27 18:06:5638
39using WebKit::WebGLId;
40
41using WebKit::WebString;
[email protected]9cae4ee12011-01-27 18:06:5642
43using WebKit::WebGraphicsContext3D;
44
[email protected]de06f682011-01-12 21:10:1645namespace webkit {
46namespace gpu {
[email protected]49861ff2011-01-11 19:50:4047
48// The default implementation of WebGL. In Chromium, using this class
49// requires the sandbox to be disabled, which is strongly discouraged.
50// It is provided for support of test_shell and any Chromium ports
51// where an in-renderer WebGL implementation would be helpful.
52
[email protected]9cae4ee12011-01-27 18:06:5653class WebGraphicsContext3DInProcessImpl : public WebGraphicsContext3D {
54 public:
[email protected]16e25212011-10-10 21:17:4255 // Creates a WebGraphicsContext3DInProcessImpl for a given window. If window
56 // is gfx::kNullPluginWindow, then it creates an offscreen context.
[email protected]52ee7cf2011-10-15 22:52:0757 // share_group is the group this context shares namespaces with. It's only
58 // used for window-bound countexts.
[email protected]56200f012012-02-03 23:13:5759 WebGraphicsContext3DInProcessImpl(gfx::GLSurface* surface,
60 gfx::GLContext* context,
61 bool render_directly_to_webview);
[email protected]9cae4ee12011-01-27 18:06:5662 virtual ~WebGraphicsContext3DInProcessImpl();
[email protected]56200f012012-02-03 23:13:5763 static WebGraphicsContext3DInProcessImpl* CreateForWebView(
64 WebGraphicsContext3D::Attributes attributes,
[email protected]56200f012012-02-03 23:13:5765 bool render_directly_to_webview);
66 static WebGraphicsContext3DInProcessImpl* CreateForWindow(
67 WebGraphicsContext3D::Attributes attributes,
68 gfx::AcceleratedWidget window,
69 gfx::GLShareGroup* share_group);
[email protected]9cae4ee12011-01-27 18:06:5670
71 //----------------------------------------------------------------------
72 // WebGraphicsContext3D methods
[email protected]9cae4ee12011-01-27 18:06:5673 virtual bool makeContextCurrent();
74
75 virtual int width();
76 virtual int height();
77
78 virtual bool isGLES2Compliant();
79
[email protected]9a5afa432011-07-22 18:16:3980 virtual bool setParentContext(WebGraphicsContext3D* parent_context);
81
[email protected]9cae4ee12011-01-27 18:06:5682 virtual void reshape(int width, int height);
83
84 virtual bool readBackFramebuffer(unsigned char* pixels, size_t bufferSize);
[email protected]c0c00462011-08-08 22:53:2385 virtual bool readBackFramebuffer(unsigned char* pixels, size_t buffer_size,
86 WebGLId framebuffer, int width, int height);
[email protected]9cae4ee12011-01-27 18:06:5687
88 virtual WebGLId getPlatformTextureId();
89 virtual void prepareTexture();
[email protected]1c75a3702011-11-11 14:15:2890 virtual void postSubBufferCHROMIUM(int x, int y, int width, int height);
[email protected]9cae4ee12011-01-27 18:06:5691
92 virtual void synthesizeGLError(WGC3Denum error);
93 virtual void* mapBufferSubDataCHROMIUM(WGC3Denum target, WGC3Dintptr offset,
94 WGC3Dsizeiptr size, WGC3Denum access);
95 virtual void unmapBufferSubDataCHROMIUM(const void*);
96 virtual void* mapTexSubImage2DCHROMIUM(
97 WGC3Denum target,
98 WGC3Dint level,
99 WGC3Dint xoffset,
100 WGC3Dint yoffset,
101 WGC3Dsizei width,
102 WGC3Dsizei height,
103 WGC3Denum format,
104 WGC3Denum type,
105 WGC3Denum access);
106 virtual void unmapTexSubImage2DCHROMIUM(const void*);
[email protected]55ebe2f2011-10-25 01:27:14107
108 virtual void setVisibilityCHROMIUM(bool visible);
109
[email protected]c53709012012-02-21 03:22:22110 virtual void setMemoryAllocationChangedCallbackCHROMIUM(
[email protected]251622e2012-03-23 16:17:40111 WebGraphicsMemoryAllocationChangedCallbackCHROMIUM* callback);
112
113 virtual void discardFramebufferEXT(WGC3Denum target,
114 WGC3Dsizei numAttachments,
115 const WGC3Denum* attachments);
116 virtual void ensureFramebufferCHROMIUM();
[email protected]c53709012012-02-21 03:22:22117
[email protected]9cae4ee12011-01-27 18:06:56118 virtual void copyTextureToParentTextureCHROMIUM(
119 WebGLId texture, WebGLId parentTexture);
120
[email protected]31fe0b62011-05-13 01:07:32121 virtual void rateLimitOffscreenContextCHROMIUM() { }
122
[email protected]9cae4ee12011-01-27 18:06:56123 virtual WebString getRequestableExtensionsCHROMIUM();
124 virtual void requestExtensionCHROMIUM(const char*);
125
126 virtual void blitFramebufferCHROMIUM(
127 WGC3Dint srcX0, WGC3Dint srcY0, WGC3Dint srcX1, WGC3Dint srcY1,
128 WGC3Dint dstX0, WGC3Dint dstY0, WGC3Dint dstX1, WGC3Dint dstY1,
129 WGC3Dbitfield mask, WGC3Denum filter);
130 virtual void renderbufferStorageMultisampleCHROMIUM(
131 WGC3Denum target, WGC3Dsizei samples, WGC3Denum internalformat,
132 WGC3Dsizei width, WGC3Dsizei height);
133
134 virtual void activeTexture(WGC3Denum texture);
135 virtual void attachShader(WebGLId program, WebGLId shader);
136 virtual void bindAttribLocation(
137 WebGLId program, WGC3Duint index, const WGC3Dchar* name);
138 virtual void bindBuffer(WGC3Denum target, WebGLId buffer);
139 virtual void bindFramebuffer(WGC3Denum target, WebGLId framebuffer);
140 virtual void bindRenderbuffer(
141 WGC3Denum target, WebGLId renderbuffer);
142 virtual void bindTexture(WGC3Denum target, WebGLId texture);
143 virtual void blendColor(
144 WGC3Dclampf red, WGC3Dclampf green, WGC3Dclampf blue, WGC3Dclampf alpha);
145 virtual void blendEquation(WGC3Denum mode);
146 virtual void blendEquationSeparate(WGC3Denum modeRGB, WGC3Denum modeAlpha);
147 virtual void blendFunc(WGC3Denum sfactor, WGC3Denum dfactor);
148 virtual void blendFuncSeparate(WGC3Denum srcRGB, WGC3Denum dstRGB,
149 WGC3Denum srcAlpha, WGC3Denum dstAlpha);
150
151 virtual void bufferData(
152 WGC3Denum target, WGC3Dsizeiptr size, const void* data, WGC3Denum usage);
153 virtual void bufferSubData(WGC3Denum target, WGC3Dintptr offset,
154 WGC3Dsizeiptr size, const void* data);
155
156 virtual WGC3Denum checkFramebufferStatus(WGC3Denum target);
157 virtual void clear(WGC3Dbitfield mask);
158 virtual void clearColor(
159 WGC3Dclampf red, WGC3Dclampf green, WGC3Dclampf blue, WGC3Dclampf alpha);
160 virtual void clearDepth(WGC3Dclampf depth);
161 virtual void clearStencil(WGC3Dint s);
162 virtual void colorMask(WGC3Dboolean red, WGC3Dboolean green,
163 WGC3Dboolean blue, WGC3Dboolean alpha);
164 virtual void compileShader(WebGLId shader);
165
[email protected]c02a52e2011-11-11 02:47:48166 virtual void compressedTexImage2D(
167 WGC3Denum target,
168 WGC3Dint level,
169 WGC3Denum internalformat,
170 WGC3Dsizei width,
171 WGC3Dsizei height,
172 WGC3Dint border,
173 WGC3Dsizei imageSize,
174 const void* data);
175 virtual void compressedTexSubImage2D(
176 WGC3Denum target,
177 WGC3Dint level,
178 WGC3Dint xoffset,
179 WGC3Dint yoffset,
180 WGC3Dsizei width,
181 WGC3Dsizei height,
182 WGC3Denum format,
183 WGC3Dsizei imageSize,
184 const void* data);
[email protected]9cae4ee12011-01-27 18:06:56185 virtual void copyTexImage2D(
186 WGC3Denum target,
187 WGC3Dint level,
188 WGC3Denum internalformat,
189 WGC3Dint x,
190 WGC3Dint y,
191 WGC3Dsizei width,
192 WGC3Dsizei height,
193 WGC3Dint border);
194 virtual void copyTexSubImage2D(
195 WGC3Denum target,
196 WGC3Dint level,
197 WGC3Dint xoffset,
198 WGC3Dint yoffset,
199 WGC3Dint x,
200 WGC3Dint y,
201 WGC3Dsizei width,
202 WGC3Dsizei height);
203 virtual void cullFace(WGC3Denum mode);
204 virtual void depthFunc(WGC3Denum func);
205 virtual void depthMask(WGC3Dboolean flag);
206 virtual void depthRange(WGC3Dclampf zNear, WGC3Dclampf zFar);
207 virtual void detachShader(WebGLId program, WebGLId shader);
208 virtual void disable(WGC3Denum cap);
209 virtual void disableVertexAttribArray(WGC3Duint index);
210 virtual void drawArrays(WGC3Denum mode, WGC3Dint first, WGC3Dsizei count);
211 virtual void drawElements(
212 WGC3Denum mode,
213 WGC3Dsizei count,
214 WGC3Denum type,
215 WGC3Dintptr offset);
216
217 virtual void enable(WGC3Denum cap);
218 virtual void enableVertexAttribArray(WGC3Duint index);
219 virtual void finish();
220 virtual void flush();
221 virtual void framebufferRenderbuffer(
222 WGC3Denum target,
223 WGC3Denum attachment,
224 WGC3Denum renderbuffertarget,
225 WebGLId renderbuffer);
226 virtual void framebufferTexture2D(
227 WGC3Denum target,
228 WGC3Denum attachment,
229 WGC3Denum textarget,
230 WebGLId texture,
231 WGC3Dint level);
232 virtual void frontFace(WGC3Denum mode);
233 virtual void generateMipmap(WGC3Denum target);
234
235 virtual bool getActiveAttrib(WebGLId program, WGC3Duint index, ActiveInfo&);
236 virtual bool getActiveUniform(WebGLId program, WGC3Duint index, ActiveInfo&);
237
238 virtual void getAttachedShaders(WebGLId program, WGC3Dsizei maxCount,
239 WGC3Dsizei* count, WebGLId* shaders);
240
241 virtual WGC3Dint getAttribLocation(WebGLId program, const WGC3Dchar* name);
242
243 virtual void getBooleanv(WGC3Denum pname, WGC3Dboolean* value);
244
245 virtual void getBufferParameteriv(
246 WGC3Denum target, WGC3Denum pname, WGC3Dint* value);
247
248 virtual Attributes getContextAttributes();
249
250 virtual WGC3Denum getError();
251
252 virtual bool isContextLost();
253
254 virtual void getFloatv(WGC3Denum pname, WGC3Dfloat* value);
255
256 virtual void getFramebufferAttachmentParameteriv(
257 WGC3Denum target,
258 WGC3Denum attachment,
259 WGC3Denum pname,
260 WGC3Dint* value);
261
262 virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value);
263
264 virtual void getProgramiv(
265 WebGLId program, WGC3Denum pname, WGC3Dint* value);
266
267 virtual WebString getProgramInfoLog(WebGLId program);
268
269 virtual void getRenderbufferParameteriv(
270 WGC3Denum target, WGC3Denum pname, WGC3Dint* value);
271
272 virtual void getShaderiv(
273 WebGLId shader, WGC3Denum pname, WGC3Dint* value);
274
275 virtual WebString getShaderInfoLog(WebGLId shader);
276
[email protected]a6e59b1f2012-03-30 22:25:30277 virtual void getShaderPrecisionFormat(
278 WGC3Denum shadertype, WGC3Denum precisiontype,
279 WGC3Dint* range, WGC3Dint* precision);
[email protected]9cae4ee12011-01-27 18:06:56280
281 virtual WebString getShaderSource(WebGLId shader);
282 virtual WebString getString(WGC3Denum name);
283
284 virtual void getTexParameterfv(
285 WGC3Denum target, WGC3Denum pname, WGC3Dfloat* value);
286 virtual void getTexParameteriv(
287 WGC3Denum target, WGC3Denum pname, WGC3Dint* value);
288
289 virtual void getUniformfv(
290 WebGLId program, WGC3Dint location, WGC3Dfloat* value);
291 virtual void getUniformiv(
292 WebGLId program, WGC3Dint location, WGC3Dint* value);
293
294 virtual WGC3Dint getUniformLocation(WebGLId program, const WGC3Dchar* name);
295
296 virtual void getVertexAttribfv(
297 WGC3Duint index, WGC3Denum pname, WGC3Dfloat* value);
298 virtual void getVertexAttribiv(
299 WGC3Duint index, WGC3Denum pname, WGC3Dint* value);
300
301 virtual WGC3Dsizeiptr getVertexAttribOffset(
302 WGC3Duint index, WGC3Denum pname);
303
304 virtual void hint(WGC3Denum target, WGC3Denum mode);
305 virtual WGC3Dboolean isBuffer(WebGLId buffer);
306 virtual WGC3Dboolean isEnabled(WGC3Denum cap);
307 virtual WGC3Dboolean isFramebuffer(WebGLId framebuffer);
308 virtual WGC3Dboolean isProgram(WebGLId program);
309 virtual WGC3Dboolean isRenderbuffer(WebGLId renderbuffer);
310 virtual WGC3Dboolean isShader(WebGLId shader);
311 virtual WGC3Dboolean isTexture(WebGLId texture);
312 virtual void lineWidth(WGC3Dfloat width);
313 virtual void linkProgram(WebGLId program);
314 virtual void pixelStorei(WGC3Denum pname, WGC3Dint param);
315 virtual void polygonOffset(WGC3Dfloat factor, WGC3Dfloat units);
316
317 virtual void readPixels(
318 WGC3Dint x, WGC3Dint y,
319 WGC3Dsizei width, WGC3Dsizei height,
320 WGC3Denum format,
321 WGC3Denum type,
322 void* pixels);
323
324 virtual void releaseShaderCompiler();
325 virtual void renderbufferStorage(
326 WGC3Denum target,
327 WGC3Denum internalformat,
328 WGC3Dsizei width,
329 WGC3Dsizei height);
330 virtual void sampleCoverage(WGC3Dclampf value, WGC3Dboolean invert);
331 virtual void scissor(
332 WGC3Dint x, WGC3Dint y, WGC3Dsizei width, WGC3Dsizei height);
333 virtual void shaderSource(WebGLId shader, const WGC3Dchar* source);
334 virtual void stencilFunc(WGC3Denum func, WGC3Dint ref, WGC3Duint mask);
335 virtual void stencilFuncSeparate(
336 WGC3Denum face, WGC3Denum func, WGC3Dint ref, WGC3Duint mask);
337 virtual void stencilMask(WGC3Duint mask);
338 virtual void stencilMaskSeparate(WGC3Denum face, WGC3Duint mask);
339 virtual void stencilOp(WGC3Denum fail, WGC3Denum zfail, WGC3Denum zpass);
340 virtual void stencilOpSeparate(
341 WGC3Denum face,
342 WGC3Denum fail,
343 WGC3Denum zfail,
344 WGC3Denum zpass);
345
346 virtual void texImage2D(
347 WGC3Denum target,
348 WGC3Dint level,
349 WGC3Denum internalformat,
350 WGC3Dsizei width,
351 WGC3Dsizei height,
352 WGC3Dint border,
353 WGC3Denum format,
354 WGC3Denum type,
355 const void* pixels);
356
357 virtual void texParameterf(
358 WGC3Denum target, WGC3Denum pname, WGC3Dfloat param);
359 virtual void texParameteri(
360 WGC3Denum target, WGC3Denum pname, WGC3Dint param);
361
362 virtual void texSubImage2D(
363 WGC3Denum target,
364 WGC3Dint level,
365 WGC3Dint xoffset,
366 WGC3Dint yoffset,
367 WGC3Dsizei width,
368 WGC3Dsizei height,
369 WGC3Denum format,
370 WGC3Denum type,
371 const void* pixels);
372
373 virtual void uniform1f(WGC3Dint location, WGC3Dfloat x);
374 virtual void uniform1fv(WGC3Dint location, WGC3Dsizei count,
375 const WGC3Dfloat* v);
376 virtual void uniform1i(WGC3Dint location, WGC3Dint x);
377 virtual void uniform1iv(WGC3Dint location, WGC3Dsizei count,
378 const WGC3Dint* v);
379 virtual void uniform2f(WGC3Dint location, WGC3Dfloat x, WGC3Dfloat y);
380 virtual void uniform2fv(WGC3Dint location, WGC3Dsizei count,
381 const WGC3Dfloat* v);
382 virtual void uniform2i(WGC3Dint location, WGC3Dint x, WGC3Dint y);
383 virtual void uniform2iv(WGC3Dint location, WGC3Dsizei count,
384 const WGC3Dint* v);
385 virtual void uniform3f(WGC3Dint location,
386 WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z);
387 virtual void uniform3fv(WGC3Dint location, WGC3Dsizei count,
388 const WGC3Dfloat* v);
389 virtual void uniform3i(WGC3Dint location, WGC3Dint x, WGC3Dint y, WGC3Dint z);
390 virtual void uniform3iv(WGC3Dint location, WGC3Dsizei count,
391 const WGC3Dint* v);
392 virtual void uniform4f(WGC3Dint location, WGC3Dfloat x, WGC3Dfloat y,
393 WGC3Dfloat z, WGC3Dfloat w);
394 virtual void uniform4fv(WGC3Dint location, WGC3Dsizei count,
395 const WGC3Dfloat* v);
396 virtual void uniform4i(WGC3Dint location, WGC3Dint x, WGC3Dint y,
397 WGC3Dint z, WGC3Dint w);
398 virtual void uniform4iv(WGC3Dint location, WGC3Dsizei count,
399 const WGC3Dint* v);
400 virtual void uniformMatrix2fv(
401 WGC3Dint location, WGC3Dsizei count,
402 WGC3Dboolean transpose, const WGC3Dfloat* value);
403 virtual void uniformMatrix3fv(
404 WGC3Dint location, WGC3Dsizei count,
405 WGC3Dboolean transpose, const WGC3Dfloat* value);
406 virtual void uniformMatrix4fv(
407 WGC3Dint location, WGC3Dsizei count,
408 WGC3Dboolean transpose, const WGC3Dfloat* value);
409
410 virtual void useProgram(WebGLId program);
411 virtual void validateProgram(WebGLId program);
412
413 virtual void vertexAttrib1f(WGC3Duint index, WGC3Dfloat x);
414 virtual void vertexAttrib1fv(WGC3Duint index, const WGC3Dfloat* values);
415 virtual void vertexAttrib2f(WGC3Duint index, WGC3Dfloat x, WGC3Dfloat y);
416 virtual void vertexAttrib2fv(WGC3Duint index, const WGC3Dfloat* values);
417 virtual void vertexAttrib3f(
418 WGC3Duint index, WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z);
419 virtual void vertexAttrib3fv(WGC3Duint index, const WGC3Dfloat* values);
420 virtual void vertexAttrib4f(
421 WGC3Duint index, WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z, WGC3Dfloat w);
422 virtual void vertexAttrib4fv(WGC3Duint index, const WGC3Dfloat* values);
423 virtual void vertexAttribPointer(
424 WGC3Duint index,
425 WGC3Dint size,
426 WGC3Denum type,
427 WGC3Dboolean normalized,
428 WGC3Dsizei stride,
429 WGC3Dintptr offset);
430
431 virtual void viewport(
432 WGC3Dint x, WGC3Dint y, WGC3Dsizei width, WGC3Dsizei height);
433
434 // Support for buffer creation and deletion
435 virtual WebGLId createBuffer();
436 virtual WebGLId createFramebuffer();
437 virtual WebGLId createProgram();
438 virtual WebGLId createRenderbuffer();
439 virtual WebGLId createShader(WGC3Denum);
440 virtual WebGLId createTexture();
441
442 virtual void deleteBuffer(WebGLId);
443 virtual void deleteFramebuffer(WebGLId);
444 virtual void deleteProgram(WebGLId);
445 virtual void deleteRenderbuffer(WebGLId);
446 virtual void deleteShader(WebGLId);
447 virtual void deleteTexture(WebGLId);
448
[email protected]36681ea2011-02-02 20:17:18449 virtual void setContextLostCallback(
450 WebGraphicsContext3D::WebGraphicsContextLostCallback* callback) {}
[email protected]38d139d2011-07-14 00:38:43451 virtual WGC3Denum getGraphicsResetStatusARB();
[email protected]36681ea2011-02-02 20:17:18452
[email protected]d2b155a2011-08-02 06:14:33453 virtual void setSwapBuffersCompleteCallbackCHROMIUM(
454 WebGraphicsContext3D::
455 WebGraphicsSwapBuffersCompleteCallbackCHROMIUM* callback) {}
456
[email protected]e51bdf32011-11-23 22:21:46457 virtual void texImageIOSurface2DCHROMIUM(
458 WGC3Denum target, WGC3Dint width, WGC3Dint height,
459 WGC3Duint ioSurfaceId, WGC3Duint plane);
460
[email protected]97dc7cbe2011-12-06 17:26:17461 virtual void texStorage2DEXT(
462 WGC3Denum target, WGC3Dint levels, WGC3Duint internalformat,
463 WGC3Dint width, WGC3Dint height);
464
[email protected]1097c3a12012-03-14 16:58:28465 virtual WebGLId createQueryEXT();
466 virtual void deleteQueryEXT(WebGLId query);
467 virtual WGC3Dboolean isQueryEXT(WebGLId query);
468 virtual void beginQueryEXT(WGC3Denum target, WebGLId query);
469 virtual void endQueryEXT(WGC3Denum target);
470 virtual void getQueryivEXT(
471 WGC3Denum target, WGC3Denum pname, WGC3Dint* params);
472 virtual void getQueryObjectuivEXT(
473 WebGLId query, WGC3Denum pname, WGC3Duint* params);
474
[email protected]6c75c712012-06-19 15:43:17475 virtual void copyTextureCHROMIUM(WGC3Denum target, WGC3Duint source_id,
476 WGC3Duint dest_id, WGC3Dint level,
[email protected]d191b132012-05-09 15:41:51477 WGC3Denum internal_format);
[email protected]8acca582012-07-02 20:18:10478 virtual void bindUniformLocationCHROMIUM(WebGLId program, WGC3Dint location,
479 const WGC3Dchar* uniform);
[email protected]0a1e9ad2012-05-04 21:13:03480
[email protected]a8e7f25a2012-07-23 22:30:03481 // CHROMIUM_shallow_flush
482 // Only applies to contexts that use the command buffer.
483 virtual void shallowFlushCHROMIUM() { }
484
[email protected]29214d312011-09-06 14:12:28485 protected:
[email protected]29214d312011-09-06 14:12:28486 virtual GrGLInterface* onCreateGrGLInterface();
[email protected]16200732011-08-29 16:40:46487
[email protected]9cae4ee12011-01-27 18:06:56488 private:
[email protected]56200f012012-02-03 23:13:57489 bool Initialize(Attributes attributes);
490
[email protected]9cae4ee12011-01-27 18:06:56491 // ANGLE related.
[email protected]09fb3872011-02-02 01:16:46492 struct ShaderSourceEntry;
[email protected]9cae4ee12011-01-27 18:06:56493
494 typedef base::hash_map<WebGLId, ShaderSourceEntry*> ShaderSourceMap;
495
[email protected]16e25212011-10-10 21:17:42496 bool AllocateOffscreenFrameBuffer(int width, int height);
497 void ClearRenderTarget();
498
[email protected]9cae4ee12011-01-27 18:06:56499#ifdef FLIP_FRAMEBUFFER_VERTICALLY
500 void FlipVertically(unsigned char* framebuffer,
501 unsigned int width,
502 unsigned int height);
503#endif
504
505 // Take into account the user's requested context creation attributes, in
506 // particular stencil and antialias, and determine which could or could
507 // not be honored based on the capabilities of the OpenGL implementation.
508 void ValidateAttributes();
509
510 // Resolve the given rectangle of the multisampled framebuffer if necessary.
511 void ResolveMultisampledFramebuffer(
512 WGC3Dint x, WGC3Dint y, WGC3Dsizei width, WGC3Dsizei height);
513
514 bool AngleCreateCompilers();
515 void AngleDestroyCompilers();
516 bool AngleValidateShaderSource(ShaderSourceEntry* entry);
517
518 WebGraphicsContext3D::Attributes attributes_;
519 bool initialized_;
520 bool render_directly_to_web_view_;
521 bool is_gles2_;
522 bool have_ext_framebuffer_object_;
523 bool have_ext_framebuffer_multisample_;
524 bool have_angle_framebuffer_multisample_;
525
526 WebGLId texture_;
527 WebGLId fbo_;
528 WebGLId depth_stencil_buffer_;
529 int cached_width_, cached_height_;
530
531 // For multisampling
532 WebGLId multisample_fbo_;
533 WebGLId multisample_depth_stencil_buffer_;
534 WebGLId multisample_color_buffer_;
535
536 // For tracking which FBO is bound
537 WebGLId bound_fbo_;
538
539 // For tracking which texture is bound
540 WebGLId bound_texture_;
541
[email protected]9cae4ee12011-01-27 18:06:56542#ifdef FLIP_FRAMEBUFFER_VERTICALLY
543 unsigned char* scanline_;
544#endif
545
546 // Errors raised by synthesizeGLError().
547 std::list<WGC3Denum> synthetic_errors_list_;
548 std::set<WGC3Denum> synthetic_errors_set_;
549
[email protected]fbe20372011-06-01 01:46:38550 scoped_refptr<gfx::GLContext> gl_context_;
551 scoped_refptr<gfx::GLSurface> gl_surface_;
[email protected]9cae4ee12011-01-27 18:06:56552
553 ShaderSourceMap shader_source_map_;
554
555 ShHandle fragment_compiler_;
556 ShHandle vertex_compiler_;
557};
558
[email protected]de06f682011-01-12 21:10:16559} // namespace gpu
560} // namespace webkit
[email protected]49861ff2011-01-11 19:50:40561
562#endif // WEBKIT_GPU_WEBGRAPHICSCONTEXT3D_IN_PROCESS_IMPL_H_