Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(231)

Side by Side Diff: chrome/renderer/webgraphicscontext3d_command_buffer_impl.h

Issue 6350016: Refactor WebGraphicsContext3D to use WGC3D types which match corresponding GL... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: This is the ugly but safe and correct way Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_RENDERER_WEBGRAPHICSCONTEXT3D_COMMAND_BUFFER_IMPL_H_ 5 #ifndef CHROME_RENDERER_WEBGRAPHICSCONTEXT3D_COMMAND_BUFFER_IMPL_H_
6 #define CHROME_RENDERER_WEBGRAPHICSCONTEXT3D_COMMAND_BUFFER_IMPL_H_ 6 #define CHROME_RENDERER_WEBGRAPHICSCONTEXT3D_COMMAND_BUFFER_IMPL_H_
7 #pragma once 7 #pragma once
8 8
9 #if defined(ENABLE_GPU) 9 #if defined(ENABLE_GPU)
10 10
(...skipping 12 matching lines...) Expand all
23 23
24 class GpuChannelHost; 24 class GpuChannelHost;
25 class CommandBufferProxy; 25 class CommandBufferProxy;
26 26
27 namespace gpu { 27 namespace gpu {
28 namespace gles2 { 28 namespace gles2 {
29 class GLES2Implementation; 29 class GLES2Implementation;
30 } 30 }
31 } 31 }
32 32
33 using WebKit::WGC3Dchar;
34 using WebKit::WGC3Denum;
35 using WebKit::WGC3Dboolean;
36 using WebKit::WGC3Dbitfield;
37 using WebKit::WGC3Dint;
38 using WebKit::WGC3Dsizei;
39 using WebKit::WGC3Duint;
40 using WebKit::WGC3Dfloat;
41 using WebKit::WGC3Dclampf;
42 using WebKit::WGC3Dintptr;
43 using WebKit::WGC3Dsizeiptr;
Ken Russell (switch to Gerrit) 2011/01/26 23:58:02 I think this block should go inside the #if define
33 using WebKit::WebGLId; 44 using WebKit::WebGLId;
34 45
46 #if defined(USE_WGC3D_TYPES)
47
35 class WebGraphicsContext3DCommandBufferImpl 48 class WebGraphicsContext3DCommandBufferImpl
36 : public WebKit::WebGraphicsContext3D { 49 : public WebKit::WebGraphicsContext3D {
37 public: 50 public:
38 51
39 WebGraphicsContext3DCommandBufferImpl(); 52 WebGraphicsContext3DCommandBufferImpl();
40 virtual ~WebGraphicsContext3DCommandBufferImpl(); 53 virtual ~WebGraphicsContext3DCommandBufferImpl();
41 54
42 //---------------------------------------------------------------------- 55 //----------------------------------------------------------------------
43 // WebGraphicsContext3D methods 56 // WebGraphicsContext3D methods
44 virtual bool initialize(WebGraphicsContext3D::Attributes attributes, 57 virtual bool initialize(WebGraphicsContext3D::Attributes attributes,
45 WebKit::WebView*, 58 WebKit::WebView*,
46 bool renderDirectlyToWebView); 59 bool renderDirectlyToWebView);
47 60
48 virtual bool makeContextCurrent(); 61 virtual bool makeContextCurrent();
49 62
50 virtual int width(); 63 virtual int width();
51 virtual int height(); 64 virtual int height();
52 65
66 virtual bool isGLES2Compliant();
67
68 virtual void reshape(int width, int height);
69
70 virtual bool readBackFramebuffer(unsigned char* pixels, size_t buffer_size);
71
72 virtual WebGLId getPlatformTextureId();
73 virtual void prepareTexture();
74
75 virtual void activeTexture(WGC3Denum texture);
76 virtual void attachShader(WebGLId program, WebGLId shader);
77 virtual void bindAttribLocation(WebGLId program, WGC3Duint index,
78 const WGC3Dchar* name);
79 virtual void bindBuffer(WGC3Denum target, WebGLId buffer);
80 virtual void bindFramebuffer(WGC3Denum target, WebGLId framebuffer);
81 virtual void bindRenderbuffer(WGC3Denum target, WebGLId renderbuffer);
82 virtual void bindTexture(WGC3Denum target, WebGLId texture);
83 virtual void blendColor(WGC3Dclampf red, WGC3Dclampf green,
84 WGC3Dclampf blue, WGC3Dclampf alpha);
85 virtual void blendEquation(WGC3Denum mode);
86 virtual void blendEquationSeparate(WGC3Denum modeRGB,
87 WGC3Denum modeAlpha);
88 virtual void blendFunc(WGC3Denum sfactor, WGC3Denum dfactor);
89 virtual void blendFuncSeparate(WGC3Denum srcRGB,
90 WGC3Denum dstRGB,
91 WGC3Denum srcAlpha,
92 WGC3Denum dstAlpha);
93
94 virtual void bufferData(WGC3Denum target, WGC3Dsizeiptr size,
95 const void* data, WGC3Denum usage);
96 virtual void bufferSubData(WGC3Denum target, WGC3Dintptr offset,
97 WGC3Dsizeiptr size, const void* data);
98
99 virtual WGC3Denum checkFramebufferStatus(WGC3Denum target);
100 virtual void clear(WGC3Dbitfield mask);
101 virtual void clearColor(WGC3Dclampf red, WGC3Dclampf green,
102 WGC3Dclampf blue, WGC3Dclampf alpha);
103 virtual void clearDepth(WGC3Dclampf depth);
104 virtual void clearStencil(WGC3Dint s);
105 virtual void colorMask(WGC3Dboolean red, WGC3Dboolean green,
106 WGC3Dboolean blue, WGC3Dboolean alpha);
107 virtual void compileShader(WebGLId shader);
108
109 virtual void copyTexImage2D(WGC3Denum target,
110 WGC3Dint level,
111 WGC3Denum internalformat,
112 WGC3Dint x,
113 WGC3Dint y,
114 WGC3Dsizei width,
115 WGC3Dsizei height,
116 WGC3Dint border);
117 virtual void copyTexSubImage2D(WGC3Denum target,
118 WGC3Dint level,
119 WGC3Dint xoffset,
120 WGC3Dint yoffset,
121 WGC3Dint x,
122 WGC3Dint y,
123 WGC3Dsizei width,
124 WGC3Dsizei height);
125 virtual void cullFace(WGC3Denum mode);
126 virtual void depthFunc(WGC3Denum func);
127 virtual void depthMask(WGC3Dboolean flag);
128 virtual void depthRange(WGC3Dclampf zNear, WGC3Dclampf zFar);
129 virtual void detachShader(WebGLId program, WebGLId shader);
130 virtual void disable(WGC3Denum cap);
131 virtual void disableVertexAttribArray(WGC3Duint index);
132 virtual void drawArrays(WGC3Denum mode, WGC3Dint first, WGC3Dsizei count);
133 virtual void drawElements(WGC3Denum mode,
134 WGC3Dsizei count,
135 WGC3Denum type,
136 WGC3Dintptr offset);
137
138 virtual void enable(WGC3Denum cap);
139 virtual void enableVertexAttribArray(WGC3Duint index);
140 virtual void finish();
141 virtual void flush();
142 virtual void framebufferRenderbuffer(WGC3Denum target,
143 WGC3Denum attachment,
144 WGC3Denum renderbuffertarget,
145 WebGLId renderbuffer);
146 virtual void framebufferTexture2D(WGC3Denum target,
147 WGC3Denum attachment,
148 WGC3Denum textarget,
149 WebGLId texture,
150 WGC3Dint level);
151 virtual void frontFace(WGC3Denum mode);
152 virtual void generateMipmap(WGC3Denum target);
153
154 virtual bool getActiveAttrib(WebGLId program,
155 WGC3Duint index,
156 ActiveInfo&);
157 virtual bool getActiveUniform(WebGLId program,
158 WGC3Duint index,
159 ActiveInfo&);
160
161 virtual void getAttachedShaders(WebGLId program,
162 WGC3Dsizei maxCount,
163 WGC3Dsizei* count,
164 WebGLId* shaders);
165
166 virtual WGC3Dint getAttribLocation(WebGLId program, const WGC3Dchar* name);
167
168 virtual void getBooleanv(WGC3Denum pname, WGC3Dboolean* value);
169
170 virtual void getBufferParameteriv(WGC3Denum target,
171 WGC3Denum pname,
172 WGC3Dint* value);
173
174 virtual Attributes getContextAttributes();
175
176 virtual WGC3Denum getError();
177
178 virtual bool isContextLost();
179
180 virtual void getFloatv(WGC3Denum pname, WGC3Dfloat* value);
181
182 virtual void getFramebufferAttachmentParameteriv(WGC3Denum target,
183 WGC3Denum attachment,
184 WGC3Denum pname,
185 WGC3Dint* value);
186
187 virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value);
188
189 virtual void getProgramiv(WebGLId program, WGC3Denum pname, WGC3Dint* value);
190
191 virtual WebKit::WebString getProgramInfoLog(WebGLId program);
192
193 virtual void getRenderbufferParameteriv(WGC3Denum target,
194 WGC3Denum pname,
195 WGC3Dint* value);
196
197 virtual void getShaderiv(WebGLId shader, WGC3Denum pname, WGC3Dint* value);
198
199 virtual WebKit::WebString getShaderInfoLog(WebGLId shader);
200
201 // TBD
202 // void glGetShaderPrecisionFormat (GLenum shadertype,
203 // GLenum precisiontype,
204 // GLint* range,
205 // GLint* precision);
206
207 virtual WebKit::WebString getShaderSource(WebGLId shader);
208 virtual WebKit::WebString getString(WGC3Denum name);
209
210 virtual void getTexParameterfv(WGC3Denum target,
211 WGC3Denum pname,
212 WGC3Dfloat* value);
213 virtual void getTexParameteriv(WGC3Denum target,
214 WGC3Denum pname,
215 WGC3Dint* value);
216
217 virtual void getUniformfv(WebGLId program,
218 WGC3Dint location,
219 WGC3Dfloat* value);
220 virtual void getUniformiv(WebGLId program,
221 WGC3Dint location,
222 WGC3Dint* value);
223
224 virtual WGC3Dint getUniformLocation(WebGLId program, const WGC3Dchar* name);
225
226 virtual void getVertexAttribfv(WGC3Duint index, WGC3Denum pname,
227 WGC3Dfloat* value);
228 virtual void getVertexAttribiv(WGC3Duint index, WGC3Denum pname,
229 WGC3Dint* value);
230
231 virtual WGC3Dsizeiptr getVertexAttribOffset(WGC3Duint index, WGC3Denum pname);
232
233 virtual void hint(WGC3Denum target, WGC3Denum mode);
234 virtual WGC3Dboolean isBuffer(WebGLId buffer);
235 virtual WGC3Dboolean isEnabled(WGC3Denum cap);
236 virtual WGC3Dboolean isFramebuffer(WebGLId framebuffer);
237 virtual WGC3Dboolean isProgram(WebGLId program);
238 virtual WGC3Dboolean isRenderbuffer(WebGLId renderbuffer);
239 virtual WGC3Dboolean isShader(WebGLId shader);
240 virtual WGC3Dboolean isTexture(WebGLId texture);
241 virtual void lineWidth(WGC3Dfloat);
242 virtual void linkProgram(WebGLId program);
243 virtual void pixelStorei(WGC3Denum pname, WGC3Dint param);
244 virtual void polygonOffset(WGC3Dfloat factor, WGC3Dfloat units);
245
246 virtual void readPixels(WGC3Dint x,
247 WGC3Dint y,
248 WGC3Dsizei width,
249 WGC3Dsizei height,
250 WGC3Denum format,
251 WGC3Denum type,
252 void* pixels);
253
254 virtual void releaseShaderCompiler();
255 virtual void renderbufferStorage(WGC3Denum target,
256 WGC3Denum internalformat,
257 WGC3Dsizei width,
258 WGC3Dsizei height);
259 virtual void sampleCoverage(WGC3Dfloat value, WGC3Dboolean invert);
260 virtual void scissor(WGC3Dint x, WGC3Dint y,
261 WGC3Dsizei width, WGC3Dsizei height);
262 virtual void shaderSource(WebGLId shader, const WGC3Dchar* string);
263 virtual void stencilFunc(WGC3Denum func, WGC3Dint ref, WGC3Duint mask);
264 virtual void stencilFuncSeparate(WGC3Denum face,
265 WGC3Denum func,
266 WGC3Dint ref,
267 WGC3Duint mask);
268 virtual void stencilMask(WGC3Duint mask);
269 virtual void stencilMaskSeparate(WGC3Denum face, WGC3Duint mask);
270 virtual void stencilOp(WGC3Denum fail,
271 WGC3Denum zfail,
272 WGC3Denum zpass);
273 virtual void stencilOpSeparate(WGC3Denum face,
274 WGC3Denum fail,
275 WGC3Denum zfail,
276 WGC3Denum zpass);
277
278 virtual void texImage2D(WGC3Denum target,
279 WGC3Dint level,
280 WGC3Denum internalformat,
281 WGC3Dsizei width,
282 WGC3Dsizei height,
283 WGC3Dint border,
284 WGC3Denum format,
285 WGC3Denum type,
286 const void* pixels);
287
288 virtual void texParameterf(WGC3Denum target,
289 WGC3Denum pname,
290 WGC3Dfloat param);
291 virtual void texParameteri(WGC3Denum target,
292 WGC3Denum pname,
293 WGC3Dint param);
294
295 virtual void texSubImage2D(WGC3Denum target,
296 WGC3Dint level,
297 WGC3Dint xoffset,
298 WGC3Dint yoffset,
299 WGC3Dsizei width,
300 WGC3Dsizei height,
301 WGC3Denum format,
302 WGC3Denum type,
303 const void* pixels);
304
305 virtual void uniform1f(WGC3Dint location, WGC3Dfloat x);
306 virtual void uniform1fv(WGC3Dint location,
307 WGC3Dsizei count, const WGC3Dfloat* v);
308 virtual void uniform1i(WGC3Dint location, WGC3Dint x);
309 virtual void uniform1iv(WGC3Dint location,
310 WGC3Dsizei count, const WGC3Dint* v);
311 virtual void uniform2f(WGC3Dint location, WGC3Dfloat x, WGC3Dfloat y);
312 virtual void uniform2fv(WGC3Dint location,
313 WGC3Dsizei count, const WGC3Dfloat* v);
314 virtual void uniform2i(WGC3Dint location, WGC3Dint x, WGC3Dint y);
315 virtual void uniform2iv(WGC3Dint location,
316 WGC3Dsizei count, const WGC3Dint* v);
317 virtual void uniform3f(WGC3Dint location,
318 WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z);
319 virtual void uniform3fv(WGC3Dint location,
320 WGC3Dsizei count, const WGC3Dfloat* v);
321 virtual void uniform3i(WGC3Dint location,
322 WGC3Dint x, WGC3Dint y, WGC3Dint z);
323 virtual void uniform3iv(WGC3Dint location,
324 WGC3Dsizei count, const WGC3Dint* v);
325 virtual void uniform4f(WGC3Dint location,
326 WGC3Dfloat x, WGC3Dfloat y,
327 WGC3Dfloat z, WGC3Dfloat w);
328 virtual void uniform4fv(WGC3Dint location,
329 WGC3Dsizei count, const WGC3Dfloat* v);
330 virtual void uniform4i(WGC3Dint location,
331 WGC3Dint x, WGC3Dint y, WGC3Dint z, WGC3Dint w);
332 virtual void uniform4iv(WGC3Dint location,
333 WGC3Dsizei count, const WGC3Dint* v);
334 virtual void uniformMatrix2fv(WGC3Dint location,
335 WGC3Dsizei count,
336 WGC3Dboolean transpose,
337 const WGC3Dfloat* value);
338 virtual void uniformMatrix3fv(WGC3Dint location,
339 WGC3Dsizei count,
340 WGC3Dboolean transpose,
341 const WGC3Dfloat* value);
342 virtual void uniformMatrix4fv(WGC3Dint location,
343 WGC3Dsizei count,
344 WGC3Dboolean transpose,
345 const WGC3Dfloat* value);
346
347 virtual void useProgram(WebGLId program);
348 virtual void validateProgram(WebGLId program);
349
350 virtual void vertexAttrib1f(WGC3Duint index, WGC3Dfloat x);
351 virtual void vertexAttrib1fv(WGC3Duint index, const WGC3Dfloat* values);
352 virtual void vertexAttrib2f(WGC3Duint index, WGC3Dfloat x, WGC3Dfloat y);
353 virtual void vertexAttrib2fv(WGC3Duint index, const WGC3Dfloat* values);
354 virtual void vertexAttrib3f(WGC3Duint index,
355 WGC3Dfloat x, WGC3Dfloat y, WGC3Dfloat z);
356 virtual void vertexAttrib3fv(WGC3Duint index, const WGC3Dfloat* values);
357 virtual void vertexAttrib4f(WGC3Duint index,
358 WGC3Dfloat x, WGC3Dfloat y,
359 WGC3Dfloat z, WGC3Dfloat w);
360 virtual void vertexAttrib4fv(WGC3Duint index, const WGC3Dfloat* values);
361 virtual void vertexAttribPointer(WGC3Duint index,
362 WGC3Dint size,
363 WGC3Denum type,
364 WGC3Dboolean normalized,
365 WGC3Dsizei stride,
366 WGC3Dintptr offset);
367
368 virtual void viewport(WGC3Dint x, WGC3Dint y,
369 WGC3Dsizei width, WGC3Dsizei height);
370
371 // Support for buffer creation and deletion
372 virtual WebGLId createBuffer();
373 virtual WebGLId createFramebuffer();
374 virtual WebGLId createProgram();
375 virtual WebGLId createRenderbuffer();
376 virtual WebGLId createShader(WGC3Denum);
377 virtual WebGLId createTexture();
378
379 virtual void deleteBuffer(WebGLId);
380 virtual void deleteFramebuffer(WebGLId);
381 virtual void deleteProgram(WebGLId);
382 virtual void deleteRenderbuffer(WebGLId);
383 virtual void deleteShader(WebGLId);
384 virtual void deleteTexture(WebGLId);
385
386 virtual void synthesizeGLError(WGC3Denum);
387
388 virtual void* mapBufferSubDataCHROMIUM(
389 WGC3Denum target, WGC3Dintptr offset,
390 WGC3Dsizeiptr size, WGC3Denum access);
391 virtual void unmapBufferSubDataCHROMIUM(const void*);
392 virtual void* mapTexSubImage2DCHROMIUM(
393 WGC3Denum target,
394 WGC3Dint level,
395 WGC3Dint xoffset,
396 WGC3Dint yoffset,
397 WGC3Dsizei width,
398 WGC3Dsizei height,
399 WGC3Denum format,
400 WGC3Denum type,
401 WGC3Denum access);
402 virtual void unmapTexSubImage2DCHROMIUM(const void*);
403
404 virtual void copyTextureToParentTextureCHROMIUM(
405 WebGLId texture, WebGLId parentTexture);
406
407 virtual WebKit::WebString getRequestableExtensionsCHROMIUM();
408 virtual void requestExtensionCHROMIUM(const char*);
409
410 virtual WebGLId createCompositorTexture(WGC3Dsizei width, WGC3Dsizei height);
411 virtual void deleteCompositorTexture(WebGLId parent_texture);
412 virtual void copyTextureToCompositor(WebGLId texture,
413 WebGLId parent_texture);
414
415 ggl::Context* context() { return context_; }
416
417 private:
418 // SwapBuffers callback;
419 void OnSwapBuffers();
420
421 // The GGL context we use for OpenGL rendering.
422 ggl::Context* context_;
423 // If rendering directly to WebView, weak pointer to it.
424 WebKit::WebView* web_view_;
425 #if defined(OS_MACOSX)
426 // "Fake" plugin window handle in browser process for the compositor's output.
427 gfx::PluginWindowHandle plugin_handle_;
428 #endif
429
430 WebKit::WebGraphicsContext3D::Attributes attributes_;
431 int cached_width_, cached_height_;
432
433 // For tracking which FBO is bound.
434 WebGLId bound_fbo_;
435
436 // Errors raised by synthesizeGLError().
437 std::vector<WGC3Denum> synthetic_errors_;
438
439 #ifdef FLIP_FRAMEBUFFER_VERTICALLY
440 scoped_ptr<uint8> scanline_;
441 void FlipVertically(uint8* framebuffer,
442 unsigned int width,
443 unsigned int height);
444 #endif
445 };
446
447 #else // USE_WGC3D_TYPES
448
449 class WebGraphicsContext3DCommandBufferImpl
450 : public WebKit::WebGraphicsContext3D {
451 public:
452
453 WebGraphicsContext3DCommandBufferImpl();
454 virtual ~WebGraphicsContext3DCommandBufferImpl();
455
456 //----------------------------------------------------------------------
457 // WebGraphicsContext3D methods
458 virtual bool initialize(WebGraphicsContext3D::Attributes attributes,
459 WebKit::WebView*,
460 bool renderDirectlyToWebView);
461
462 virtual bool makeContextCurrent();
463
464 virtual int width();
465 virtual int height();
466
53 virtual int sizeInBytes(int type); 467 virtual int sizeInBytes(int type);
54 468
55 virtual bool isGLES2Compliant(); 469 virtual bool isGLES2Compliant();
56 virtual bool isGLES2NPOTStrict(); 470 virtual bool isGLES2NPOTStrict();
57 virtual bool isErrorGeneratedOnOutOfBoundsAccesses(); 471 virtual bool isErrorGeneratedOnOutOfBoundsAccesses();
58 472
59 virtual void reshape(int width, int height); 473 virtual void reshape(int width, int height);
60 474
61 virtual bool readBackFramebuffer(unsigned char* pixels, size_t buffer_size); 475 virtual bool readBackFramebuffer(unsigned char* pixels, size_t buffer_size);
62 476
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 std::vector<unsigned long> synthetic_errors_; 808 std::vector<unsigned long> synthetic_errors_;
395 809
396 #ifdef FLIP_FRAMEBUFFER_VERTICALLY 810 #ifdef FLIP_FRAMEBUFFER_VERTICALLY
397 scoped_ptr<uint8> scanline_; 811 scoped_ptr<uint8> scanline_;
398 void FlipVertically(uint8* framebuffer, 812 void FlipVertically(uint8* framebuffer,
399 unsigned int width, 813 unsigned int width,
400 unsigned int height); 814 unsigned int height);
401 #endif 815 #endif
402 }; 816 };
403 817
818 #endif // USE_WGC3D_TYPES
819
404 #endif // defined(ENABLE_GPU) 820 #endif // defined(ENABLE_GPU)
405 #endif // CHROME_RENDERER_WEBGRAPHICSCONTEXT3D_COMMAND_BUFFER_IMPL_H_ 821 #endif // CHROME_RENDERER_WEBGRAPHICSCONTEXT3D_COMMAND_BUFFER_IMPL_H_
406 822
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698