Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(460)

Unified Diff: Source/core/html/HTMLCanvasElement.cpp

Issue 749653002: WebGL: clarify which Front or Back buffer is used by each API. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/HTMLCanvasElement.h ('k') | Source/core/html/canvas/WebGLRenderingContextBase.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/HTMLCanvasElement.cpp
diff --git a/Source/core/html/HTMLCanvasElement.cpp b/Source/core/html/HTMLCanvasElement.cpp
index dddb0c2a382b5744dc7627a6200ae86b39a4d7fd..09b49ae0bb73169d524682f03dfd5f3109095ae3 100644
--- a/Source/core/html/HTMLCanvasElement.cpp
+++ b/Source/core/html/HTMLCanvasElement.cpp
@@ -62,17 +62,26 @@ namespace blink {
using namespace HTMLNames;
+namespace {
+
// These values come from the WhatWG spec.
-static const int DefaultWidth = 300;
-static const int DefaultHeight = 150;
+const int DefaultWidth = 300;
+const int DefaultHeight = 150;
// Firefox limits width/height to 32767 pixels, but slows down dramatically before it
// reaches that limit. We limit by area instead, giving us larger maximum dimensions,
// in exchange for a smaller maximum canvas size.
-static const int MaxCanvasArea = 32768 * 8192; // Maximum canvas area in CSS pixels
+const int MaxCanvasArea = 32768 * 8192; // Maximum canvas area in CSS pixels
//In Skia, we will also limit width/height to 32767.
-static const int MaxSkiaDim = 32767; // Maximum width/height in CSS pixels.
+const int MaxSkiaDim = 32767; // Maximum width/height in CSS pixels.
+
+CanvasRenderingContext::SourceBuffer convertSourceBuffer(HTMLCanvasElement::SourceBuffer sourceBuffer)
+{
+ return static_cast<CanvasRenderingContext::SourceBuffer>(sourceBuffer);
+}
+
+} // namespace
DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(CanvasObserver);
@@ -381,26 +390,18 @@ String HTMLCanvasElement::toEncodingMimeType(const String& mimeType)
const AtomicString HTMLCanvasElement::imageSourceURL() const
{
- return AtomicString(toDataURLInternal("image/png", 0, true));
+ return AtomicString(toDataURLInternal("image/png", 0, Front));
}
-String HTMLCanvasElement::toDataURLInternal(const String& mimeType, const double* quality, bool isSaving) const
+String HTMLCanvasElement::toDataURLInternal(const String& mimeType, const double* quality, SourceBuffer sourceBuffer) const
{
if (m_size.isEmpty() || !buffer())
return String("data:,");
- String encodingMimeType = toEncodingMimeType(mimeType);
-
- // Try to get ImageData first, as that may avoid lossy conversions.
dshwang 2014/11/20 21:14:28 comment is wrong. buffer() contains not-lossy cont
- RefPtrWillBeRawPtr<ImageData> imageData = getImageData();
-
- if (imageData)
- return ImageDataToDataURL(ImageDataBuffer(imageData->size(), imageData->data()), encodingMimeType, quality);
-
- if (m_context && m_context->is3d()) {
- m_context->paintRenderingResultsToCanvas(isSaving ? CanvasRenderingContext::Front : CanvasRenderingContext::Back);
- }
+ if (m_context && m_context->is3d())
+ m_context->paintRenderingResultsToCanvas(convertSourceBuffer(sourceBuffer));
+ String encodingMimeType = toEncodingMimeType(mimeType);
return buffer()->toDataURL(encodingMimeType, quality);
}
@@ -411,14 +412,7 @@ String HTMLCanvasElement::toDataURL(const String& mimeType, const double* qualit
return String();
}
- return toDataURLInternal(mimeType, quality);
-}
-
-PassRefPtrWillBeRawPtr<ImageData> HTMLCanvasElement::getImageData() const
-{
- if (!m_context || !m_context->is3d())
- return nullptr;
- return toWebGLRenderingContext(m_context.get())->paintRenderingResultsToImageData();
+ return toDataURLInternal(mimeType, quality, Back);
}
SecurityOrigin* HTMLCanvasElement::securityOrigin() const
@@ -666,12 +660,11 @@ void HTMLCanvasElement::ensureUnacceleratedImageBuffer()
m_didFailToCreateImageBuffer = !m_imageBuffer;
}
-Image* HTMLCanvasElement::copiedImage() const
+Image* HTMLCanvasElement::copiedImage(SourceBuffer sourceBuffer) const
{
if (!m_copiedImage && buffer()) {
- if (m_context && m_context->is3d()) {
- m_context->paintRenderingResultsToCanvas(CanvasRenderingContext::Front);
- }
+ if (m_context && m_context->is3d())
+ m_context->paintRenderingResultsToCanvas(convertSourceBuffer(sourceBuffer));
m_copiedImage = buffer()->copyImage(CopyBackingStore, Unscaled);
updateExternallyAllocatedMemory();
}
« no previous file with comments | « Source/core/html/HTMLCanvasElement.h ('k') | Source/core/html/canvas/WebGLRenderingContextBase.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698