summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/HTMLCanvasElement.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2014-06-20 16:03:48 +0200
committerAllan Sandfeld Jensen <allan.jensen@digia.com>2014-07-03 15:04:47 +0200
commit82d8a5c81d79e0c38e4f593c1424f8b212cb750f (patch)
tree991b25487e30f0f33002bc08502836cec890dc11 /Source/WebCore/html/HTMLCanvasElement.cpp
parentf57e518842e3b134fb7cf6fa145b219aed3ed465 (diff)
downloadqtwebkit-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.cpp14
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);