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

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: mac+win build fix 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..9ea8f75574baa08200813bd83b88233d8f9c131a 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,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,10 +384,12 @@ 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)
- return 0;
- ASSERT(m_imageBufferResult->context());
+ 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()));
+ m_imageBufferResult = ImageBuffer::create(surface.release());
return m_imageBufferResult.get();
}

Powered by Google App Engine
This is Rietveld 408576698