| 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 657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 668 { | 668 { |
| 669 if (m_antiAliasingMode == MSAAExplicitResolve) { | 669 if (m_antiAliasingMode == MSAAExplicitResolve) { |
| 670 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO); | 670 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO); |
| 671 | 671 |
| 672 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_multisampleColorBuffer); | 672 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_multisampleColorBuffer); |
| 673 m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sam
pleCount, m_colorBuffer.parameters.internalRenderbufferFormat, size.width(), siz
e.height()); | 673 m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sam
pleCount, m_colorBuffer.parameters.internalRenderbufferFormat, size.width(), siz
e.height()); |
| 674 | 674 |
| 675 if (m_context->getError() == GL_OUT_OF_MEMORY) | 675 if (m_context->getError() == GL_OUT_OF_MEMORY) |
| 676 return false; | 676 return false; |
| 677 | 677 |
| 678 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, m_multisampleColorBuffer); | 678 m_gl->FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_R
ENDERBUFFER, m_multisampleColorBuffer); |
| 679 resizeDepthStencil(size); | 679 resizeDepthStencil(size); |
| 680 if (m_context->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_
COMPLETE) | 680 if (m_context->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_
COMPLETE) |
| 681 return false; | 681 return false; |
| 682 } | 682 } |
| 683 | 683 |
| 684 return true; | 684 return true; |
| 685 } | 685 } |
| 686 | 686 |
| 687 void DrawingBuffer::resizeDepthStencil(const IntSize& size) | 687 void DrawingBuffer::resizeDepthStencil(const IntSize& size) |
| 688 { | 688 { |
| 689 if (!m_requestedAttributes.depth && !m_requestedAttributes.stencil) | 689 if (!m_requestedAttributes.depth && !m_requestedAttributes.stencil) |
| 690 return; | 690 return; |
| 691 | 691 |
| 692 if (!m_depthStencilBuffer) | 692 if (!m_depthStencilBuffer) |
| 693 m_depthStencilBuffer = m_context->createRenderbuffer(); | 693 m_depthStencilBuffer = m_context->createRenderbuffer(); |
| 694 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthStencilBuffer); | 694 m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthStencilBuffer); |
| 695 if (m_antiAliasingMode == MSAAImplicitResolve) | 695 if (m_antiAliasingMode == MSAAImplicitResolve) |
| 696 m_context->renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_sampleCo
unt, GL_DEPTH24_STENCIL8_OES, size.width(), size.height()); | 696 m_context->renderbufferStorageMultisampleEXT(GL_RENDERBUFFER, m_sampleCo
unt, GL_DEPTH24_STENCIL8_OES, size.width(), size.height()); |
| 697 else if (m_antiAliasingMode == MSAAExplicitResolve) | 697 else if (m_antiAliasingMode == MSAAExplicitResolve) |
| 698 m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sam
pleCount, GL_DEPTH24_STENCIL8_OES, size.width(), size.height()); | 698 m_context->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sam
pleCount, GL_DEPTH24_STENCIL8_OES, size.width(), size.height()); |
| 699 else | 699 else |
| 700 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES,
size.width(), size.height()); | 700 m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES,
size.width(), size.height()); |
| 701 m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHME
NT, GL_RENDERBUFFER, m_depthStencilBuffer); | 701 m_gl->FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, G
L_RENDERBUFFER, m_depthStencilBuffer); |
| 702 m_context->bindRenderbuffer(GL_RENDERBUFFER, 0); | 702 m_context->bindRenderbuffer(GL_RENDERBUFFER, 0); |
| 703 } | 703 } |
| 704 | 704 |
| 705 | 705 |
| 706 | 706 |
| 707 void DrawingBuffer::clearFramebuffers(GLbitfield clearMask) | 707 void DrawingBuffer::clearFramebuffers(GLbitfield clearMask) |
| 708 { | 708 { |
| 709 // We will clear the multisample FBO, but we also need to clear the non-mult
isampled buffer. | 709 // We will clear the multisample FBO, but we also need to clear the non-mult
isampled buffer. |
| 710 if (m_multisampleFBO) { | 710 if (m_multisampleFBO) { |
| 711 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); | 711 m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo); |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 873 dataSize *= height; | 873 dataSize *= height; |
| 874 if (dataSize.hasOverflowed()) | 874 if (dataSize.hasOverflowed()) |
| 875 return false; | 875 return false; |
| 876 | 876 |
| 877 WTF::ArrayBufferContents pixels(width * height, 4, WTF::ArrayBufferContents:
:NotShared, WTF::ArrayBufferContents::DontInitialize); | 877 WTF::ArrayBufferContents pixels(width * height, 4, WTF::ArrayBufferContents:
:NotShared, WTF::ArrayBufferContents::DontInitialize); |
| 878 | 878 |
| 879 GLint fbo = 0; | 879 GLint fbo = 0; |
| 880 if (sourceBuffer == FrontBuffer && m_frontColorBuffer.texInfo.textureId) { | 880 if (sourceBuffer == FrontBuffer && m_frontColorBuffer.texInfo.textureId) { |
| 881 fbo = m_context->createFramebuffer(); | 881 fbo = m_context->createFramebuffer(); |
| 882 m_context->bindFramebuffer(GL_FRAMEBUFFER, fbo); | 882 m_context->bindFramebuffer(GL_FRAMEBUFFER, fbo); |
| 883 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_
frontColorBuffer.texInfo.parameters.target, m_frontColorBuffer.texInfo.textureId
, 0); | 883 m_gl->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_front
ColorBuffer.texInfo.parameters.target, m_frontColorBuffer.texInfo.textureId, 0); |
| 884 } else { | 884 } else { |
| 885 m_context->bindFramebuffer(GL_FRAMEBUFFER, framebuffer()); | 885 m_context->bindFramebuffer(GL_FRAMEBUFFER, framebuffer()); |
| 886 } | 886 } |
| 887 | 887 |
| 888 readBackFramebuffer(static_cast<unsigned char*>(pixels.data()), width, heigh
t, ReadbackRGBA, WebGLImageConversion::AlphaDoNothing); | 888 readBackFramebuffer(static_cast<unsigned char*>(pixels.data()), width, heigh
t, ReadbackRGBA, WebGLImageConversion::AlphaDoNothing); |
| 889 flipVertically(static_cast<uint8_t*>(pixels.data()), width, height); | 889 flipVertically(static_cast<uint8_t*>(pixels.data()), width, height); |
| 890 | 890 |
| 891 if (fbo) { | 891 if (fbo) { |
| 892 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_
frontColorBuffer.texInfo.parameters.target, 0, 0); | 892 m_gl->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_front
ColorBuffer.texInfo.parameters.target, 0, 0); |
| 893 m_context->deleteFramebuffer(fbo); | 893 m_context->deleteFramebuffer(fbo); |
| 894 } | 894 } |
| 895 | 895 |
| 896 restoreFramebufferBindings(); | 896 restoreFramebufferBindings(); |
| 897 | 897 |
| 898 pixels.transfer(contents); | 898 pixels.transfer(contents); |
| 899 return true; | 899 return true; |
| 900 } | 900 } |
| 901 | 901 |
| 902 void DrawingBuffer::readBackFramebuffer(unsigned char* pixels, int width, int he
ight, ReadbackOrder readbackOrder, WebGLImageConversion::AlphaOp op) | 902 void DrawingBuffer::readBackFramebuffer(unsigned char* pixels, int width, int he
ight, ReadbackOrder readbackOrder, WebGLImageConversion::AlphaOp op) |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1030 | 1030 |
| 1031 void DrawingBuffer::attachColorBufferToCurrentFBO() | 1031 void DrawingBuffer::attachColorBufferToCurrentFBO() |
| 1032 { | 1032 { |
| 1033 WGC3Denum target = m_colorBuffer.parameters.target; | 1033 WGC3Denum target = m_colorBuffer.parameters.target; |
| 1034 | 1034 |
| 1035 m_context->bindTexture(target, m_colorBuffer.textureId); | 1035 m_context->bindTexture(target, m_colorBuffer.textureId); |
| 1036 | 1036 |
| 1037 if (m_antiAliasingMode == MSAAImplicitResolve) | 1037 if (m_antiAliasingMode == MSAAImplicitResolve) |
| 1038 m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_A
TTACHMENT0, target, m_colorBuffer.textureId, 0, m_sampleCount); | 1038 m_context->framebufferTexture2DMultisampleEXT(GL_FRAMEBUFFER, GL_COLOR_A
TTACHMENT0, target, m_colorBuffer.textureId, 0, m_sampleCount); |
| 1039 else | 1039 else |
| 1040 m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, ta
rget, m_colorBuffer.textureId, 0); | 1040 m_gl->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, target,
m_colorBuffer.textureId, 0); |
| 1041 | 1041 |
| 1042 m_context->bindTexture(GL_TEXTURE_2D, m_texture2DBinding); | 1042 m_context->bindTexture(GL_TEXTURE_2D, m_texture2DBinding); |
| 1043 } | 1043 } |
| 1044 | 1044 |
| 1045 } // namespace blink | 1045 } // namespace blink |
| OLD | NEW |