| Index: cc/gl_renderer.cc
|
| diff --git a/cc/gl_renderer.cc b/cc/gl_renderer.cc
|
| index b3bad726fbef27b43eb65f2414cddf9aa8695f15..d5c90412895157060b0cbff126ed6652e503c20d 100644
|
| --- a/cc/gl_renderer.cc
|
| +++ b/cc/gl_renderer.cc
|
| @@ -31,7 +31,6 @@
|
| #include "cc/video_layer_impl.h"
|
| #include "gpu/GLES2/gl2extchromium.h"
|
| #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3D.h"
|
| -#include "third_party/WebKit/Source/Platform/chromium/public/WebSharedGraphicsContext3D.h"
|
| #include "third_party/khronos/GLES2/gl2.h"
|
| #include "third_party/khronos/GLES2/gl2ext.h"
|
| #include "third_party/skia/include/core/SkBitmap.h"
|
| @@ -45,7 +44,6 @@
|
|
|
| using WebKit::WebGraphicsContext3D;
|
| using WebKit::WebGraphicsMemoryAllocation;
|
| -using WebKit::WebSharedGraphicsContext3D;
|
|
|
| namespace cc {
|
|
|
| @@ -350,31 +348,15 @@ void GLRenderer::drawDebugBorderQuad(const DrawingFrame& frame, const DebugBorde
|
| GLC(context(), context()->drawElements(GL_LINE_LOOP, 4, GL_UNSIGNED_SHORT, 0));
|
| }
|
|
|
| -static WebGraphicsContext3D* getFilterContext(bool hasImplThread)
|
| -{
|
| - if (hasImplThread)
|
| - return WebSharedGraphicsContext3D::compositorThreadContext();
|
| - else
|
| - return WebSharedGraphicsContext3D::mainThreadContext();
|
| -}
|
| -
|
| -static GrContext* getFilterGrContext(bool hasImplThread)
|
| -{
|
| - if (hasImplThread)
|
| - return WebSharedGraphicsContext3D::compositorThreadGrContext();
|
| - else
|
| - return WebSharedGraphicsContext3D::mainThreadGrContext();
|
| -}
|
| -
|
| -static inline SkBitmap applyFilters(GLRenderer* renderer, const WebKit::WebFilterOperations& filters, ScopedResource* sourceTexture, bool hasImplThread)
|
| +static inline SkBitmap applyFilters(GLRenderer* renderer, const WebKit::WebFilterOperations& filters, ScopedResource* sourceTexture, WebGraphicsContext3D* filterContext, GrContext* filterGrContext)
|
| {
|
| if (filters.isEmpty())
|
| return SkBitmap();
|
|
|
| - WebGraphicsContext3D* filterContext = getFilterContext(hasImplThread);
|
| - GrContext* filterGrContext = getFilterGrContext(hasImplThread);
|
| + if (!filterContext)
|
| + return SkBitmap();
|
|
|
| - if (!filterContext || !filterGrContext)
|
| + if (!filterGrContext)
|
| return SkBitmap();
|
|
|
| renderer->context()->flush();
|
| @@ -384,19 +366,17 @@ static inline SkBitmap applyFilters(GLRenderer* renderer, const WebKit::WebFilte
|
| return source;
|
| }
|
|
|
| -static SkBitmap applyImageFilter(GLRenderer* renderer, SkImageFilter* filter, ScopedResource* sourceTexture, bool hasImplThread)
|
| +static SkBitmap applyImageFilter(GLRenderer* renderer, SkImageFilter* filter, ScopedResource* sourceTexture, WebGraphicsContext3D* filterContext, GrContext* grContext)
|
| {
|
| if (!filter)
|
| return SkBitmap();
|
|
|
| - WebGraphicsContext3D* context3d = getFilterContext(hasImplThread);
|
| - GrContext* grContext = getFilterGrContext(hasImplThread);
|
| + if (!filterContext)
|
| + return SkBitmap();
|
|
|
| - if (!context3d || !grContext)
|
| + if (!grContext)
|
| return SkBitmap();
|
|
|
| - renderer->context()->flush();
|
| -
|
| ResourceProvider::ScopedWriteLockGL lock(renderer->resourceProvider(), sourceTexture->id());
|
|
|
| // Wrap the source texture in a Ganesh platform texture.
|
| @@ -433,7 +413,7 @@ static SkBitmap applyImageFilter(GLRenderer* renderer, SkImageFilter* filter, Sc
|
| canvas.clear(0x0);
|
| canvas.drawSprite(source, 0, 0, &paint);
|
| canvas.flush();
|
| - context3d->flush();
|
| + filterContext->flush();
|
| return device.accessBitmap(false);
|
| }
|
|
|
| @@ -481,7 +461,9 @@ scoped_ptr<ScopedResource> GLRenderer::drawBackgroundFilters(
|
| if (!getFramebufferTexture(deviceBackgroundTexture.get(), deviceRect))
|
| return scoped_ptr<ScopedResource>();
|
|
|
| - SkBitmap filteredDeviceBackground = applyFilters(this, filters, deviceBackgroundTexture.get(), m_client->hasImplThread());
|
| + WebKit::WebGraphicsContext3D* filterContext = m_resourceProvider->offscreenGraphicsContext3d();
|
| + GrContext* filterGrContext = m_resourceProvider->offscreenGrContext();
|
| + SkBitmap filteredDeviceBackground = applyFilters(this, filters, deviceBackgroundTexture.get(), filterContext, filterGrContext);
|
| if (!filteredDeviceBackground.getTexture())
|
| return scoped_ptr<ScopedResource>();
|
|
|
| @@ -532,11 +514,13 @@ void GLRenderer::drawRenderPassQuad(DrawingFrame& frame, const RenderPassDrawQua
|
|
|
| // FIXME: Cache this value so that we don't have to do it for both the surface and its replica.
|
| // Apply filters to the contents texture.
|
| + WebGraphicsContext3D* filterContext = m_resourceProvider->offscreenGraphicsContext3d();
|
| + GrContext* filterGrContext = m_resourceProvider->offscreenGrContext();
|
| SkBitmap filterBitmap;
|
| if (quad->filter) {
|
| - filterBitmap = applyImageFilter(this, quad->filter.get(), contentsTexture, m_client->hasImplThread());
|
| + filterBitmap = applyImageFilter(this, quad->filter.get(), contentsTexture, filterContext, filterGrContext);
|
| } else {
|
| - filterBitmap = applyFilters(this, quad->filters, contentsTexture, m_client->hasImplThread());
|
| + filterBitmap = applyFilters(this, quad->filters, contentsTexture, filterContext, filterGrContext);
|
| }
|
|
|
| // Draw the background texture if there is one.
|
|
|