| 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 836 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 847 } | 847 } |
| 848 return device_background_texture.Pass(); | 848 return device_background_texture.Pass(); |
| 849 } | 849 } |
| 850 | 850 |
| 851 skia::RefPtr<SkImage> GLRenderer::ApplyBackgroundFilters( | 851 skia::RefPtr<SkImage> GLRenderer::ApplyBackgroundFilters( |
| 852 DrawingFrame* frame, | 852 DrawingFrame* frame, |
| 853 const RenderPassDrawQuad* quad, | 853 const RenderPassDrawQuad* quad, |
| 854 ScopedResource* background_texture) { | 854 ScopedResource* background_texture) { |
| 855 DCHECK(ShouldApplyBackgroundFilters(quad)); | 855 DCHECK(ShouldApplyBackgroundFilters(quad)); |
| 856 skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( | 856 skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( |
| 857 quad->background_filters, background_texture->size()); | 857 quad->background_filters, gfx::SizeF(background_texture->size())); |
| 858 | 858 |
| 859 skia::RefPtr<SkImage> background_with_filters = ApplyImageFilter( | 859 skia::RefPtr<SkImage> background_with_filters = ApplyImageFilter( |
| 860 ScopedUseGrContext::Create(this, frame), resource_provider_, quad->rect, | 860 ScopedUseGrContext::Create(this, frame), resource_provider_, quad->rect, |
| 861 quad->filters_scale, filter.get(), background_texture); | 861 quad->filters_scale, filter.get(), background_texture); |
| 862 return background_with_filters; | 862 return background_with_filters; |
| 863 } | 863 } |
| 864 | 864 |
| 865 void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame, | 865 void GLRenderer::DrawRenderPassQuad(DrawingFrame* frame, |
| 866 const RenderPassDrawQuad* quad, | 866 const RenderPassDrawQuad* quad, |
| 867 const gfx::QuadF* clip_region) { | 867 const gfx::QuadF* clip_region) { |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 963 (quad->ShouldDrawWithBlending() || !IsDefaultBlendMode(blend_mode))); | 963 (quad->ShouldDrawWithBlending() || !IsDefaultBlendMode(blend_mode))); |
| 964 | 964 |
| 965 // TODO(senorblanco): Cache this value so that we don't have to do it for both | 965 // TODO(senorblanco): Cache this value so that we don't have to do it for both |
| 966 // the surface and its replica. Apply filters to the contents texture. | 966 // the surface and its replica. Apply filters to the contents texture. |
| 967 skia::RefPtr<SkImage> filter_image; | 967 skia::RefPtr<SkImage> filter_image; |
| 968 GLuint filter_image_id = 0; | 968 GLuint filter_image_id = 0; |
| 969 SkScalar color_matrix[20]; | 969 SkScalar color_matrix[20]; |
| 970 bool use_color_matrix = false; | 970 bool use_color_matrix = false; |
| 971 if (!quad->filters.IsEmpty()) { | 971 if (!quad->filters.IsEmpty()) { |
| 972 skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( | 972 skia::RefPtr<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( |
| 973 quad->filters, contents_texture->size()); | 973 quad->filters, gfx::SizeF(contents_texture->size())); |
| 974 if (filter) { | 974 if (filter) { |
| 975 skia::RefPtr<SkColorFilter> cf; | 975 skia::RefPtr<SkColorFilter> cf; |
| 976 | 976 |
| 977 { | 977 { |
| 978 SkColorFilter* colorfilter_rawptr = NULL; | 978 SkColorFilter* colorfilter_rawptr = NULL; |
| 979 filter->asColorFilter(&colorfilter_rawptr); | 979 filter->asColorFilter(&colorfilter_rawptr); |
| 980 cf = skia::AdoptRef(colorfilter_rawptr); | 980 cf = skia::AdoptRef(colorfilter_rawptr); |
| 981 } | 981 } |
| 982 | 982 |
| 983 if (cf && cf->asColorMatrix(color_matrix) && !filter->getInput(0)) { | 983 if (cf && cf->asColorMatrix(color_matrix) && !filter->getInput(0)) { |
| (...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1591 | 1591 |
| 1592 SetShaderQuadF(local_quad, uniforms.quad_location); | 1592 SetShaderQuadF(local_quad, uniforms.quad_location); |
| 1593 | 1593 |
| 1594 // The transform and vertex data are used to figure out the extents that the | 1594 // The transform and vertex data are used to figure out the extents that the |
| 1595 // un-antialiased quad should have and which vertex this is and the float | 1595 // un-antialiased quad should have and which vertex this is and the float |
| 1596 // quad passed in via uniform is the actual geometry that gets used to draw | 1596 // quad passed in via uniform is the actual geometry that gets used to draw |
| 1597 // it. This is why this centered rect is used and not the original | 1597 // it. This is why this centered rect is used and not the original |
| 1598 // quad_rect. | 1598 // quad_rect. |
| 1599 gfx::RectF centered_rect( | 1599 gfx::RectF centered_rect( |
| 1600 gfx::PointF(-0.5f * tile_rect.width(), -0.5f * tile_rect.height()), | 1600 gfx::PointF(-0.5f * tile_rect.width(), -0.5f * tile_rect.height()), |
| 1601 tile_rect.size()); | 1601 gfx::SizeF(tile_rect.size())); |
| 1602 DrawQuadGeometry(frame, quad->shared_quad_state->quad_to_target_transform, | 1602 DrawQuadGeometry(frame, quad->shared_quad_state->quad_to_target_transform, |
| 1603 centered_rect, uniforms.matrix_location); | 1603 centered_rect, uniforms.matrix_location); |
| 1604 } else { | 1604 } else { |
| 1605 PrepareGeometry(SHARED_BINDING); | 1605 PrepareGeometry(SHARED_BINDING); |
| 1606 SetShaderQuadF(local_quad, uniforms.quad_location); | 1606 SetShaderQuadF(local_quad, uniforms.quad_location); |
| 1607 static float gl_matrix[16]; | 1607 static float gl_matrix[16]; |
| 1608 ToGLMatrix(&gl_matrix[0], | 1608 ToGLMatrix(&gl_matrix[0], |
| 1609 frame->projection_matrix * | 1609 frame->projection_matrix * |
| 1610 quad->shared_quad_state->quad_to_target_transform); | 1610 quad->shared_quad_state->quad_to_target_transform); |
| 1611 gl_->UniformMatrix4fv(uniforms.matrix_location, 1, false, &gl_matrix[0]); | 1611 gl_->UniformMatrix4fv(uniforms.matrix_location, 1, false, &gl_matrix[0]); |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1790 | 1790 |
| 1791 SetShaderOpacity(quad->shared_quad_state->opacity, uniforms.alpha_location); | 1791 SetShaderOpacity(quad->shared_quad_state->opacity, uniforms.alpha_location); |
| 1792 SetShaderQuadF(local_quad, uniforms.quad_location); | 1792 SetShaderQuadF(local_quad, uniforms.quad_location); |
| 1793 | 1793 |
| 1794 // The transform and vertex data are used to figure out the extents that the | 1794 // The transform and vertex data are used to figure out the extents that the |
| 1795 // un-antialiased quad should have and which vertex this is and the float | 1795 // un-antialiased quad should have and which vertex this is and the float |
| 1796 // quad passed in via uniform is the actual geometry that gets used to draw | 1796 // quad passed in via uniform is the actual geometry that gets used to draw |
| 1797 // it. This is why this centered rect is used and not the original quad_rect. | 1797 // it. This is why this centered rect is used and not the original quad_rect. |
| 1798 gfx::RectF centered_rect( | 1798 gfx::RectF centered_rect( |
| 1799 gfx::PointF(-0.5f * tile_rect.width(), -0.5f * tile_rect.height()), | 1799 gfx::PointF(-0.5f * tile_rect.width(), -0.5f * tile_rect.height()), |
| 1800 tile_rect.size()); | 1800 gfx::SizeF(tile_rect.size())); |
| 1801 DrawQuadGeometry(frame, quad->shared_quad_state->quad_to_target_transform, | 1801 DrawQuadGeometry(frame, quad->shared_quad_state->quad_to_target_transform, |
| 1802 centered_rect, uniforms.matrix_location); | 1802 centered_rect, uniforms.matrix_location); |
| 1803 } | 1803 } |
| 1804 | 1804 |
| 1805 void GLRenderer::DrawContentQuadNoAA(const DrawingFrame* frame, | 1805 void GLRenderer::DrawContentQuadNoAA(const DrawingFrame* frame, |
| 1806 const ContentDrawQuadBase* quad, | 1806 const ContentDrawQuadBase* quad, |
| 1807 ResourceId resource_id, | 1807 ResourceId resource_id, |
| 1808 const gfx::QuadF* clip_region) { | 1808 const gfx::QuadF* clip_region) { |
| 1809 gfx::RectF tex_coord_rect = MathUtil::ScaleRectProportional( | 1809 gfx::RectF tex_coord_rect = MathUtil::ScaleRectProportional( |
| 1810 quad->tex_coord_rect, gfx::RectF(quad->rect), | 1810 quad->tex_coord_rect, gfx::RectF(quad->rect), |
| (...skipping 1719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3530 texture_id = pending_overlay_resources_.back()->texture_id(); | 3530 texture_id = pending_overlay_resources_.back()->texture_id(); |
| 3531 } | 3531 } |
| 3532 | 3532 |
| 3533 context_support_->ScheduleOverlayPlane( | 3533 context_support_->ScheduleOverlayPlane( |
| 3534 overlay.plane_z_order, overlay.transform, texture_id, | 3534 overlay.plane_z_order, overlay.transform, texture_id, |
| 3535 ToNearestRect(overlay.display_rect), overlay.uv_rect); | 3535 ToNearestRect(overlay.display_rect), overlay.uv_rect); |
| 3536 } | 3536 } |
| 3537 } | 3537 } |
| 3538 | 3538 |
| 3539 } // namespace cc | 3539 } // namespace cc |
| OLD | NEW |