summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/html
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
parentf57e518842e3b134fb7cf6fa145b219aed3ed465 (diff)
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')
-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);