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

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

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

Powered by Google App Engine
This is Rietveld 408576698