| Index: Source/platform/graphics/gpu/DrawingBuffer.cpp
|
| diff --git a/Source/platform/graphics/gpu/DrawingBuffer.cpp b/Source/platform/graphics/gpu/DrawingBuffer.cpp
|
| index 948d7045e159c31f338cccfd7206652fd49a6c55..c02d95270d991a66d230631ed60e330f79ac6948 100644
|
| --- a/Source/platform/graphics/gpu/DrawingBuffer.cpp
|
| +++ b/Source/platform/graphics/gpu/DrawingBuffer.cpp
|
| @@ -34,7 +34,6 @@
|
|
|
| #include <algorithm>
|
| #include "platform/TraceEvent.h"
|
| -#include "platform/graphics/Extensions3D.h"
|
| #include "platform/graphics/GraphicsLayer.h"
|
| #include "public/platform/Platform.h"
|
| #include "public/platform/WebCompositorSupport.h"
|
| @@ -79,18 +78,17 @@ private:
|
|
|
| PassRefPtr<DrawingBuffer> DrawingBuffer::create(GraphicsContext3D* context, const IntSize& size, PreserveDrawingBuffer preserve, PassRefPtr<ContextEvictionManager> contextEvictionManager)
|
| {
|
| - Extensions3D* extensions = context->extensions();
|
| - bool multisampleSupported = extensions->supports("GL_ANGLE_framebuffer_blit")
|
| - && extensions->supports("GL_ANGLE_framebuffer_multisample")
|
| - && extensions->supports("GL_OES_rgb8_rgba8");
|
| + bool multisampleSupported = context->supportsExtension("GL_ANGLE_framebuffer_blit")
|
| + && context->supportsExtension("GL_ANGLE_framebuffer_multisample")
|
| + && context->supportsExtension("GL_OES_rgb8_rgba8");
|
| if (multisampleSupported) {
|
| - extensions->ensureEnabled("GL_ANGLE_framebuffer_blit");
|
| - extensions->ensureEnabled("GL_ANGLE_framebuffer_multisample");
|
| - extensions->ensureEnabled("GL_OES_rgb8_rgba8");
|
| + context->ensureExtensionEnabled("GL_ANGLE_framebuffer_blit");
|
| + context->ensureExtensionEnabled("GL_ANGLE_framebuffer_multisample");
|
| + context->ensureExtensionEnabled("GL_OES_rgb8_rgba8");
|
| }
|
| - bool packedDepthStencilSupported = extensions->supports("GL_OES_packed_depth_stencil");
|
| + bool packedDepthStencilSupported = context->supportsExtension("GL_OES_packed_depth_stencil");
|
| if (packedDepthStencilSupported)
|
| - extensions->ensureEnabled("GL_OES_packed_depth_stencil");
|
| + context->ensureExtensionEnabled("GL_OES_packed_depth_stencil");
|
|
|
| RefPtr<DrawingBuffer> drawingBuffer = adoptRef(new DrawingBuffer(context, size, multisampleSupported, packedDepthStencilSupported, preserve, contextEvictionManager));
|
| return drawingBuffer.release();
|
| @@ -198,8 +196,7 @@ bool DrawingBuffer::prepareMailbox(blink::WebExternalTextureMailbox* outMailbox,
|
| m_context->bindFramebuffer(GL_FRAMEBUFFER, m_fbo);
|
| m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_colorBuffer, 0);
|
| } else {
|
| - Extensions3D* extensions = m_context->extensions();
|
| - extensions->copyTextureCHROMIUM(GL_TEXTURE_2D, m_colorBuffer, nextFrontColorBuffer->textureId, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + m_context->webContext()->copyTextureCHROMIUM(GL_TEXTURE_2D, m_colorBuffer, nextFrontColorBuffer->textureId, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| }
|
|
|
| if (multisample() && !m_framebufferBinding)
|
| @@ -274,18 +271,18 @@ void DrawingBuffer::initialize(const IntSize& size)
|
| if (m_attributes.alpha) {
|
| m_internalColorFormat = GL_RGBA;
|
| m_colorFormat = GL_RGBA;
|
| - m_internalRenderbufferFormat = Extensions3D::RGBA8_OES;
|
| + m_internalRenderbufferFormat = GL_RGBA8_OES;
|
| } else {
|
| m_internalColorFormat = GL_RGB;
|
| m_colorFormat = GL_RGB;
|
| - m_internalRenderbufferFormat = Extensions3D::RGB8_OES;
|
| + m_internalRenderbufferFormat = GL_RGB8_OES;
|
| }
|
|
|
| m_context->getIntegerv(GL_MAX_TEXTURE_SIZE, &m_maxTextureSize);
|
|
|
| int maxSampleCount = 0;
|
| if (multisample())
|
| - m_context->getIntegerv(Extensions3D::MAX_SAMPLES, &maxSampleCount);
|
| + m_context->getIntegerv(GL_MAX_SAMPLES_ANGLE, &maxSampleCount);
|
| m_sampleCount = std::min(4, maxSampleCount);
|
|
|
| m_fbo = m_context->createFramebuffer();
|
| @@ -321,9 +318,8 @@ bool DrawingBuffer::copyToPlatformTexture(GraphicsContext3D& context, Platform3D
|
|
|
| if (!context.makeContextCurrent())
|
| return false;
|
| - Extensions3D* extensions = context.extensions();
|
| - if (!extensions->supports("GL_CHROMIUM_copy_texture") || !extensions->supports("GL_CHROMIUM_flipy")
|
| - || !extensions->canUseCopyTextureCHROMIUM(internalFormat, destType, level))
|
| + if (!context.supportsExtension("GL_CHROMIUM_copy_texture") || !context.supportsExtension("GL_CHROMIUM_flipy")
|
| + || !context.canUseCopyTextureCHROMIUM(internalFormat, destType, level))
|
| return false;
|
|
|
| bool unpackPremultiplyAlphaNeeded = false;
|
| @@ -333,13 +329,13 @@ bool DrawingBuffer::copyToPlatformTexture(GraphicsContext3D& context, Platform3D
|
| else if (m_attributes.alpha && !m_attributes.premultipliedAlpha && premultiplyAlpha)
|
| unpackPremultiplyAlphaNeeded = true;
|
|
|
| - context.pixelStorei(Extensions3D::UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM, unpackUnpremultiplyAlphaNeeded);
|
| - context.pixelStorei(Extensions3D::UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, unpackPremultiplyAlphaNeeded);
|
| - context.pixelStorei(Extensions3D::UNPACK_FLIP_Y_CHROMIUM, flipY);
|
| - extensions->copyTextureCHROMIUM(GL_TEXTURE_2D, sourceTexture, texture, level, internalFormat, destType);
|
| - context.pixelStorei(Extensions3D::UNPACK_FLIP_Y_CHROMIUM, false);
|
| - context.pixelStorei(Extensions3D::UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM, false);
|
| - context.pixelStorei(Extensions3D::UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, false);
|
| + context.pixelStorei(GC3D_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM, unpackUnpremultiplyAlphaNeeded);
|
| + context.pixelStorei(GC3D_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, unpackPremultiplyAlphaNeeded);
|
| + context.pixelStorei(GC3D_UNPACK_FLIP_Y_CHROMIUM, flipY);
|
| + context.webContext()->copyTextureCHROMIUM(GL_TEXTURE_2D, sourceTexture, texture, level, internalFormat, destType);
|
| + context.pixelStorei(GC3D_UNPACK_FLIP_Y_CHROMIUM, false);
|
| + context.pixelStorei(GC3D_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM, false);
|
| + context.pixelStorei(GC3D_UNPACK_PREMULTIPLY_ALPHA_CHROMIUM, false);
|
| context.flush();
|
|
|
| return true;
|
| @@ -369,16 +365,14 @@ blink::WebLayer* DrawingBuffer::platformLayer()
|
|
|
| void DrawingBuffer::paintCompositedResultsToCanvas(ImageBuffer* imageBuffer)
|
| {
|
| - if (!m_context || !m_context->makeContextCurrent() || m_context->extensions()->getGraphicsResetStatusARB() != GL_NO_ERROR)
|
| + if (!m_context || !m_context->makeContextCurrent() || m_context->webContext()->getGraphicsResetStatusARB() != GL_NO_ERROR)
|
| return;
|
|
|
| - Extensions3D* extensions = m_context->extensions();
|
| -
|
| if (!imageBuffer)
|
| return;
|
| Platform3DObject tex = imageBuffer->getBackingTexture();
|
| if (tex) {
|
| - extensions->copyTextureCHROMIUM(GL_TEXTURE_2D, m_frontColorBuffer,
|
| + m_context->webContext()->copyTextureCHROMIUM(GL_TEXTURE_2D, m_frontColorBuffer,
|
| tex, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| return;
|
| }
|
| @@ -388,7 +382,7 @@ void DrawingBuffer::paintCompositedResultsToCanvas(ImageBuffer* imageBuffer)
|
| // FIXME: That's not true any more, provided we don't change texture
|
| // parameters.
|
| unsigned sourceTexture = createColorTexture(m_size);
|
| - extensions->copyTextureCHROMIUM(GL_TEXTURE_2D, m_frontColorBuffer, sourceTexture, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
| + m_context->webContext()->copyTextureCHROMIUM(GL_TEXTURE_2D, m_frontColorBuffer, sourceTexture, 0, GL_RGBA, GL_UNSIGNED_BYTE);
|
|
|
| // Since we're using the same context as WebGL, we have to restore any state we change (in this case, just the framebuffer binding).
|
| // FIXME: The WebGLRenderingContext tracks the current framebuffer binding, it would be slightly more efficient to use this value
|
| @@ -400,7 +394,7 @@ void DrawingBuffer::paintCompositedResultsToCanvas(ImageBuffer* imageBuffer)
|
| m_context->bindFramebuffer(GL_FRAMEBUFFER, framebuffer);
|
| m_context->framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, sourceTexture, 0);
|
|
|
| - extensions->paintFramebufferToCanvas(framebuffer, size().width(), size().height(), !m_attributes.premultipliedAlpha, imageBuffer);
|
| + m_context->paintFramebufferToCanvas(framebuffer, size().width(), size().height(), !m_attributes.premultipliedAlpha, imageBuffer);
|
| m_context->deleteFramebuffer(framebuffer);
|
| m_context->deleteTexture(sourceTexture);
|
|
|
| @@ -527,7 +521,7 @@ bool DrawingBuffer::resizeMultisampleFramebuffer(const IntSize& size)
|
| m_context->bindFramebuffer(GL_FRAMEBUFFER, m_multisampleFBO);
|
|
|
| m_context->bindRenderbuffer(GL_RENDERBUFFER, m_multisampleColorBuffer);
|
| - m_context->extensions()->renderbufferStorageMultisample(GL_RENDERBUFFER, m_sampleCount, m_internalRenderbufferFormat, size.width(), size.height());
|
| + m_context->webContext()->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sampleCount, m_internalRenderbufferFormat, size.width(), size.height());
|
|
|
| if (m_context->getError() == GL_OUT_OF_MEMORY)
|
| return false;
|
| @@ -548,9 +542,9 @@ void DrawingBuffer::resizeDepthStencil(const IntSize& size)
|
| m_depthStencilBuffer = m_context->createRenderbuffer();
|
| m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthStencilBuffer);
|
| if (multisample())
|
| - m_context->extensions()->renderbufferStorageMultisample(GL_RENDERBUFFER, m_sampleCount, Extensions3D::DEPTH24_STENCIL8, size.width(), size.height());
|
| + m_context->webContext()->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sampleCount, GL_DEPTH24_STENCIL8_OES, size.width(), size.height());
|
| else
|
| - m_context->renderbufferStorage(GL_RENDERBUFFER, Extensions3D::DEPTH24_STENCIL8, size.width(), size.height());
|
| + m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES, size.width(), size.height());
|
| m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilBuffer);
|
| m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilBuffer);
|
| } else {
|
| @@ -559,7 +553,7 @@ void DrawingBuffer::resizeDepthStencil(const IntSize& size)
|
| m_depthBuffer = m_context->createRenderbuffer();
|
| m_context->bindRenderbuffer(GL_RENDERBUFFER, m_depthBuffer);
|
| if (multisample())
|
| - m_context->extensions()->renderbufferStorageMultisample(GL_RENDERBUFFER, m_sampleCount, GL_DEPTH_COMPONENT16, size.width(), size.height());
|
| + m_context->webContext()->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sampleCount, GL_DEPTH_COMPONENT16, size.width(), size.height());
|
| else
|
| m_context->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, size.width(), size.height());
|
| m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthBuffer);
|
| @@ -569,7 +563,7 @@ void DrawingBuffer::resizeDepthStencil(const IntSize& size)
|
| m_stencilBuffer = m_context->createRenderbuffer();
|
| m_context->bindRenderbuffer(GL_RENDERBUFFER, m_stencilBuffer);
|
| if (multisample())
|
| - m_context->extensions()->renderbufferStorageMultisample(GL_RENDERBUFFER, m_sampleCount, GL_STENCIL_INDEX8, size.width(), size.height());
|
| + m_context->webContext()->renderbufferStorageMultisampleCHROMIUM(GL_RENDERBUFFER, m_sampleCount, GL_STENCIL_INDEX8, size.width(), size.height());
|
| else
|
| m_context->renderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, size.width(), size.height());
|
| m_context->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_stencilBuffer);
|
| @@ -719,14 +713,14 @@ void DrawingBuffer::commit(long x, long y, long width, long height)
|
| m_context->makeContextCurrent();
|
|
|
| if (m_multisampleFBO && !m_contentsChangeCommitted) {
|
| - m_context->bindFramebuffer(Extensions3D::READ_FRAMEBUFFER, m_multisampleFBO);
|
| - m_context->bindFramebuffer(Extensions3D::DRAW_FRAMEBUFFER, m_fbo);
|
| + m_context->bindFramebuffer(GL_READ_FRAMEBUFFER_ANGLE, m_multisampleFBO);
|
| + m_context->bindFramebuffer(GL_DRAW_FRAMEBUFFER_ANGLE, m_fbo);
|
|
|
| if (m_scissorEnabled)
|
| m_context->disable(GL_SCISSOR_TEST);
|
|
|
| // Use NEAREST, because there is no scale performed during the blit.
|
| - m_context->extensions()->blitFramebuffer(x, y, width, height, x, y, width, height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
| + m_context->webContext()->blitFramebufferCHROMIUM(x, y, width, height, x, y, width, height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
|
|
| if (m_scissorEnabled)
|
| m_context->enable(GL_SCISSOR_TEST);
|
|
|