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

Unified Diff: Source/platform/graphics/filters/FilterEffect.cpp

Issue 104023007: Refactoring ImageBuffer to decouple it from Canvas2DLayerBridge (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebase mayhem Created 7 years 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
Index: Source/platform/graphics/filters/FilterEffect.cpp
diff --git a/Source/platform/graphics/filters/FilterEffect.cpp b/Source/platform/graphics/filters/FilterEffect.cpp
index 81ca797c029bd88a516fae8c0b95d1c5685b0fca..2b1324298ac1e5454f97ca6cb2298495a40d094f 100644
--- a/Source/platform/graphics/filters/FilterEffect.cpp
+++ b/Source/platform/graphics/filters/FilterEffect.cpp
@@ -26,7 +26,9 @@
#include "platform/graphics/filters/FilterEffect.h"
#include "platform/graphics/ImageBuffer.h"
+#include "platform/graphics/UnacceleratedImageBufferSurface.h"
#include "platform/graphics/filters/Filter.h"
+#include "platform/graphics/gpu/AcceleratedImageBufferSurface.h"
#if HAVE(ARM_NEON_INTRINSICS)
#include <arm_neon.h>
@@ -243,7 +245,15 @@ ImageBuffer* FilterEffect::asImageBuffer()
return 0;
if (m_imageBufferResult)
return m_imageBufferResult.get();
- m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), 1, m_filter->renderingMode());
+ OwnPtr<ImageBufferSurface> surface;
+ if (m_filter->isAccelerated())
+ surface = adoptPtr(new AcceleratedImageBufferSurface(m_absolutePaintRect.size()));
+ if (!m_filter->isAccelerated() || !surface->isValid())
+ surface = adoptPtr(new UnacceleratedImageBufferSurface(m_absolutePaintRect.size()));
+ m_imageBufferResult = ImageBuffer::create(surface.release());
+ if (!m_imageBufferResult)
+ return 0;
+
IntRect destinationRect(IntPoint(), m_absolutePaintRect.size());
if (m_premultipliedImageResult)
m_imageBufferResult->putByteArray(Premultiplied, m_premultipliedImageResult.get(), destinationRect.size(), destinationRect, IntPoint());
@@ -377,13 +387,14 @@ void FilterEffect::copyPremultipliedImage(Uint8ClampedArray* destination, const
ImageBuffer* FilterEffect::createImageBufferResult()
{
// Only one result type is allowed.
- ASSERT(!hasResult());
if (m_absolutePaintRect.isEmpty())
return 0;
- m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), 1, m_filter->renderingMode());
- if (!m_imageBufferResult)
- return 0;
- ASSERT(m_imageBufferResult->context());
+ OwnPtr<ImageBufferSurface> surface;
+ if (m_filter->isAccelerated())
+ surface = adoptPtr(new AcceleratedImageBufferSurface(m_absolutePaintRect.size()));
+ if (!m_filter->isAccelerated() || !surface->isValid())
+ surface = adoptPtr(new UnacceleratedImageBufferSurface(m_absolutePaintRect.size()));
+ m_imageBufferResult = ImageBuffer::create(surface.release());
return m_imageBufferResult.get();
}
« no previous file with comments | « Source/platform/graphics/filters/Filter.h ('k') | Source/platform/graphics/gpu/AcceleratedImageBufferSurface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698