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

Side by Side Diff: Source/platform/graphics/gpu/DrawingBuffer.cpp

Issue 127163003: Completely removed the Extensions3D class (Take 2) (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase Created 6 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 /* 1 /*
2 * Copyright (c) 2010, Google Inc. All rights reserved. 2 * Copyright (c) 2010, Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 16 matching lines...) Expand all
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "config.h" 31 #include "config.h"
32 32
33 #include "platform/graphics/gpu/DrawingBuffer.h" 33 #include "platform/graphics/gpu/DrawingBuffer.h"
34 34
35 #include <algorithm> 35 #include <algorithm>
36 #include "platform/TraceEvent.h" 36 #include "platform/TraceEvent.h"
37 #include "platform/graphics/Extensions3D.h"
38 #include "platform/graphics/GraphicsLayer.h" 37 #include "platform/graphics/GraphicsLayer.h"
39 #include "public/platform/Platform.h" 38 #include "public/platform/Platform.h"
40 #include "public/platform/WebCompositorSupport.h" 39 #include "public/platform/WebCompositorSupport.h"
41 #include "public/platform/WebExternalBitmap.h" 40 #include "public/platform/WebExternalBitmap.h"
42 #include "public/platform/WebExternalTextureLayer.h" 41 #include "public/platform/WebExternalTextureLayer.h"
43 #include "public/platform/WebGraphicsContext3D.h" 42 #include "public/platform/WebGraphicsContext3D.h"
44 43
45 using namespace std; 44 using namespace std;
46 45
47 namespace WebCore { 46 namespace WebCore {
(...skipping 24 matching lines...) Expand all
72 } 71 }
73 72
74 private: 73 private:
75 GraphicsContext3D* m_context; 74 GraphicsContext3D* m_context;
76 GLenum m_oldActiveTextureUnit; 75 GLenum m_oldActiveTextureUnit;
77 Platform3DObject m_oldTextureUnitZeroId; 76 Platform3DObject m_oldTextureUnitZeroId;
78 }; 77 };
79 78
80 PassRefPtr<DrawingBuffer> DrawingBuffer::create(GraphicsContext3D* context, cons t IntSize& size, PreserveDrawingBuffer preserve, PassRefPtr<ContextEvictionManag er> contextEvictionManager) 79 PassRefPtr<DrawingBuffer> DrawingBuffer::create(GraphicsContext3D* context, cons t IntSize& size, PreserveDrawingBuffer preserve, PassRefPtr<ContextEvictionManag er> contextEvictionManager)
81 { 80 {
82 Extensions3D* extensions = context->extensions(); 81 bool multisampleSupported = context->supportsExtension("GL_ANGLE_framebuffer _blit")
83 bool multisampleSupported = extensions->supports("GL_ANGLE_framebuffer_blit" ) 82 && context->supportsExtension("GL_ANGLE_framebuffer_multisample")
84 && extensions->supports("GL_ANGLE_framebuffer_multisample") 83 && context->supportsExtension("GL_OES_rgb8_rgba8");
85 && extensions->supports("GL_OES_rgb8_rgba8");
86 if (multisampleSupported) { 84 if (multisampleSupported) {
87 extensions->ensureEnabled("GL_ANGLE_framebuffer_blit"); 85 context->ensureExtensionEnabled("GL_ANGLE_framebuffer_blit");
88 extensions->ensureEnabled("GL_ANGLE_framebuffer_multisample"); 86 context->ensureExtensionEnabled("GL_ANGLE_framebuffer_multisample");
89 extensions->ensureEnabled("GL_OES_rgb8_rgba8"); 87 context->ensureExtensionEnabled("GL_OES_rgb8_rgba8");
90 } 88 }
91 bool packedDepthStencilSupported = extensions->supports("GL_OES_packed_depth _stencil"); 89 bool packedDepthStencilSupported = context->supportsExtension("GL_OES_packed _depth_stencil");
92 if (packedDepthStencilSupported) 90 if (packedDepthStencilSupported)
93 extensions->ensureEnabled("GL_OES_packed_depth_stencil"); 91 context->ensureExtensionEnabled("GL_OES_packed_depth_stencil");
94 92
95 RefPtr<DrawingBuffer> drawingBuffer = adoptRef(new DrawingBuffer(context, si ze, multisampleSupported, packedDepthStencilSupported, preserve, contextEviction Manager)); 93 RefPtr<DrawingBuffer> drawingBuffer = adoptRef(new DrawingBuffer(context, si ze, multisampleSupported, packedDepthStencilSupported, preserve, contextEviction Manager));
96 return drawingBuffer.release(); 94 return drawingBuffer.release();
97 } 95 }
98 96
99 DrawingBuffer::DrawingBuffer(GraphicsContext3D* context, 97 DrawingBuffer::DrawingBuffer(GraphicsContext3D* context,
100 const IntSize& size, 98 const IntSize& size,
101 bool multisampleExtensionSupported, 99 bool multisampleExtensionSupported,
102 bool packedDepthStencilExtensionSupported, 100 bool packedDepthStencilExtensionSupported,
103 PreserveDrawingBuffer preserve, 101 PreserveDrawingBuffer preserve,
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 if (m_preserveDrawingBuffer == Discard) { 189 if (m_preserveDrawingBuffer == Discard) {
192 m_colorBuffer = nextFrontColorBuffer->textureId; 190 m_colorBuffer = nextFrontColorBuffer->textureId;
193 swap(nextFrontColorBuffer, m_lastColorBuffer); 191 swap(nextFrontColorBuffer, m_lastColorBuffer);
194 // It appears safe to overwrite the context's framebuffer binding in the Discard case since there will always be a 192 // It appears safe to overwrite the context's framebuffer binding in the Discard case since there will always be a
195 // WebGLRenderingContext::clearIfComposited() call made before the next draw call which restores the framebuffer binding. 193 // WebGLRenderingContext::clearIfComposited() call made before the next draw call which restores the framebuffer binding.
196 // If this stops being true at some point, we should track the current f ramebuffer binding in the DrawingBuffer and restore 194 // If this stops being true at some point, we should track the current f ramebuffer binding in the DrawingBuffer and restore
197 // it after attaching the new back buffer here. 195 // it after attaching the new back buffer here.
198 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); 196 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo);
199 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL _TEXTURE_2D, m_colorBuffer, 0); 197 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL _TEXTURE_2D, m_colorBuffer, 0);
200 } else { 198 } else {
201 Extensions3D* extensions = m_context->extensions(); 199 m_context->webContext()->copyTextureCHROMIUM(GL_TEXTURE_2D, m_colorBuffe r, nextFrontColorBuffer->textureId, 0, GL_RGBA, GL_UNSIGNED_BYTE);
202 extensions->copyTextureCHROMIUM(GL_TEXTURE_2D, m_colorBuffer, nextFrontC olorBuffer->textureId, 0, GL_RGBA, GL_UNSIGNED_BYTE);
203 } 200 }
204 201
205 if (multisample() && !m_framebufferBinding) 202 if (multisample() && !m_framebufferBinding)
206 bind(); 203 bind();
207 else 204 else
208 restoreFramebufferBinding(); 205 restoreFramebufferBinding();
209 206
210 m_contentsChanged = false; 207 m_contentsChanged = false;
211 208
212 context()->bindTexture(GL_TEXTURE_2D, nextFrontColorBuffer->textureId); 209 context()->bindTexture(GL_TEXTURE_2D, nextFrontColorBuffer->textureId);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 } 264 }
268 265
269 void DrawingBuffer::initialize(const IntSize& size) 266 void DrawingBuffer::initialize(const IntSize& size)
270 { 267 {
271 ASSERT(m_context); 268 ASSERT(m_context);
272 m_attributes = m_context->getContextAttributes(); 269 m_attributes = m_context->getContextAttributes();
273 270
274 if (m_attributes.alpha) { 271 if (m_attributes.alpha) {
275 m_internalColorFormat = GL_RGBA; 272 m_internalColorFormat = GL_RGBA;
276 m_colorFormat = GL_RGBA; 273 m_colorFormat = GL_RGBA;
277 m_internalRenderbufferFormat = Extensions3D::RGBA8_OES; 274 m_internalRenderbufferFormat = GL_RGBA8_OES;
278 } else { 275 } else {
279 m_internalColorFormat = GL_RGB; 276 m_internalColorFormat = GL_RGB;
280 m_colorFormat = GL_RGB; 277 m_colorFormat = GL_RGB;
281 m_internalRenderbufferFormat = Extensions3D::RGB8_OES; 278 m_internalRenderbufferFormat = GL_RGB8_OES;
282 } 279 }
283 280
284 m_context->getIntegerv(GL_MAX_TEXTURE_SIZE, &m_maxTextureSize); 281 m_context->getIntegerv(GL_MAX_TEXTURE_SIZE, &m_maxTextureSize);
285 282
286 int maxSampleCount = 0; 283 int maxSampleCount = 0;
287 if (multisample()) 284 if (multisample())
288 m_context->getIntegerv(Extensions3D::MAX_SAMPLES, &maxSampleCount); 285 m_context->getIntegerv(GL_MAX_SAMPLES_ANGLE, &maxSampleCount);
289 m_sampleCount = std::min(4, maxSampleCount); 286 m_sampleCount = std::min(4, maxSampleCount);
290 287
291 m_fbo = m_context->createFramebuffer(); 288 m_fbo = m_context->createFramebuffer();
292 289
293 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); 290 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo);
294 m_colorBuffer = createColorTexture(); 291 m_colorBuffer = createColorTexture();
295 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEX TURE_2D, m_colorBuffer, 0); 292 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEX TURE_2D, m_colorBuffer, 0);
296 createSecondaryBuffers(); 293 createSecondaryBuffers();
297 reset(size); 294 reset(size);
298 m_lastColorBuffer = createNewMailbox(m_colorBuffer); 295 m_lastColorBuffer = createNewMailbox(m_colorBuffer);
(...skipping 15 matching lines...) Expand all
314 bind(); 311 bind();
315 else 312 else
316 restoreFramebufferBinding(); 313 restoreFramebufferBinding();
317 } 314 }
318 m_context->flush(); 315 m_context->flush();
319 } 316 }
320 Platform3DObject sourceTexture = colorBuffer(); 317 Platform3DObject sourceTexture = colorBuffer();
321 318
322 if (!context.makeContextCurrent()) 319 if (!context.makeContextCurrent())
323 return false; 320 return false;
324 Extensions3D* extensions = context.extensions(); 321 if (!context.supportsExtension("GL_CHROMIUM_copy_texture") || !context.suppo rtsExtension("GL_CHROMIUM_flipy")
325 if (!extensions->supports("GL_CHROMIUM_copy_texture") || !extensions->suppor ts("GL_CHROMIUM_flipy") 322 || !context.canUseCopyTextureCHROMIUM(internalFormat, destType, level))
326 || !extensions->canUseCopyTextureCHROMIUM(internalFormat, destType, leve l))
327 return false; 323 return false;
328 324
329 bool unpackPremultiplyAlphaNeeded = false; 325 bool unpackPremultiplyAlphaNeeded = false;
330 bool unpackUnpremultiplyAlphaNeeded = false; 326 bool unpackUnpremultiplyAlphaNeeded = false;
331 if (m_attributes.alpha && m_attributes.premultipliedAlpha && !premultiplyAlp ha) 327 if (m_attributes.alpha && m_attributes.premultipliedAlpha && !premultiplyAlp ha)
332 unpackUnpremultiplyAlphaNeeded = true; 328 unpackUnpremultiplyAlphaNeeded = true;
333 else if (m_attributes.alpha && !m_attributes.premultipliedAlpha && premultip lyAlpha) 329 else if (m_attributes.alpha && !m_attributes.premultipliedAlpha && premultip lyAlpha)
334 unpackPremultiplyAlphaNeeded = true; 330 unpackPremultiplyAlphaNeeded = true;
335 331
336 context.pixelStorei(Extensions3D::UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM, unpac kUnpremultiplyAlphaNeeded); 332 context.pixelStorei(GC3D_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM, unpackUnpremul tiplyAlphaNeeded);
337 context.pixelStorei(Extensions3D::UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, unpackP remultiplyAlphaNeeded); 333 context.pixelStorei(GC3D_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, unpackPremultipl yAlphaNeeded);
338 context.pixelStorei(Extensions3D::UNPACK_FLIP_Y_CHROMIUM, flipY); 334 context.pixelStorei(GC3D_UNPACK_FLIP_Y_CHROMIUM, flipY);
339 extensions->copyTextureCHROMIUM(GL_TEXTURE_2D, sourceTexture, texture, level , internalFormat, destType); 335 context.webContext()->copyTextureCHROMIUM(GL_TEXTURE_2D, sourceTexture, text ure, level, internalFormat, destType);
340 context.pixelStorei(Extensions3D::UNPACK_FLIP_Y_CHROMIUM, false); 336 context.pixelStorei(GC3D_UNPACK_FLIP_Y_CHROMIUM, false);
341 context.pixelStorei(Extensions3D::UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM, false ); 337 context.pixelStorei(GC3D_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM, false);
342 context.pixelStorei(Extensions3D::UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, false); 338 context.pixelStorei(GC3D_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, false);
343 context.flush(); 339 context.flush();
344 340
345 return true; 341 return true;
346 } 342 }
347 343
348 Platform3DObject DrawingBuffer::framebuffer() const 344 Platform3DObject DrawingBuffer::framebuffer() const
349 { 345 {
350 return m_fbo; 346 return m_fbo;
351 } 347 }
352 348
353 blink::WebLayer* DrawingBuffer::platformLayer() 349 blink::WebLayer* DrawingBuffer::platformLayer()
354 { 350 {
355 if (!m_context) 351 if (!m_context)
356 return 0; 352 return 0;
357 353
358 if (!m_layer) { 354 if (!m_layer) {
359 m_layer = adoptPtr(blink::Platform::current()->compositorSupport()->crea teExternalTextureLayer(this)); 355 m_layer = adoptPtr(blink::Platform::current()->compositorSupport()->crea teExternalTextureLayer(this));
360 356
361 m_layer->setOpaque(!m_attributes.alpha); 357 m_layer->setOpaque(!m_attributes.alpha);
362 m_layer->setBlendBackgroundColor(m_attributes.alpha); 358 m_layer->setBlendBackgroundColor(m_attributes.alpha);
363 m_layer->setPremultipliedAlpha(m_attributes.premultipliedAlpha); 359 m_layer->setPremultipliedAlpha(m_attributes.premultipliedAlpha);
364 GraphicsLayer::registerContentsLayer(m_layer->layer()); 360 GraphicsLayer::registerContentsLayer(m_layer->layer());
365 } 361 }
366 362
367 return m_layer->layer(); 363 return m_layer->layer();
368 } 364 }
369 365
370 void DrawingBuffer::paintCompositedResultsToCanvas(ImageBuffer* imageBuffer) 366 void DrawingBuffer::paintCompositedResultsToCanvas(ImageBuffer* imageBuffer)
371 { 367 {
372 if (!m_context || !m_context->makeContextCurrent() || m_context->extensions( )->getGraphicsResetStatusARB() != GL_NO_ERROR) 368 if (!m_context || !m_context->makeContextCurrent() || m_context->webContext( )->getGraphicsResetStatusARB() != GL_NO_ERROR)
373 return; 369 return;
374 370
375 Extensions3D* extensions = m_context->extensions();
376
377 if (!imageBuffer) 371 if (!imageBuffer)
378 return; 372 return;
379 Platform3DObject tex = imageBuffer->getBackingTexture(); 373 Platform3DObject tex = imageBuffer->getBackingTexture();
380 if (tex) { 374 if (tex) {
381 extensions->copyTextureCHROMIUM(GL_TEXTURE_2D, m_frontColorBuffer, 375 m_context->webContext()->copyTextureCHROMIUM(GL_TEXTURE_2D, m_frontColor Buffer,
382 tex, 0, GL_RGBA, GL_UNSIGNED_BYTE); 376 tex, 0, GL_RGBA, GL_UNSIGNED_BYTE);
383 return; 377 return;
384 } 378 }
385 379
386 // Since the m_frontColorBuffer was produced and sent to the compositor, it cannot be bound to an fbo. 380 // Since the m_frontColorBuffer was produced and sent to the compositor, it cannot be bound to an fbo.
387 // We have to make a copy of it here and bind that copy instead. 381 // We have to make a copy of it here and bind that copy instead.
388 // FIXME: That's not true any more, provided we don't change texture 382 // FIXME: That's not true any more, provided we don't change texture
389 // parameters. 383 // parameters.
390 unsigned sourceTexture = createColorTexture(m_size); 384 unsigned sourceTexture = createColorTexture(m_size);
391 extensions->copyTextureCHROMIUM(GL_TEXTURE_2D, m_frontColorBuffer, sourceTex ture, 0, GL_RGBA, GL_UNSIGNED_BYTE); 385 m_context->webContext()->copyTextureCHROMIUM(GL_TEXTURE_2D, m_frontColorBuff er, sourceTexture, 0, GL_RGBA, GL_UNSIGNED_BYTE);
392 386
393 // Since we're using the same context as WebGL, we have to restore any state we change (in this case, just the framebuffer binding). 387 // Since we're using the same context as WebGL, we have to restore any state we change (in this case, just the framebuffer binding).
394 // FIXME: The WebGLRenderingContext tracks the current framebuffer binding, it would be slightly more efficient to use this value 388 // FIXME: The WebGLRenderingContext tracks the current framebuffer binding, it would be slightly more efficient to use this value
395 // rather than querying it off of the context. 389 // rather than querying it off of the context.
396 GLint previousFramebuffer = 0; 390 GLint previousFramebuffer = 0;
397 m_context->getIntegerv(GL_FRAMEBUFFER_BINDING, &previousFramebuffer); 391 m_context->getIntegerv(GL_FRAMEBUFFER_BINDING, &previousFramebuffer);
398 392
399 Platform3DObject framebuffer = m_context->createFramebuffer(); 393 Platform3DObject framebuffer = m_context->createFramebuffer();
400 m_context->bindFramebuffer(GL_FRAMEBUFFER, framebuffer); 394 m_context->bindFramebuffer(GL_FRAMEBUFFER, framebuffer);
401 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEX TURE_2D, sourceTexture, 0); 395 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEX TURE_2D, sourceTexture, 0);
402 396
403 extensions->paintFramebufferToCanvas(framebuffer, size().width(), size().hei ght(), !m_attributes.premultipliedAlpha, imageBuffer); 397 m_context->paintFramebufferToCanvas(framebuffer, size().width(), size().heig ht(), !m_attributes.premultipliedAlpha, imageBuffer);
404 m_context->deleteFramebuffer(framebuffer); 398 m_context->deleteFramebuffer(framebuffer);
405 m_context->deleteTexture(sourceTexture); 399 m_context->deleteTexture(sourceTexture);
406 400
407 m_context->bindFramebuffer(GL_FRAMEBUFFER, previousFramebuffer); 401 m_context->bindFramebuffer(GL_FRAMEBUFFER, previousFramebuffer);
408 } 402 }
409 403
410 void DrawingBuffer::clearPlatformLayer() 404 void DrawingBuffer::clearPlatformLayer()
411 { 405 {
412 if (m_layer) 406 if (m_layer)
413 m_layer->clearTexture(); 407 m_layer->clearTexture();
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
520 514
521 return true; 515 return true;
522 } 516 }
523 517
524 bool DrawingBuffer::resizeMultisampleFramebuffer(const IntSize& size) 518 bool DrawingBuffer::resizeMultisampleFramebuffer(const IntSize& size)
525 { 519 {
526 if (multisample()) { 520 if (multisample()) {
527 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO); 521 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO);
528 522
529 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_multisampleColorBuffer); 523 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_multisampleColorBuffer);
530 m_context->extensions()->renderbufferStorageMultisample(GL_RENDERBUFFER, m_sampleCount, m_internalRenderbufferFormat, size.width(), size.height()); 524 m_context->webContext()->renderbufferStorageMultisampleCHROMIUM(GL_RENDE RBUFFER, m_sampleCount, m_internalRenderbufferFormat, size.width(), size.height( ));
531 525
532 if (m_context->getError() == GL_OUT_OF_MEMORY) 526 if (m_context->getError() == GL_OUT_OF_MEMORY)
533 return false; 527 return false;
534 528
535 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_multisampleColorBuffer); 529 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_multisampleColorBuffer);
536 resizeDepthStencil(size); 530 resizeDepthStencil(size);
537 if (m_context->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_ COMPLETE) 531 if (m_context->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_ COMPLETE)
538 return false; 532 return false;
539 } 533 }
540 534
541 return true; 535 return true;
542 } 536 }
543 537
544 void DrawingBuffer::resizeDepthStencil(const IntSize& size) 538 void DrawingBuffer::resizeDepthStencil(const IntSize& size)
545 { 539 {
546 if (m_attributes.depth && m_attributes.stencil && m_packedDepthStencilExtens ionSupported) { 540 if (m_attributes.depth && m_attributes.stencil && m_packedDepthStencilExtens ionSupported) {
547 if (!m_depthStencilBuffer) 541 if (!m_depthStencilBuffer)
548 m_depthStencilBuffer = m_context->createRenderbuffer(); 542 m_depthStencilBuffer = m_context->createRenderbuffer();
549 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthStencilBuffer); 543 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthStencilBuffer);
550 if (multisample()) 544 if (multisample())
551 m_context->extensions()->renderbufferStorageMultisample(GL_RENDERBUF FER, m_sampleCount, Extensions3D::DEPTH24_STENCIL8, size.width(), size.height()) ; 545 m_context->webContext()->renderbufferStorageMultisampleCHROMIUM(GL_R ENDERBUFFER, m_sampleCount, GL_DEPTH24_STENCIL8_OES, size.width(), size.height() );
552 else 546 else
553 m_context->renderbufferStorage(GL_RENDERBUFFER, Extensions3D::DEPTH2 4_STENCIL8, size.width(), size.height()); 547 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_ OES, size.width(), size.height());
554 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT , GL_RENDERBUFFER, m_depthStencilBuffer); 548 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT , GL_RENDERBUFFER, m_depthStencilBuffer);
555 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilBuffer); 549 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilBuffer);
556 } else { 550 } else {
557 if (m_attributes.depth) { 551 if (m_attributes.depth) {
558 if (!m_depthBuffer) 552 if (!m_depthBuffer)
559 m_depthBuffer = m_context->createRenderbuffer(); 553 m_depthBuffer = m_context->createRenderbuffer();
560 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthBuffer); 554 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthBuffer);
561 if (multisample()) 555 if (multisample())
562 m_context->extensions()->renderbufferStorageMultisample(GL_RENDE RBUFFER, m_sampleCount, GL_DEPTH_COMPONENT16, size.width(), size.height()); 556 m_context->webContext()->renderbufferStorageMultisampleCHROMIUM( GL_RENDERBUFFER, m_sampleCount, GL_DEPTH_COMPONENT16, size.width(), size.height( ));
563 else 557 else
564 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONE NT16, size.width(), size.height()); 558 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONE NT16, size.width(), size.height());
565 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHME NT, GL_RENDERBUFFER, m_depthBuffer); 559 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHME NT, GL_RENDERBUFFER, m_depthBuffer);
566 } 560 }
567 if (m_attributes.stencil) { 561 if (m_attributes.stencil) {
568 if (!m_stencilBuffer) 562 if (!m_stencilBuffer)
569 m_stencilBuffer = m_context->createRenderbuffer(); 563 m_stencilBuffer = m_context->createRenderbuffer();
570 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_stencilBuffer); 564 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_stencilBuffer);
571 if (multisample()) 565 if (multisample())
572 m_context->extensions()->renderbufferStorageMultisample(GL_RENDE RBUFFER, m_sampleCount, GL_STENCIL_INDEX8, size.width(), size.height()); 566 m_context->webContext()->renderbufferStorageMultisampleCHROMIUM( GL_RENDERBUFFER, m_sampleCount, GL_STENCIL_INDEX8, size.width(), size.height());
573 else 567 else
574 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX 8, size.width(), size.height()); 568 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX 8, size.width(), size.height());
575 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACH MENT, GL_RENDERBUFFER, m_stencilBuffer); 569 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACH MENT, GL_RENDERBUFFER, m_stencilBuffer);
576 } 570 }
577 } 571 }
578 m_context->bindRenderbuffer(GL_RENDERBUFFER, 0); 572 m_context->bindRenderbuffer(GL_RENDERBUFFER, 0);
579 } 573 }
580 574
581 575
582 576
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 return; 706 return;
713 707
714 if (width < 0) 708 if (width < 0)
715 width = m_size.width(); 709 width = m_size.width();
716 if (height < 0) 710 if (height < 0)
717 height = m_size.height(); 711 height = m_size.height();
718 712
719 m_context->makeContextCurrent(); 713 m_context->makeContextCurrent();
720 714
721 if (m_multisampleFBO && !m_contentsChangeCommitted) { 715 if (m_multisampleFBO && !m_contentsChangeCommitted) {
722 m_context->bindFramebuffer(Extensions3D::READ_FRAMEBUFFER, m_multisample FBO); 716 m_context->bindFramebuffer(GL_READ_FRAMEBUFFER_ANGLE, m_multisampleFBO);
723 m_context->bindFramebuffer(Extensions3D::DRAW_FRAMEBUFFER, m_fbo); 717 m_context->bindFramebuffer(GL_DRAW_FRAMEBUFFER_ANGLE, m_fbo);
724 718
725 if (m_scissorEnabled) 719 if (m_scissorEnabled)
726 m_context->disable(GL_SCISSOR_TEST); 720 m_context->disable(GL_SCISSOR_TEST);
727 721
728 // Use NEAREST, because there is no scale performed during the blit. 722 // Use NEAREST, because there is no scale performed during the blit.
729 m_context->extensions()->blitFramebuffer(x, y, width, height, x, y, widt h, height, GL_COLOR_BUFFER_BIT, GL_NEAREST); 723 m_context->webContext()->blitFramebufferCHROMIUM(x, y, width, height, x, y, width, height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
730 724
731 if (m_scissorEnabled) 725 if (m_scissorEnabled)
732 m_context->enable(GL_SCISSOR_TEST); 726 m_context->enable(GL_SCISSOR_TEST);
733 } 727 }
734 728
735 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); 729 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo);
736 m_contentsChangeCommitted = true; 730 m_contentsChangeCommitted = true;
737 } 731 }
738 732
739 void DrawingBuffer::restoreFramebufferBinding() 733 void DrawingBuffer::restoreFramebufferBinding()
(...skipping 11 matching lines...) Expand all
751 745
752 void DrawingBuffer::bind() 746 void DrawingBuffer::bind()
753 { 747 {
754 if (!m_context) 748 if (!m_context)
755 return; 749 return;
756 750
757 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO ? m_multisampleF BO : m_fbo); 751 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO ? m_multisampleF BO : m_fbo);
758 } 752 }
759 753
760 } // namespace WebCore 754 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/platform/graphics/filters/custom/FECustomFilter.cpp ('k') | Source/platform/graphics/gpu/SharedGraphicsContext3D.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698