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

Unified Diff: Source/core/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: build fixes for win+mac 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/core/platform/graphics/filters/FilterEffect.cpp
diff --git a/Source/core/platform/graphics/filters/FilterEffect.cpp b/Source/core/platform/graphics/filters/FilterEffect.cpp
index 849796d3adc6c16d218150a6e5463016caaafc17..1d21b05512b0be1e8323fd20e782b44260983414 100644
--- a/Source/core/platform/graphics/filters/FilterEffect.cpp
+++ b/Source/core/platform/graphics/filters/FilterEffect.cpp
@@ -27,6 +27,8 @@
#include "core/platform/graphics/ImageBuffer.h"
#include "core/platform/graphics/filters/Filter.h"
+#include "core/platform/graphics/gpu/AcceleratedImageBufferSurface.h"
+#include "platform/graphics/UnacceleratedImageBufferSurface.h"
#if HAVE(ARM_NEON_INTRINSICS)
#include <arm_neon.h>
@@ -243,7 +245,9 @@ ImageBuffer* FilterEffect::asImageBuffer()
return 0;
if (m_imageBufferResult)
return m_imageBufferResult.get();
- m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), 1, m_filter->renderingMode());
+ if (!createImageBufferResult())
+ return 0;
+
IntRect destinationRect(IntPoint(), m_absolutePaintRect.size());
if (m_premultipliedImageResult)
m_imageBufferResult->putByteArray(Premultiplied, m_premultipliedImageResult.get(), destinationRect.size(), destinationRect, IntPoint());
@@ -380,9 +384,14 @@ ImageBuffer* FilterEffect::createImageBufferResult()
ASSERT(!hasResult());
if (m_absolutePaintRect.isEmpty())
return 0;
- m_imageBufferResult = ImageBuffer::create(m_absolutePaintRect.size(), 1, m_filter->renderingMode());
- if (!m_imageBufferResult)
+ OwnPtr<ImageBufferSurface> surface;
+ if (m_filter->isAccelerated())
+ surface = adoptPtr(new AcceleratedImageBufferSurface(m_absolutePaintRect.size()));
+ if (!surface || !surface->isValid())
+ surface = adoptPtr(new UnacceleratedImageBufferSurface(m_absolutePaintRect.size()));
+ if (!surface->isValid())
return 0;
+ m_imageBufferResult = adoptPtr(new ImageBuffer(surface.release()));
ASSERT(m_imageBufferResult->context());
return m_imageBufferResult.get();
}

Powered by Google App Engine
This is Rietveld 408576698