diff options
author | bsalomon <bsalomon@google.com> | 2014-09-05 11:01:41 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-05 18:04:00 +0000 |
commit | 55ebb77d934328f027c2dc5c5cd2f7739eb3cd50 (patch) | |
tree | 05c4b4ffaea82771579d159ccb20ece89afbfdb9 /cc | |
parent | 0c0bf658bcc9a4712f3674a88d6836eb1b45b5fa (diff) | |
download | chromium_src-55ebb77d934328f027c2dc5c5cd2f7739eb3cd50.zip chromium_src-55ebb77d934328f027c2dc5c5cd2f7739eb3cd50.tar.gz chromium_src-55ebb77d934328f027c2dc5c5cd2f7739eb3cd50.tar.bz2 |
Use SkSurface and SkImage instead of SkGpuDevice and SkBitmap in cc.
Review URL: https://codereview.chromium.org/520793002
Cr-Commit-Position: refs/heads/master@{#293553}
Diffstat (limited to 'cc')
-rw-r--r-- | cc/output/gl_renderer.cc | 90 | ||||
-rw-r--r-- | cc/resources/resource_provider.cc | 1 |
2 files changed, 49 insertions, 42 deletions
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc index d14feb6..e039947 100644 --- a/cc/output/gl_renderer.cc +++ b/cc/output/gl_renderer.cc @@ -36,10 +36,10 @@ #include "third_party/skia/include/core/SkBitmap.h" #include "third_party/skia/include/core/SkColor.h" #include "third_party/skia/include/core/SkColorFilter.h" +#include "third_party/skia/include/core/SkImage.h" #include "third_party/skia/include/core/SkSurface.h" #include "third_party/skia/include/gpu/GrContext.h" #include "third_party/skia/include/gpu/GrTexture.h" -#include "third_party/skia/include/gpu/SkGpuDevice.h" #include "third_party/skia/include/gpu/SkGrTexturePixelRef.h" #include "third_party/skia/include/gpu/gl/GrGLInterface.h" #include "ui/gfx/geometry/quad_f.h" @@ -610,7 +610,7 @@ void GLRenderer::DrawDebugBorderQuad(const DrawingFrame* frame, GLC(gl_, gl_->DrawElements(GL_LINE_LOOP, 4, GL_UNSIGNED_SHORT, 0)); } -static SkBitmap ApplyImageFilter( +static skia::RefPtr<SkImage> ApplyImageFilter( scoped_ptr<GLRenderer::ScopedUseGrContext> use_gr_context, ResourceProvider* resource_provider, const gfx::Point& origin, @@ -618,10 +618,10 @@ static SkBitmap ApplyImageFilter( SkImageFilter* filter, ScopedResource* source_texture_resource) { if (!filter) - return SkBitmap(); + return skia::RefPtr<SkImage>(); if (!use_gr_context) - return SkBitmap(); + return skia::RefPtr<SkImage>(); ResourceProvider::ScopedReadLockGL lock(resource_provider, source_texture_resource->id()); @@ -664,36 +664,40 @@ static SkBitmap ApplyImageFilter( TRACE_EVENT_INSTANT0("cc", "ApplyImageFilter scratch texture allocation failed", TRACE_EVENT_SCOPE_THREAD); - return SkBitmap(); + return skia::RefPtr<SkImage>(); } - // Create a device and canvas using that backing store. - skia::RefPtr<SkGpuDevice> device = - skia::AdoptRef(SkGpuDevice::Create(backing_store->asRenderTarget())); - DCHECK(device.get()); - SkCanvas canvas(device.get()); + // Create surface to draw into. + skia::RefPtr<SkSurface> surface = skia::AdoptRef( + SkSurface::NewRenderTargetDirect(backing_store->asRenderTarget())); + skia::RefPtr<SkCanvas> canvas = skia::SharePtr(surface->getCanvas()); // Draw the source bitmap through the filter to the canvas. SkPaint paint; paint.setImageFilter(filter); - canvas.clear(SK_ColorTRANSPARENT); + canvas->clear(SK_ColorTRANSPARENT); + + canvas->translate(SkIntToScalar(-origin.x()), SkIntToScalar(-origin.y())); + canvas->scale(scale.x(), scale.y()); + canvas->drawSprite(source, 0, 0, &paint); - canvas.translate(SkIntToScalar(-origin.x()), SkIntToScalar(-origin.y())); - canvas.scale(scale.x(), scale.y()); - canvas.drawSprite(source, 0, 0, &paint); + skia::RefPtr<SkImage> image = skia::AdoptRef(surface->newImageSnapshot()); + if (!image || !image->getTexture()) { + return skia::RefPtr<SkImage>(); + } // Flush the GrContext to ensure all buffered GL calls are drawn to the // backing store before we access and return it, and have cc begin using the // GL context again. - use_gr_context->context()->flush(); + canvas->flush(); - return device->accessBitmap(false); + return image; } -static SkBitmap ApplyBlendModeWithBackdrop( +static skia::RefPtr<SkImage> ApplyBlendModeWithBackdrop( scoped_ptr<GLRenderer::ScopedUseGrContext> use_gr_context, ResourceProvider* resource_provider, - SkBitmap source_bitmap_with_filters, + skia::RefPtr<SkImage> source_bitmap_with_filters, ScopedResource* source_texture_resource, ScopedResource* background_texture_resource, SkXfermode::Mode blend_mode) { @@ -711,11 +715,11 @@ static SkBitmap ApplyBlendModeWithBackdrop( int source_texture_with_filters_id; scoped_ptr<ResourceProvider::ScopedReadLockGL> lock; - if (source_bitmap_with_filters.getTexture()) { - DCHECK_EQ(source_size.width(), source_bitmap_with_filters.width()); - DCHECK_EQ(source_size.height(), source_bitmap_with_filters.height()); + if (source_bitmap_with_filters) { + DCHECK_EQ(source_size.width(), source_bitmap_with_filters->width()); + DCHECK_EQ(source_size.height(), source_bitmap_with_filters->height()); GrTexture* texture = - reinterpret_cast<GrTexture*>(source_bitmap_with_filters.getTexture()); + reinterpret_cast<GrTexture*>(source_bitmap_with_filters->getTexture()); source_texture_with_filters_id = texture->getTextureHandle(); } else { lock.reset(new ResourceProvider::ScopedReadLockGL( @@ -785,24 +789,30 @@ static SkBitmap ApplyBlendModeWithBackdrop( } // Create a device and canvas using that backing store. - skia::RefPtr<SkGpuDevice> device = - skia::AdoptRef(SkGpuDevice::Create(backing_store->asRenderTarget())); - DCHECK(device.get()); - SkCanvas canvas(device.get()); + skia::RefPtr<SkSurface> surface = skia::AdoptRef( + SkSurface::NewRenderTargetDirect(backing_store->asRenderTarget())); + if (!surface) + return skia::RefPtr<SkImage>(); + skia::RefPtr<SkCanvas> canvas = skia::SharePtr(surface->getCanvas()); // Draw the source bitmap through the filter to the canvas. - canvas.clear(SK_ColorTRANSPARENT); - canvas.drawSprite(background, 0, 0); + canvas->clear(SK_ColorTRANSPARENT); + canvas->drawSprite(background, 0, 0); SkPaint paint; paint.setXfermodeMode(blend_mode); - canvas.drawSprite(source, 0, 0, &paint); + canvas->drawSprite(source, 0, 0, &paint); + + skia::RefPtr<SkImage> image = skia::AdoptRef(surface->newImageSnapshot()); + if (!image || !image->getTexture()) { + return skia::RefPtr<SkImage>(); + } // Flush the GrContext to ensure all buffered GL calls are drawn to the // backing store before we access and return it, and have cc begin using the // GL context again. - use_gr_context->context()->flush(); + canvas->flush(); - return device->accessBitmap(false); + return image; } scoped_ptr<ScopedResource> GLRenderer::GetBackgroundWithFilters( @@ -873,7 +883,7 @@ scoped_ptr<ScopedResource> GLRenderer::GetBackgroundWithFilters( skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( quad->background_filters, device_background_texture->size()); - SkBitmap filtered_device_background; + skia::RefPtr<SkImage> filtered_device_background; if (apply_background_filters) { filtered_device_background = ApplyImageFilter(ScopedUseGrContext::Create(this, frame), @@ -883,13 +893,12 @@ scoped_ptr<ScopedResource> GLRenderer::GetBackgroundWithFilters( filter.get(), device_background_texture.get()); } - *background_changed = (filtered_device_background.getTexture() != NULL); + *background_changed = (filtered_device_background != NULL); int filtered_device_background_texture_id = 0; scoped_ptr<ResourceProvider::ScopedReadLockGL> lock; - if (filtered_device_background.getTexture()) { - GrTexture* texture = - reinterpret_cast<GrTexture*>(filtered_device_background.getTexture()); + if (filtered_device_background) { + GrTexture* texture = filtered_device_background->getTexture(); filtered_device_background_texture_id = texture->getTextureHandle(); } else { lock.reset(new ResourceProvider::ScopedReadLockGL( @@ -988,7 +997,7 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame, // TODO(senorblanco): 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. - SkBitmap filter_bitmap; + skia::RefPtr<SkImage> filter_bitmap; SkScalar color_matrix[20]; bool use_color_matrix = false; if (!quad->filters.IsEmpty()) { @@ -1076,9 +1085,8 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame, // this draw instead of having a separate copy of the background texture. scoped_ptr<ResourceProvider::ScopedSamplerGL> contents_resource_lock; - if (filter_bitmap.getTexture()) { - GrTexture* texture = - reinterpret_cast<GrTexture*>(filter_bitmap.getTexture()); + if (filter_bitmap) { + GrTexture* texture = filter_bitmap->getTexture(); DCHECK_EQ(GL_TEXTURE0, GetActiveTextureUnit(gl_)); gl_->BindTexture(GL_TEXTURE_2D, texture->getTextureHandle()); } else { @@ -1333,7 +1341,7 @@ void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame, // Flush the compositor context before the filter bitmap goes out of // scope, so the draw gets processed before the filter texture gets deleted. - if (filter_bitmap.getTexture()) + if (filter_bitmap) GLC(gl_, gl_->Flush()); } diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc index a5dd320..5389e4ba 100644 --- a/cc/resources/resource_provider.cc +++ b/cc/resources/resource_provider.cc @@ -25,7 +25,6 @@ #include "third_party/khronos/GLES2/gl2ext.h" #include "third_party/skia/include/core/SkSurface.h" #include "third_party/skia/include/gpu/GrContext.h" -#include "third_party/skia/include/gpu/SkGpuDevice.h" #include "ui/gfx/frame_time.h" #include "ui/gfx/rect.h" #include "ui/gfx/vector2d.h" |