diff options
author | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2014-06-20 16:03:48 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2014-07-03 15:04:47 +0200 |
commit | 82d8a5c81d79e0c38e4f593c1424f8b212cb750f (patch) | |
tree | 991b25487e30f0f33002bc08502836cec890dc11 /Source/WebCore/html/HTMLCanvasElement.cpp | |
parent | f57e518842e3b134fb7cf6fa145b219aed3ed465 (diff) | |
download | qtwebkit-82d8a5c81d79e0c38e4f593c1424f8b212cb750f.tar.gz |
Implement Accelerated 2D Canvas
Implements accelered 2d canvas and makes it an setting. Accelerated 2D
canvas can especially speed up image blitting and complex transforms on
embedded devices when using a QGLWidget viewport.
Change-Id: I98a03f3c76d4e87799830171c6df101ed9908de3
Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Diffstat (limited to 'Source/WebCore/html/HTMLCanvasElement.cpp')
-rw-r--r-- | Source/WebCore/html/HTMLCanvasElement.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/Source/WebCore/html/HTMLCanvasElement.cpp b/Source/WebCore/html/HTMLCanvasElement.cpp index 7299e14d1..b856234b1 100644 --- a/Source/WebCore/html/HTMLCanvasElement.cpp +++ b/Source/WebCore/html/HTMLCanvasElement.cpp @@ -51,6 +51,10 @@ #include <runtime/JSLock.h> #include <runtime/Operations.h> +#if PLATFORM(QT) +#include "QWebPageClient.h" +#endif + #if ENABLE(WEBGL) #include "WebGLContextAttributes.h" #include "WebGLRenderingContext.h" @@ -582,7 +586,15 @@ void HTMLCanvasElement::createImageBuffer() const return; RenderingMode renderingMode = shouldAccelerate(bufferSize) ? Accelerated : Unaccelerated; - m_imageBuffer = ImageBuffer::create(size(), m_deviceScaleFactor, ColorSpaceDeviceRGB, renderingMode); +#if PLATFORM(QT) + if (renderingMode == Accelerated) { + QWebPageClient* client = document()->page()->chrome().platformPageClient(); + // The WebKit2 Chrome does not have a pageclient. + QOpenGLContext* context = client ? client->openGLContextIfAvailable() : 0; + m_imageBuffer = ImageBuffer::createCompatibleBuffer(size(), m_deviceScaleFactor, ColorSpaceDeviceRGB, context); + } else +#endif + m_imageBuffer = ImageBuffer::create(size(), m_deviceScaleFactor, ColorSpaceDeviceRGB, renderingMode); if (!m_imageBuffer) return; m_imageBuffer->context()->setShadowsIgnoreTransforms(true); |