| OLD | NEW |
| 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 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 , m_discardFramebufferSupported(discardFramebufferSupported) | 147 , m_discardFramebufferSupported(discardFramebufferSupported) |
| 148 , m_fbo(0) | 148 , m_fbo(0) |
| 149 , m_depthStencilBuffer(0) | 149 , m_depthStencilBuffer(0) |
| 150 , m_depthBuffer(0) | 150 , m_depthBuffer(0) |
| 151 , m_stencilBuffer(0) | 151 , m_stencilBuffer(0) |
| 152 , m_multisampleFBO(0) | 152 , m_multisampleFBO(0) |
| 153 , m_multisampleColorBuffer(0) | 153 , m_multisampleColorBuffer(0) |
| 154 , m_contentsChanged(true) | 154 , m_contentsChanged(true) |
| 155 , m_contentsChangeCommitted(false) | 155 , m_contentsChangeCommitted(false) |
| 156 , m_bufferClearNeeded(false) | 156 , m_bufferClearNeeded(false) |
| 157 , m_multisampleMode(None) | 157 , m_antiAliasingMode(None) |
| 158 , m_internalColorFormat(0) | 158 , m_internalColorFormat(0) |
| 159 , m_colorFormat(0) | 159 , m_colorFormat(0) |
| 160 , m_internalRenderbufferFormat(0) | 160 , m_internalRenderbufferFormat(0) |
| 161 , m_maxTextureSize(0) | 161 , m_maxTextureSize(0) |
| 162 , m_sampleCount(0) | 162 , m_sampleCount(0) |
| 163 , m_packAlignment(4) | 163 , m_packAlignment(4) |
| 164 , m_destructionInProgress(false) | 164 , m_destructionInProgress(false) |
| 165 , m_isHidden(false) | 165 , m_isHidden(false) |
| 166 , m_filterQuality(kLow_SkFilterQuality) | 166 , m_filterQuality(kLow_SkFilterQuality) |
| 167 { | 167 { |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 // 2. The compositor begins the frame. | 242 // 2. The compositor begins the frame. |
| 243 // 3. Javascript makes a context lost using WEBGL_lose_context extension
. | 243 // 3. Javascript makes a context lost using WEBGL_lose_context extension
. |
| 244 // 4. Here. | 244 // 4. Here. |
| 245 return false; | 245 return false; |
| 246 } | 246 } |
| 247 ASSERT(!m_isHidden); | 247 ASSERT(!m_isHidden); |
| 248 if (!m_contentsChanged) | 248 if (!m_contentsChanged) |
| 249 return false; | 249 return false; |
| 250 | 250 |
| 251 // Resolve the multisampled buffer into m_colorBuffer texture. | 251 // Resolve the multisampled buffer into m_colorBuffer texture. |
| 252 if (m_multisampleMode != None) | 252 if (m_antiAliasingMode != None) |
| 253 commit(); | 253 commit(); |
| 254 | 254 |
| 255 if (bitmap) { | 255 if (bitmap) { |
| 256 bitmap->setSize(size()); | 256 bitmap->setSize(size()); |
| 257 | 257 |
| 258 unsigned char* pixels = bitmap->pixels(); | 258 unsigned char* pixels = bitmap->pixels(); |
| 259 bool needPremultiply = m_actualAttributes.alpha && !m_actualAttributes.p
remultipliedAlpha; | 259 bool needPremultiply = m_actualAttributes.alpha && !m_actualAttributes.p
remultipliedAlpha; |
| 260 WebGLImageConversion::AlphaOp op = needPremultiply ? WebGLImageConversio
n::AlphaDoPremultiply : WebGLImageConversion::AlphaDoNothing; | 260 WebGLImageConversion::AlphaOp op = needPremultiply ? WebGLImageConversio
n::AlphaDoPremultiply : WebGLImageConversion::AlphaDoNothing; |
| 261 if (pixels) | 261 if (pixels) |
| 262 readBackFramebuffer(pixels, size().width(), size().height(), Readbac
kSkia, op); | 262 readBackFramebuffer(pixels, size().width(), size().height(), Readbac
kSkia, op); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 281 frontColorBufferMailbox = createNewMailbox(newTexture); | 281 frontColorBufferMailbox = createNewMailbox(newTexture); |
| 282 } | 282 } |
| 283 | 283 |
| 284 if (m_preserveDrawingBuffer == Discard) { | 284 if (m_preserveDrawingBuffer == Discard) { |
| 285 std::swap(frontColorBufferMailbox->textureInfo, m_colorBuffer); | 285 std::swap(frontColorBufferMailbox->textureInfo, m_colorBuffer); |
| 286 // It appears safe to overwrite the context's framebuffer binding in the
Discard case since there will always be a | 286 // It appears safe to overwrite the context's framebuffer binding in the
Discard case since there will always be a |
| 287 // WebGLRenderingContext::clearIfComposited() call made before the next
draw call which restores the framebuffer binding. | 287 // WebGLRenderingContext::clearIfComposited() call made before the next
draw call which restores the framebuffer binding. |
| 288 // If this stops being true at some point, we should track the current f
ramebuffer binding in the DrawingBuffer and restore | 288 // If this stops being true at some point, we should track the current f
ramebuffer binding in the DrawingBuffer and restore |
| 289 // it after attaching the new back buffer here. | 289 // it after attaching the new back buffer here. |
| 290 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); | 290 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); |
| 291 if (m_multisampleMode == ImplicitResolve) | 291 if (m_antiAliasingMode == MSAAImplicitResolve) |
| 292 m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COL
OR_ATTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0, m_sampleCount); | 292 m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COL
OR_ATTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0, m_sampleCount); |
| 293 else | 293 else |
| 294 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0
, GL_TEXTURE_2D, m_colorBuffer.textureId, 0); | 294 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0
, GL_TEXTURE_2D, m_colorBuffer.textureId, 0); |
| 295 | 295 |
| 296 if (m_discardFramebufferSupported) { | 296 if (m_discardFramebufferSupported) { |
| 297 // Explicitly discard framebuffer to save GPU memory bandwidth for t
ile-based GPU arch. | 297 // Explicitly discard framebuffer to save GPU memory bandwidth for t
ile-based GPU arch. |
| 298 const WGC3Denum attachments[3] = { GL_COLOR_ATTACHMENT0, GL_DEPTH_AT
TACHMENT, GL_STENCIL_ATTACHMENT}; | 298 const WGC3Denum attachments[3] = { GL_COLOR_ATTACHMENT0, GL_DEPTH_AT
TACHMENT, GL_STENCIL_ATTACHMENT}; |
| 299 m_context->discardFramebufferEXT(GL_FRAMEBUFFER, 3, attachments); | 299 m_context->discardFramebufferEXT(GL_FRAMEBUFFER, 3, attachments); |
| 300 } | 300 } |
| 301 } else { | 301 } else { |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 m_internalRenderbufferFormat = GL_RGBA8_OES; | 423 m_internalRenderbufferFormat = GL_RGBA8_OES; |
| 424 } else { | 424 } else { |
| 425 m_internalColorFormat = GL_RGB; | 425 m_internalColorFormat = GL_RGB; |
| 426 m_colorFormat = GL_RGB; | 426 m_colorFormat = GL_RGB; |
| 427 m_internalRenderbufferFormat = GL_RGB8_OES; | 427 m_internalRenderbufferFormat = GL_RGB8_OES; |
| 428 } | 428 } |
| 429 | 429 |
| 430 m_context->getIntegerv(GL_MAX_TEXTURE_SIZE, &m_maxTextureSize); | 430 m_context->getIntegerv(GL_MAX_TEXTURE_SIZE, &m_maxTextureSize); |
| 431 | 431 |
| 432 int maxSampleCount = 0; | 432 int maxSampleCount = 0; |
| 433 m_multisampleMode = None; | 433 m_antiAliasingMode = None; |
| 434 if (m_requestedAttributes.antialias && m_multisampleExtensionSupported) { | 434 if (m_requestedAttributes.antialias && m_multisampleExtensionSupported) { |
| 435 m_context->getIntegerv(GL_MAX_SAMPLES_ANGLE, &maxSampleCount); | 435 m_context->getIntegerv(GL_MAX_SAMPLES_ANGLE, &maxSampleCount); |
| 436 m_multisampleMode = ExplicitResolve; | 436 m_antiAliasingMode = MSAAExplicitResolve; |
| 437 if (m_extensionsUtil->supportsExtension("GL_EXT_multisampled_render_to_t
exture")) | 437 if (m_extensionsUtil->supportsExtension("GL_EXT_multisampled_render_to_t
exture")) { |
| 438 m_multisampleMode = ImplicitResolve; | 438 m_antiAliasingMode = MSAAImplicitResolve; |
| 439 } else if (m_extensionsUtil->supportsExtension("GL_CHROMIUM_screen_space
_antialiasing")) { |
| 440 m_antiAliasingMode = ScreenSpaceAntialiasing; |
| 441 } |
| 439 } | 442 } |
| 440 m_sampleCount = std::min(4, maxSampleCount); | 443 m_sampleCount = std::min(4, maxSampleCount); |
| 441 | 444 |
| 442 m_fbo = m_context->createFramebuffer(); | 445 m_fbo = m_context->createFramebuffer(); |
| 443 | 446 |
| 444 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); | 447 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); |
| 445 m_colorBuffer.textureId = createColorTexture(); | 448 m_colorBuffer.textureId = createColorTexture(); |
| 446 if (m_multisampleMode == ImplicitResolve) | 449 if (m_antiAliasingMode == MSAAImplicitResolve) |
| 447 m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_A
TTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0, m_sampleCount); | 450 m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_A
TTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0, m_sampleCount); |
| 448 else | 451 else |
| 449 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL
_TEXTURE_2D, m_colorBuffer.textureId, 0); | 452 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL
_TEXTURE_2D, m_colorBuffer.textureId, 0); |
| 450 createSecondaryBuffers(); | 453 createSecondaryBuffers(); |
| 451 // We first try to initialize everything with the requested attributes. | 454 // We first try to initialize everything with the requested attributes. |
| 452 if (!reset(size)) | 455 if (!reset(size)) |
| 453 return false; | 456 return false; |
| 454 // If that succeeds, we then see what we actually got and update our actual
attributes to reflect that. | 457 // If that succeeds, we then see what we actually got and update our actual
attributes to reflect that. |
| 455 m_actualAttributes = m_requestedAttributes; | 458 m_actualAttributes = m_requestedAttributes; |
| 456 if (m_requestedAttributes.alpha) { | 459 if (m_requestedAttributes.alpha) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 475 return false; | 478 return false; |
| 476 } | 479 } |
| 477 | 480 |
| 478 return true; | 481 return true; |
| 479 } | 482 } |
| 480 | 483 |
| 481 bool DrawingBuffer::copyToPlatformTexture(WebGraphicsContext3D* context, Platfor
m3DObject texture, GLenum internalFormat, | 484 bool DrawingBuffer::copyToPlatformTexture(WebGraphicsContext3D* context, Platfor
m3DObject texture, GLenum internalFormat, |
| 482 GLenum destType, GLint level, bool premultiplyAlpha, bool flipY, SourceDrawi
ngBuffer sourceBuffer) | 485 GLenum destType, GLint level, bool premultiplyAlpha, bool flipY, SourceDrawi
ngBuffer sourceBuffer) |
| 483 { | 486 { |
| 484 if (m_contentsChanged) { | 487 if (m_contentsChanged) { |
| 485 if (m_multisampleMode != None) { | 488 if (m_antiAliasingMode != None) { |
| 486 commit(); | 489 commit(); |
| 487 restoreFramebufferBindings(); | 490 restoreFramebufferBindings(); |
| 488 } | 491 } |
| 489 m_context->flush(); | 492 m_context->flush(); |
| 490 } | 493 } |
| 491 | 494 |
| 492 if (!Extensions3DUtil::canUseCopyTextureCHROMIUM(GL_TEXTURE_2D, internalForm
at, destType, level)) | 495 if (!Extensions3DUtil::canUseCopyTextureCHROMIUM(GL_TEXTURE_2D, internalForm
at, destType, level)) |
| 493 return false; | 496 return false; |
| 494 | 497 |
| 495 // Contexts may be in a different share group. We must transfer the texture
through a mailbox first | 498 // Contexts may be in a different share group. We must transfer the texture
through a mailbox first |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 613 m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | 616 m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
| 614 m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
; | 617 m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
; |
| 615 m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
; | 618 m_context->texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
; |
| 616 | 619 |
| 617 return offscreenColorTexture; | 620 return offscreenColorTexture; |
| 618 } | 621 } |
| 619 | 622 |
| 620 void DrawingBuffer::createSecondaryBuffers() | 623 void DrawingBuffer::createSecondaryBuffers() |
| 621 { | 624 { |
| 622 // create a multisample FBO | 625 // create a multisample FBO |
| 623 if (m_multisampleMode == ExplicitResolve) { | 626 if (m_antiAliasingMode == MSAAExplicitResolve) { |
| 624 m_multisampleFBO = m_context->createFramebuffer(); | 627 m_multisampleFBO = m_context->createFramebuffer(); |
| 625 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO); | 628 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO); |
| 626 m_multisampleColorBuffer = m_context->createRenderbuffer(); | 629 m_multisampleColorBuffer = m_context->createRenderbuffer(); |
| 627 } | 630 } |
| 628 } | 631 } |
| 629 | 632 |
| 630 bool DrawingBuffer::resizeFramebuffer(const IntSize& size) | 633 bool DrawingBuffer::resizeFramebuffer(const IntSize& size) |
| 631 { | 634 { |
| 632 // resize regular FBO | 635 // resize regular FBO |
| 633 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); | 636 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); |
| 634 | 637 |
| 635 m_context->bindTexture(GL_TEXTURE_2D, m_colorBuffer.textureId); | 638 m_context->bindTexture(GL_TEXTURE_2D, m_colorBuffer.textureId); |
| 636 | 639 |
| 637 allocateTextureMemory(&m_colorBuffer, size); | 640 allocateTextureMemory(&m_colorBuffer, size); |
| 638 | 641 |
| 639 if (m_multisampleMode == ImplicitResolve) | 642 if (m_antiAliasingMode == MSAAImplicitResolve) |
| 640 m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_A
TTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0, m_sampleCount); | 643 m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_A
TTACHMENT0, GL_TEXTURE_2D, m_colorBuffer.textureId, 0, m_sampleCount); |
| 641 else | 644 else |
| 642 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL
_TEXTURE_2D, m_colorBuffer.textureId, 0); | 645 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL
_TEXTURE_2D, m_colorBuffer.textureId, 0); |
| 643 | 646 |
| 644 m_context->bindTexture(GL_TEXTURE_2D, 0); | 647 m_context->bindTexture(GL_TEXTURE_2D, 0); |
| 645 | 648 |
| 646 if (m_multisampleMode != ExplicitResolve) | 649 if (m_antiAliasingMode != MSAAExplicitResolve) |
| 647 resizeDepthStencil(size); | 650 resizeDepthStencil(size); |
| 648 if (m_context->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMP
LETE) | 651 if (m_context->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMP
LETE) |
| 649 return false; | 652 return false; |
| 650 | 653 |
| 651 return true; | 654 return true; |
| 652 } | 655 } |
| 653 | 656 |
| 654 bool DrawingBuffer::resizeMultisampleFramebuffer(const IntSize& size) | 657 bool DrawingBuffer::resizeMultisampleFramebuffer(const IntSize& size) |
| 655 { | 658 { |
| 656 if (m_multisampleMode == ExplicitResolve) { | 659 if (m_antiAliasingMode == MSAAExplicitResolve) { |
| 657 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO); | 660 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO); |
| 658 | 661 |
| 659 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_multisampleColorBuffer); | 662 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_multisampleColorBuffer); |
| 660 m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sam
pleCount, m_internalRenderbufferFormat, size.width(), size.height()); | 663 m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sam
pleCount, m_internalRenderbufferFormat, size.width(), size.height()); |
| 661 | 664 |
| 662 if (m_context->getError() == GL_OUT_OF_MEMORY) | 665 if (m_context->getError() == GL_OUT_OF_MEMORY) |
| 663 return false; | 666 return false; |
| 664 | 667 |
| 665 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, m_multisampleColorBuffer); | 668 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, m_multisampleColorBuffer); |
| 666 resizeDepthStencil(size); | 669 resizeDepthStencil(size); |
| 667 if (m_context->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_
COMPLETE) | 670 if (m_context->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_
COMPLETE) |
| 668 return false; | 671 return false; |
| 669 } | 672 } |
| 670 | 673 |
| 671 return true; | 674 return true; |
| 672 } | 675 } |
| 673 | 676 |
| 674 void DrawingBuffer::resizeDepthStencil(const IntSize& size) | 677 void DrawingBuffer::resizeDepthStencil(const IntSize& size) |
| 675 { | 678 { |
| 676 if (!m_requestedAttributes.depth && !m_requestedAttributes.stencil) | 679 if (!m_requestedAttributes.depth && !m_requestedAttributes.stencil) |
| 677 return; | 680 return; |
| 678 | 681 |
| 679 if (m_packedDepthStencilExtensionSupported) { | 682 if (m_packedDepthStencilExtensionSupported) { |
| 680 if (!m_depthStencilBuffer) | 683 if (!m_depthStencilBuffer) |
| 681 m_depthStencilBuffer = m_context->createRenderbuffer(); | 684 m_depthStencilBuffer = m_context->createRenderbuffer(); |
| 682 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthStencilBuffer); | 685 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthStencilBuffer); |
| 683 if (m_multisampleMode == ImplicitResolve) | 686 if (m_antiAliasingMode == MSAAImplicitResolve) |
| 684 m_context->renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_samp
leCount, GL_DEPTH24_STENCIL8_OES, size.width(), size.height()); | 687 m_context->renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_samp
leCount, GL_DEPTH24_STENCIL8_OES, size.width(), size.height()); |
| 685 else if (m_multisampleMode == ExplicitResolve) | 688 else if (m_antiAliasingMode == MSAAExplicitResolve) |
| 686 m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m
_sampleCount, GL_DEPTH24_STENCIL8_OES, size.width(), size.height()); | 689 m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m
_sampleCount, GL_DEPTH24_STENCIL8_OES, size.width(), size.height()); |
| 687 else | 690 else |
| 688 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_
OES, size.width(), size.height()); | 691 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_
OES, size.width(), size.height()); |
| 689 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT
, GL_RENDERBUFFER, m_depthStencilBuffer); | 692 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT
, GL_RENDERBUFFER, m_depthStencilBuffer); |
| 690 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER, m_depthStencilBuffer); | 693 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER, m_depthStencilBuffer); |
| 691 } else { | 694 } else { |
| 692 if (m_requestedAttributes.depth) { | 695 if (m_requestedAttributes.depth) { |
| 693 if (!m_depthBuffer) | 696 if (!m_depthBuffer) |
| 694 m_depthBuffer = m_context->createRenderbuffer(); | 697 m_depthBuffer = m_context->createRenderbuffer(); |
| 695 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthBuffer); | 698 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthBuffer); |
| 696 if (m_multisampleMode == ImplicitResolve) | 699 if (m_antiAliasingMode == MSAAImplicitResolve) |
| 697 m_context->renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_
sampleCount, GL_DEPTH_COMPONENT16, size.width(), size.height()); | 700 m_context->renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_
sampleCount, GL_DEPTH_COMPONENT16, size.width(), size.height()); |
| 698 else if (m_multisampleMode == ExplicitResolve) | 701 else if (m_antiAliasingMode == MSAAExplicitResolve) |
| 699 m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFE
R, m_sampleCount, GL_DEPTH_COMPONENT16, size.width(), size.height()); | 702 m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFE
R, m_sampleCount, GL_DEPTH_COMPONENT16, size.width(), size.height()); |
| 700 else | 703 else |
| 701 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONE
NT16, size.width(), size.height()); | 704 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONE
NT16, size.width(), size.height()); |
| 702 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHME
NT, GL_RENDERBUFFER, m_depthBuffer); | 705 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHME
NT, GL_RENDERBUFFER, m_depthBuffer); |
| 703 } | 706 } |
| 704 if (m_requestedAttributes.stencil) { | 707 if (m_requestedAttributes.stencil) { |
| 705 if (!m_stencilBuffer) | 708 if (!m_stencilBuffer) |
| 706 m_stencilBuffer = m_context->createRenderbuffer(); | 709 m_stencilBuffer = m_context->createRenderbuffer(); |
| 707 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_stencilBuffer); | 710 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_stencilBuffer); |
| 708 if (m_multisampleMode == ImplicitResolve) | 711 if (m_antiAliasingMode == MSAAImplicitResolve) |
| 709 m_context->renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_
sampleCount, GL_STENCIL_INDEX8, size.width(), size.height()); | 712 m_context->renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_
sampleCount, GL_STENCIL_INDEX8, size.width(), size.height()); |
| 710 else if (m_multisampleMode == ExplicitResolve) | 713 else if (m_antiAliasingMode == MSAAExplicitResolve) |
| 711 m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFE
R, m_sampleCount, GL_STENCIL_INDEX8, size.width(), size.height()); | 714 m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFE
R, m_sampleCount, GL_STENCIL_INDEX8, size.width(), size.height()); |
| 712 else | 715 else |
| 713 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX
8, size.width(), size.height()); | 716 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX
8, size.width(), size.height()); |
| 714 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACH
MENT, GL_RENDERBUFFER, m_stencilBuffer); | 717 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACH
MENT, GL_RENDERBUFFER, m_stencilBuffer); |
| 715 } | 718 } |
| 716 } | 719 } |
| 717 m_context->bindRenderbuffer(GL_RENDERBUFFER, 0); | 720 m_context->bindRenderbuffer(GL_RENDERBUFFER, 0); |
| 718 } | 721 } |
| 719 | 722 |
| 720 | 723 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 808 int width = m_size.width(); | 811 int width = m_size.width(); |
| 809 int height = m_size.height(); | 812 int height = m_size.height(); |
| 810 // Use NEAREST, because there is no scale performed during the blit. | 813 // Use NEAREST, because there is no scale performed during the blit. |
| 811 m_context->blitFramebufferCHROMIUM(0, 0, width, height, 0, 0, width, hei
ght, GL_COLOR_BUFFER_BIT, GL_NEAREST); | 814 m_context->blitFramebufferCHROMIUM(0, 0, width, height, 0, 0, width, hei
ght, GL_COLOR_BUFFER_BIT, GL_NEAREST); |
| 812 | 815 |
| 813 if (m_scissorEnabled) | 816 if (m_scissorEnabled) |
| 814 m_context->enable(GL_SCISSOR_TEST); | 817 m_context->enable(GL_SCISSOR_TEST); |
| 815 } | 818 } |
| 816 | 819 |
| 817 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); | 820 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); |
| 821 if (m_antiAliasingMode == ScreenSpaceAntialiasing) { |
| 822 m_context->applyScreenSpaceAntialiasingCHROMIUM(); |
| 823 } |
| 818 m_contentsChangeCommitted = true; | 824 m_contentsChangeCommitted = true; |
| 819 } | 825 } |
| 820 | 826 |
| 821 void DrawingBuffer::restoreFramebufferBindings() | 827 void DrawingBuffer::restoreFramebufferBindings() |
| 822 { | 828 { |
| 823 if (m_drawFramebufferBinding && m_readFramebufferBinding) { | 829 if (m_drawFramebufferBinding && m_readFramebufferBinding) { |
| 824 if (m_drawFramebufferBinding == m_readFramebufferBinding) { | 830 if (m_drawFramebufferBinding == m_readFramebufferBinding) { |
| 825 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_readFramebufferBinding)
; | 831 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_readFramebufferBinding)
; |
| 826 } else { | 832 } else { |
| 827 m_context->bindFramebuffer(GL_READ_FRAMEBUFFER, m_readFramebufferBin
ding); | 833 m_context->bindFramebuffer(GL_READ_FRAMEBUFFER, m_readFramebufferBin
ding); |
| 828 m_context->bindFramebuffer(GL_DRAW_FRAMEBUFFER, m_drawFramebufferBin
ding); | 834 m_context->bindFramebuffer(GL_DRAW_FRAMEBUFFER, m_drawFramebufferBin
ding); |
| 829 } | 835 } |
| 830 return; | 836 return; |
| 831 } | 837 } |
| 832 if (!m_drawFramebufferBinding && !m_readFramebufferBinding) { | 838 if (!m_drawFramebufferBinding && !m_readFramebufferBinding) { |
| 833 bind(GL_FRAMEBUFFER); | 839 bind(GL_FRAMEBUFFER); |
| 834 return; | 840 return; |
| 835 } | 841 } |
| 836 if (!m_drawFramebufferBinding) { | 842 if (!m_drawFramebufferBinding) { |
| 837 bind(GL_DRAW_FRAMEBUFFER); | 843 bind(GL_DRAW_FRAMEBUFFER); |
| 838 m_context->bindFramebuffer(GL_READ_FRAMEBUFFER, m_readFramebufferBinding
); | 844 m_context->bindFramebuffer(GL_READ_FRAMEBUFFER, m_readFramebufferBinding
); |
| 839 } else { | 845 } else { |
| 840 bind(GL_READ_FRAMEBUFFER); | 846 bind(GL_READ_FRAMEBUFFER); |
| 841 m_context->bindFramebuffer(GL_DRAW_FRAMEBUFFER, m_drawFramebufferBinding
); | 847 m_context->bindFramebuffer(GL_DRAW_FRAMEBUFFER, m_drawFramebufferBinding
); |
| 842 } | 848 } |
| 843 } | 849 } |
| 844 | 850 |
| 845 bool DrawingBuffer::multisample() const | 851 bool DrawingBuffer::multisample() const |
| 846 { | 852 { |
| 847 return m_multisampleMode != None; | 853 return m_antiAliasingMode != None; |
| 848 } | 854 } |
| 849 | 855 |
| 850 void DrawingBuffer::bind(GLenum target) | 856 void DrawingBuffer::bind(GLenum target) |
| 851 { | 857 { |
| 852 if (target != GL_READ_FRAMEBUFFER) | 858 if (target != GL_READ_FRAMEBUFFER) |
| 853 m_context->bindFramebuffer(target, m_multisampleFBO ? m_multisampleFBO :
m_fbo); | 859 m_context->bindFramebuffer(target, m_multisampleFBO ? m_multisampleFBO :
m_fbo); |
| 854 else | 860 else |
| 855 m_context->bindFramebuffer(target, m_fbo); | 861 m_context->bindFramebuffer(target, m_fbo); |
| 856 } | 862 } |
| 857 | 863 |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1011 void DrawingBuffer::deleteChromiumImageForTexture(TextureInfo* info) | 1017 void DrawingBuffer::deleteChromiumImageForTexture(TextureInfo* info) |
| 1012 { | 1018 { |
| 1013 if (info->imageId) { | 1019 if (info->imageId) { |
| 1014 m_context->releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, info->imageId); | 1020 m_context->releaseTexImage2DCHROMIUM(GL_TEXTURE_2D, info->imageId); |
| 1015 m_context->destroyImageCHROMIUM(info->imageId); | 1021 m_context->destroyImageCHROMIUM(info->imageId); |
| 1016 info->imageId = 0; | 1022 info->imageId = 0; |
| 1017 } | 1023 } |
| 1018 } | 1024 } |
| 1019 | 1025 |
| 1020 } // namespace blink | 1026 } // namespace blink |
| OLD | NEW |