| OLD | NEW |
| 1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/output/gl_renderer.h" | 5 #include "cc/output/gl_renderer.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <limits> | 8 #include <limits> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 630 GrBackendTextureDesc backend_texture_description; | 630 GrBackendTextureDesc backend_texture_description; |
| 631 backend_texture_description.fWidth = source_texture_resource->size().width(); | 631 backend_texture_description.fWidth = source_texture_resource->size().width(); |
| 632 backend_texture_description.fHeight = | 632 backend_texture_description.fHeight = |
| 633 source_texture_resource->size().height(); | 633 source_texture_resource->size().height(); |
| 634 backend_texture_description.fConfig = kSkia8888_GrPixelConfig; | 634 backend_texture_description.fConfig = kSkia8888_GrPixelConfig; |
| 635 backend_texture_description.fTextureHandle = lock.texture_id(); | 635 backend_texture_description.fTextureHandle = lock.texture_id(); |
| 636 backend_texture_description.fOrigin = kBottomLeft_GrSurfaceOrigin; | 636 backend_texture_description.fOrigin = kBottomLeft_GrSurfaceOrigin; |
| 637 skia::RefPtr<GrTexture> texture = | 637 skia::RefPtr<GrTexture> texture = |
| 638 skia::AdoptRef(use_gr_context->context()->wrapBackendTexture( | 638 skia::AdoptRef(use_gr_context->context()->wrapBackendTexture( |
| 639 backend_texture_description)); | 639 backend_texture_description)); |
| 640 if (!texture) { |
| 641 TRACE_EVENT_INSTANT0("cc", |
| 642 "ApplyImageFilter wrap background texture failed", |
| 643 TRACE_EVENT_SCOPE_THREAD); |
| 644 return skia::RefPtr<SkImage>(); |
| 645 } |
| 640 | 646 |
| 641 SkImageInfo info = | 647 SkImageInfo info = |
| 642 SkImageInfo::MakeN32Premul(source_texture_resource->size().width(), | 648 SkImageInfo::MakeN32Premul(source_texture_resource->size().width(), |
| 643 source_texture_resource->size().height()); | 649 source_texture_resource->size().height()); |
| 644 // Place the platform texture inside an SkBitmap. | 650 // Place the platform texture inside an SkBitmap. |
| 645 SkBitmap source; | 651 SkBitmap source; |
| 646 source.setInfo(info); | 652 source.setInfo(info); |
| 647 skia::RefPtr<SkGrPixelRef> pixel_ref = | 653 skia::RefPtr<SkGrPixelRef> pixel_ref = |
| 648 skia::AdoptRef(new SkGrPixelRef(info, texture.get())); | 654 skia::AdoptRef(new SkGrPixelRef(info, texture.get())); |
| 649 source.setPixelRef(pixel_ref.get()); | 655 source.setPixelRef(pixel_ref.get()); |
| 650 | 656 |
| 651 // Create a scratch texture for backing store. | 657 // Create a scratch texture for backing store. |
| 652 GrTextureDesc desc; | 658 GrTextureDesc desc; |
| 653 desc.fFlags = kRenderTarget_GrTextureFlagBit | kNoStencil_GrTextureFlagBit; | 659 desc.fFlags = kRenderTarget_GrTextureFlagBit | kNoStencil_GrTextureFlagBit; |
| 654 desc.fSampleCnt = 0; | 660 desc.fSampleCnt = 0; |
| 655 desc.fWidth = source.width(); | 661 desc.fWidth = source.width(); |
| 656 desc.fHeight = source.height(); | 662 desc.fHeight = source.height(); |
| 657 desc.fConfig = kSkia8888_GrPixelConfig; | 663 desc.fConfig = kSkia8888_GrPixelConfig; |
| 658 desc.fOrigin = kBottomLeft_GrSurfaceOrigin; | 664 desc.fOrigin = kBottomLeft_GrSurfaceOrigin; |
| 659 GrAutoScratchTexture scratch_texture( | 665 GrAutoScratchTexture scratch_texture( |
| 660 use_gr_context->context(), desc, GrContext::kExact_ScratchTexMatch); | 666 use_gr_context->context(), desc, GrContext::kExact_ScratchTexMatch); |
| 661 skia::RefPtr<GrTexture> backing_store = | 667 skia::RefPtr<GrTexture> backing_store = |
| 662 skia::AdoptRef(scratch_texture.detach()); | 668 skia::AdoptRef(scratch_texture.detach()); |
| 663 if (backing_store.get() == NULL) { | 669 if (!backing_store) { |
| 664 TRACE_EVENT_INSTANT0("cc", | 670 TRACE_EVENT_INSTANT0("cc", |
| 665 "ApplyImageFilter scratch texture allocation failed", | 671 "ApplyImageFilter scratch texture allocation failed", |
| 666 TRACE_EVENT_SCOPE_THREAD); | 672 TRACE_EVENT_SCOPE_THREAD); |
| 667 return skia::RefPtr<SkImage>(); | 673 return skia::RefPtr<SkImage>(); |
| 668 } | 674 } |
| 669 | 675 |
| 670 // Create surface to draw into. | 676 // Create surface to draw into. |
| 671 skia::RefPtr<SkSurface> surface = skia::AdoptRef( | 677 skia::RefPtr<SkSurface> surface = skia::AdoptRef( |
| 672 SkSurface::NewRenderTargetDirect(backing_store->asRenderTarget())); | 678 SkSurface::NewRenderTargetDirect(backing_store->asRenderTarget())); |
| 673 skia::RefPtr<SkCanvas> canvas = skia::SharePtr(surface->getCanvas()); | 679 skia::RefPtr<SkCanvas> canvas = skia::SharePtr(surface->getCanvas()); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 734 GrBackendTextureDesc backend_texture_description; | 740 GrBackendTextureDesc backend_texture_description; |
| 735 backend_texture_description.fConfig = kSkia8888_GrPixelConfig; | 741 backend_texture_description.fConfig = kSkia8888_GrPixelConfig; |
| 736 backend_texture_description.fOrigin = kBottomLeft_GrSurfaceOrigin; | 742 backend_texture_description.fOrigin = kBottomLeft_GrSurfaceOrigin; |
| 737 | 743 |
| 738 backend_texture_description.fWidth = source_size.width(); | 744 backend_texture_description.fWidth = source_size.width(); |
| 739 backend_texture_description.fHeight = source_size.height(); | 745 backend_texture_description.fHeight = source_size.height(); |
| 740 backend_texture_description.fTextureHandle = source_texture_with_filters_id; | 746 backend_texture_description.fTextureHandle = source_texture_with_filters_id; |
| 741 skia::RefPtr<GrTexture> source_texture = | 747 skia::RefPtr<GrTexture> source_texture = |
| 742 skia::AdoptRef(use_gr_context->context()->wrapBackendTexture( | 748 skia::AdoptRef(use_gr_context->context()->wrapBackendTexture( |
| 743 backend_texture_description)); | 749 backend_texture_description)); |
| 750 if (!source_texture) { |
| 751 TRACE_EVENT_INSTANT0( |
| 752 "cc", |
| 753 "ApplyBlendModeWithBackdrop wrap source texture failed", |
| 754 TRACE_EVENT_SCOPE_THREAD); |
| 755 return skia::RefPtr<SkImage>(); |
| 756 } |
| 744 | 757 |
| 745 backend_texture_description.fWidth = background_size.width(); | 758 backend_texture_description.fWidth = background_size.width(); |
| 746 backend_texture_description.fHeight = background_size.height(); | 759 backend_texture_description.fHeight = background_size.height(); |
| 747 backend_texture_description.fTextureHandle = lock_background.texture_id(); | 760 backend_texture_description.fTextureHandle = lock_background.texture_id(); |
| 748 skia::RefPtr<GrTexture> background_texture = | 761 skia::RefPtr<GrTexture> background_texture = |
| 749 skia::AdoptRef(use_gr_context->context()->wrapBackendTexture( | 762 skia::AdoptRef(use_gr_context->context()->wrapBackendTexture( |
| 750 backend_texture_description)); | 763 backend_texture_description)); |
| 764 if (!background_texture) { |
| 765 TRACE_EVENT_INSTANT0( |
| 766 "cc", |
| 767 "ApplyBlendModeWithBackdrop wrap background texture failed", |
| 768 TRACE_EVENT_SCOPE_THREAD); |
| 769 return skia::RefPtr<SkImage>(); |
| 770 } |
| 751 | 771 |
| 752 SkImageInfo source_info = | 772 SkImageInfo source_info = |
| 753 SkImageInfo::MakeN32Premul(source_size.width(), source_size.height()); | 773 SkImageInfo::MakeN32Premul(source_size.width(), source_size.height()); |
| 754 // Place the platform texture inside an SkBitmap. | 774 // Place the platform texture inside an SkBitmap. |
| 755 SkBitmap source; | 775 SkBitmap source; |
| 756 source.setInfo(source_info); | 776 source.setInfo(source_info); |
| 757 skia::RefPtr<SkGrPixelRef> source_pixel_ref = | 777 skia::RefPtr<SkGrPixelRef> source_pixel_ref = |
| 758 skia::AdoptRef(new SkGrPixelRef(source_info, source_texture.get())); | 778 skia::AdoptRef(new SkGrPixelRef(source_info, source_texture.get())); |
| 759 source.setPixelRef(source_pixel_ref.get()); | 779 source.setPixelRef(source_pixel_ref.get()); |
| 760 | 780 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 773 desc.fFlags = kRenderTarget_GrTextureFlagBit | kNoStencil_GrTextureFlagBit; | 793 desc.fFlags = kRenderTarget_GrTextureFlagBit | kNoStencil_GrTextureFlagBit; |
| 774 desc.fSampleCnt = 0; | 794 desc.fSampleCnt = 0; |
| 775 desc.fWidth = source.width(); | 795 desc.fWidth = source.width(); |
| 776 desc.fHeight = source.height(); | 796 desc.fHeight = source.height(); |
| 777 desc.fConfig = kSkia8888_GrPixelConfig; | 797 desc.fConfig = kSkia8888_GrPixelConfig; |
| 778 desc.fOrigin = kBottomLeft_GrSurfaceOrigin; | 798 desc.fOrigin = kBottomLeft_GrSurfaceOrigin; |
| 779 GrAutoScratchTexture scratch_texture( | 799 GrAutoScratchTexture scratch_texture( |
| 780 use_gr_context->context(), desc, GrContext::kExact_ScratchTexMatch); | 800 use_gr_context->context(), desc, GrContext::kExact_ScratchTexMatch); |
| 781 skia::RefPtr<GrTexture> backing_store = | 801 skia::RefPtr<GrTexture> backing_store = |
| 782 skia::AdoptRef(scratch_texture.detach()); | 802 skia::AdoptRef(scratch_texture.detach()); |
| 783 if (backing_store.get() == NULL) { | 803 if (!backing_store) { |
| 784 TRACE_EVENT_INSTANT0( | 804 TRACE_EVENT_INSTANT0( |
| 785 "cc", | 805 "cc", |
| 786 "ApplyBlendModeWithBackdrop scratch texture allocation failed", | 806 "ApplyBlendModeWithBackdrop scratch texture allocation failed", |
| 787 TRACE_EVENT_SCOPE_THREAD); | 807 TRACE_EVENT_SCOPE_THREAD); |
| 788 return source_bitmap_with_filters; | 808 return source_bitmap_with_filters; |
| 789 } | 809 } |
| 790 | 810 |
| 791 // Create a device and canvas using that backing store. | 811 // Create a device and canvas using that backing store. |
| 792 skia::RefPtr<SkSurface> surface = skia::AdoptRef( | 812 skia::RefPtr<SkSurface> surface = skia::AdoptRef( |
| 793 SkSurface::NewRenderTargetDirect(backing_store->asRenderTarget())); | 813 SkSurface::NewRenderTargetDirect(backing_store->asRenderTarget())); |
| (...skipping 2388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3182 context_support_->ScheduleOverlayPlane( | 3202 context_support_->ScheduleOverlayPlane( |
| 3183 overlay.plane_z_order, | 3203 overlay.plane_z_order, |
| 3184 overlay.transform, | 3204 overlay.transform, |
| 3185 pending_overlay_resources_.back()->texture_id(), | 3205 pending_overlay_resources_.back()->texture_id(), |
| 3186 overlay.display_rect, | 3206 overlay.display_rect, |
| 3187 overlay.uv_rect); | 3207 overlay.uv_rect); |
| 3188 } | 3208 } |
| 3189 } | 3209 } |
| 3190 | 3210 |
| 3191 } // namespace cc | 3211 } // namespace cc |
| OLD | NEW |