Chromium Code Reviews| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 ~DrawRenderPassDrawQuadParams() {} | 160 ~DrawRenderPassDrawQuadParams() {} |
| 161 | 161 |
| 162 // Required Inputs. | 162 // Required Inputs. |
| 163 const RenderPassDrawQuad* quad = nullptr; | 163 const RenderPassDrawQuad* quad = nullptr; |
| 164 const Resource* contents_texture = nullptr; | 164 const Resource* contents_texture = nullptr; |
| 165 const gfx::QuadF* clip_region = nullptr; | 165 const gfx::QuadF* clip_region = nullptr; |
| 166 bool flip_texture = false; | 166 bool flip_texture = false; |
| 167 gfx::Transform window_matrix; | 167 gfx::Transform window_matrix; |
| 168 gfx::Transform projection_matrix; | 168 gfx::Transform projection_matrix; |
| 169 gfx::Transform quad_to_target_transform; | 169 gfx::Transform quad_to_target_transform; |
| 170 const FilterOperations* filters = nullptr; | |
| 171 const FilterOperations* background_filters = nullptr; | |
| 170 | 172 |
| 171 // |frame| is only used for background effects. | 173 // |frame| is only used for background effects. |
| 172 DirectRenderer::DrawingFrame* frame = nullptr; | 174 DirectRenderer::DrawingFrame* frame = nullptr; |
| 173 | 175 |
| 174 // Whether the texture to be sampled from needs to be flipped. | 176 // Whether the texture to be sampled from needs to be flipped. |
| 175 bool source_needs_flip = false; | 177 bool source_needs_flip = false; |
| 176 | 178 |
| 177 float edge[24]; | 179 float edge[24]; |
| 178 SkScalar color_matrix[20]; | 180 SkScalar color_matrix[20]; |
| 179 | 181 |
| (...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 785 if (blend_mode == SkBlendMode::kSrcOver) | 787 if (blend_mode == SkBlendMode::kSrcOver) |
| 786 return; | 788 return; |
| 787 | 789 |
| 788 if (use_blend_equation_advanced_) { | 790 if (use_blend_equation_advanced_) { |
| 789 gl_->BlendEquation(GL_FUNC_ADD); | 791 gl_->BlendEquation(GL_FUNC_ADD); |
| 790 } else { | 792 } else { |
| 791 gl_->BlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); | 793 gl_->BlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); |
| 792 } | 794 } |
| 793 } | 795 } |
| 794 | 796 |
| 795 bool GLRenderer::ShouldApplyBackgroundFilters(const RenderPassDrawQuad* quad) { | 797 bool GLRenderer::ShouldApplyBackgroundFilters( |
| 796 if (quad->background_filters.IsEmpty()) | 798 const RenderPassDrawQuad* quad, |
| 799 const FilterOperations* background_filters) { | |
| 800 if (!background_filters) | |
| 797 return false; | 801 return false; |
| 802 DCHECK(!background_filters->IsEmpty()); | |
| 798 | 803 |
| 799 // TODO(hendrikw): Look into allowing background filters to see pixels from | 804 // TODO(hendrikw): Look into allowing background filters to see pixels from |
| 800 // other render targets. See crbug.com/314867. | 805 // other render targets. See crbug.com/314867. |
| 801 | 806 |
| 802 return true; | 807 return true; |
| 803 } | 808 } |
| 804 | 809 |
| 805 // This takes a gfx::Rect and a clip region quad in the same space, | 810 // This takes a gfx::Rect and a clip region quad in the same space, |
| 806 // and returns a quad with the same proportions in the space -0.5->0.5. | 811 // and returns a quad with the same proportions in the space -0.5->0.5. |
| 807 bool GetScaledRegion(const gfx::Rect& rect, | 812 bool GetScaledRegion(const gfx::Rect& rect, |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 836 uvs[5] = ((clip->p3().y() - rect.y()) / rect.height()); | 841 uvs[5] = ((clip->p3().y() - rect.y()) / rect.height()); |
| 837 uvs[6] = ((clip->p4().x() - rect.x()) / rect.width()); | 842 uvs[6] = ((clip->p4().x() - rect.x()) / rect.width()); |
| 838 uvs[7] = ((clip->p4().y() - rect.y()) / rect.height()); | 843 uvs[7] = ((clip->p4().y() - rect.y()) / rect.height()); |
| 839 return true; | 844 return true; |
| 840 } | 845 } |
| 841 | 846 |
| 842 gfx::Rect GLRenderer::GetBackdropBoundingBoxForRenderPassQuad( | 847 gfx::Rect GLRenderer::GetBackdropBoundingBoxForRenderPassQuad( |
| 843 DrawingFrame* frame, | 848 DrawingFrame* frame, |
| 844 const RenderPassDrawQuad* quad, | 849 const RenderPassDrawQuad* quad, |
| 845 const gfx::Transform& contents_device_transform, | 850 const gfx::Transform& contents_device_transform, |
| 851 const FilterOperations* filters, | |
| 852 const FilterOperations* background_filters, | |
| 846 const gfx::QuadF* clip_region, | 853 const gfx::QuadF* clip_region, |
| 847 bool use_aa, | 854 bool use_aa, |
| 848 gfx::Rect* unclipped_rect) { | 855 gfx::Rect* unclipped_rect) { |
| 849 gfx::QuadF scaled_region; | 856 gfx::QuadF scaled_region; |
| 850 if (!GetScaledRegion(quad->rect, clip_region, &scaled_region)) { | 857 if (!GetScaledRegion(quad->rect, clip_region, &scaled_region)) { |
| 851 scaled_region = SharedGeometryQuad().BoundingBox(); | 858 scaled_region = SharedGeometryQuad().BoundingBox(); |
| 852 } | 859 } |
| 853 | 860 |
| 854 gfx::Rect backdrop_rect = gfx::ToEnclosingRect(MathUtil::MapClippedRect( | 861 gfx::Rect backdrop_rect = gfx::ToEnclosingRect(MathUtil::MapClippedRect( |
| 855 contents_device_transform, scaled_region.BoundingBox())); | 862 contents_device_transform, scaled_region.BoundingBox())); |
| 856 | 863 |
| 857 if (ShouldApplyBackgroundFilters(quad)) { | 864 if (ShouldApplyBackgroundFilters(quad, background_filters)) { |
| 858 SkMatrix matrix; | 865 SkMatrix matrix; |
| 859 matrix.setScale(quad->filters_scale.x(), quad->filters_scale.y()); | 866 matrix.setScale(quad->filters_scale.x(), quad->filters_scale.y()); |
| 860 if (FlippedFramebuffer(frame)) { | 867 if (FlippedFramebuffer(frame)) { |
| 861 // TODO(jbroman): This probably isn't the right way to account for this. | 868 // TODO(jbroman): This probably isn't the right way to account for this. |
| 862 // Probably some combination of frame->projection_matrix, | 869 // Probably some combination of frame->projection_matrix, |
| 863 // frame->window_matrix and contents_device_transform? | 870 // frame->window_matrix and contents_device_transform? |
| 864 matrix.postScale(1, -1); | 871 matrix.postScale(1, -1); |
| 865 } | 872 } |
| 866 backdrop_rect = | 873 backdrop_rect = background_filters->MapRectReverse(backdrop_rect, matrix); |
| 867 quad->background_filters.MapRectReverse(backdrop_rect, matrix); | |
| 868 } | 874 } |
| 869 | 875 |
| 870 if (!backdrop_rect.IsEmpty() && use_aa) { | 876 if (!backdrop_rect.IsEmpty() && use_aa) { |
| 871 const int kOutsetForAntialiasing = 1; | 877 const int kOutsetForAntialiasing = 1; |
| 872 backdrop_rect.Inset(-kOutsetForAntialiasing, -kOutsetForAntialiasing); | 878 backdrop_rect.Inset(-kOutsetForAntialiasing, -kOutsetForAntialiasing); |
| 873 } | 879 } |
| 874 | 880 |
| 875 if (!quad->filters.IsEmpty()) { | 881 if (filters) { |
| 882 DCHECK(!filters->IsEmpty()); | |
| 876 // If we have filters, grab an extra one-pixel border around the | 883 // If we have filters, grab an extra one-pixel border around the |
| 877 // background, so texture edge clamping gives us a transparent border | 884 // background, so texture edge clamping gives us a transparent border |
| 878 // in case the filter expands the result. | 885 // in case the filter expands the result. |
| 879 backdrop_rect.Inset(-1, -1, -1, -1); | 886 backdrop_rect.Inset(-1, -1, -1, -1); |
| 880 } | 887 } |
| 881 | 888 |
| 882 *unclipped_rect = backdrop_rect; | 889 *unclipped_rect = backdrop_rect; |
| 883 backdrop_rect.Intersect(MoveFromDrawToWindowSpace( | 890 backdrop_rect.Intersect(MoveFromDrawToWindowSpace( |
| 884 frame, frame->current_render_pass->output_rect)); | 891 frame, frame->current_render_pass->output_rect)); |
| 885 return backdrop_rect; | 892 return backdrop_rect; |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 897 { | 904 { |
| 898 ResourceProvider::ScopedWriteLockGL lock( | 905 ResourceProvider::ScopedWriteLockGL lock( |
| 899 resource_provider_, device_background_texture->id(), false); | 906 resource_provider_, device_background_texture->id(), false); |
| 900 GetFramebufferTexture(lock.texture_id(), bounding_rect); | 907 GetFramebufferTexture(lock.texture_id(), bounding_rect); |
| 901 } | 908 } |
| 902 return device_background_texture; | 909 return device_background_texture; |
| 903 } | 910 } |
| 904 | 911 |
| 905 sk_sp<SkImage> GLRenderer::ApplyBackgroundFilters( | 912 sk_sp<SkImage> GLRenderer::ApplyBackgroundFilters( |
| 906 const RenderPassDrawQuad* quad, | 913 const RenderPassDrawQuad* quad, |
| 914 const FilterOperations* background_filters, | |
|
danakj
2016/12/01 01:50:46
if this can't be null maybe pass it by const& to h
weiliangc
2016/12/01 19:04:31
So it's every RP always have filters, but most tim
danakj
2016/12/01 21:14:34
No we don't call this function if it was null (we
ajuma
2016/12/13 15:08:11
Done.
| |
| 907 ScopedResource* background_texture, | 915 ScopedResource* background_texture, |
| 908 const gfx::RectF& rect, | 916 const gfx::RectF& rect, |
| 909 const gfx::RectF& unclipped_rect) { | 917 const gfx::RectF& unclipped_rect) { |
| 910 DCHECK(ShouldApplyBackgroundFilters(quad)); | 918 DCHECK(ShouldApplyBackgroundFilters(quad, background_filters)); |
| 911 auto use_gr_context = ScopedUseGrContext::Create(this); | 919 auto use_gr_context = ScopedUseGrContext::Create(this); |
| 912 | 920 |
| 913 gfx::Vector2dF clipping_offset = | 921 gfx::Vector2dF clipping_offset = |
| 914 (rect.top_right() - unclipped_rect.top_right()) + | 922 (rect.top_right() - unclipped_rect.top_right()) + |
| 915 (rect.bottom_left() - unclipped_rect.bottom_left()); | 923 (rect.bottom_left() - unclipped_rect.bottom_left()); |
| 916 sk_sp<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( | 924 sk_sp<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( |
| 917 quad->background_filters, gfx::SizeF(background_texture->size()), | 925 *background_filters, gfx::SizeF(background_texture->size()), |
| 918 clipping_offset); | 926 clipping_offset); |
| 919 | 927 |
| 920 // TODO(senorblanco): background filters should be moved to the | 928 // TODO(senorblanco): background filters should be moved to the |
| 921 // makeWithFilter fast-path, and go back to calling ApplyImageFilter(). | 929 // makeWithFilter fast-path, and go back to calling ApplyImageFilter(). |
| 922 // See http://crbug.com/613233. | 930 // See http://crbug.com/613233. |
| 923 if (!filter || !use_gr_context) | 931 if (!filter || !use_gr_context) |
| 924 return nullptr; | 932 return nullptr; |
| 925 | 933 |
| 926 ResourceProvider::ScopedReadLockGL lock(resource_provider_, | 934 ResourceProvider::ScopedReadLockGL lock(resource_provider_, |
| 927 background_texture->id()); | 935 background_texture->id()); |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1081 UpdateRPDQUniforms(params); | 1089 UpdateRPDQUniforms(params); |
| 1082 DrawRPDQ(*params); | 1090 DrawRPDQ(*params); |
| 1083 } | 1091 } |
| 1084 | 1092 |
| 1085 bool GLRenderer::InitializeRPDQParameters( | 1093 bool GLRenderer::InitializeRPDQParameters( |
| 1086 DrawRenderPassDrawQuadParams* params) { | 1094 DrawRenderPassDrawQuadParams* params) { |
| 1087 const RenderPassDrawQuad* quad = params->quad; | 1095 const RenderPassDrawQuad* quad = params->quad; |
| 1088 SkMatrix local_matrix; | 1096 SkMatrix local_matrix; |
| 1089 local_matrix.setTranslate(quad->filters_origin.x(), quad->filters_origin.y()); | 1097 local_matrix.setTranslate(quad->filters_origin.x(), quad->filters_origin.y()); |
| 1090 local_matrix.postScale(quad->filters_scale.x(), quad->filters_scale.y()); | 1098 local_matrix.postScale(quad->filters_scale.x(), quad->filters_scale.y()); |
| 1091 gfx::Rect dst_rect = quad->filters.MapRect(quad->rect, local_matrix); | 1099 params->filters = FiltersForPass(quad->render_pass_id); |
| 1100 params->background_filters = BackgroundFiltersForPass(quad->render_pass_id); | |
| 1101 gfx::Rect dst_rect = params->filters | |
| 1102 ? params->filters->MapRect(quad->rect, local_matrix) | |
| 1103 : quad->rect; | |
| 1092 params->dst_rect.SetRect(static_cast<float>(dst_rect.x()), | 1104 params->dst_rect.SetRect(static_cast<float>(dst_rect.x()), |
| 1093 static_cast<float>(dst_rect.y()), | 1105 static_cast<float>(dst_rect.y()), |
| 1094 static_cast<float>(dst_rect.width()), | 1106 static_cast<float>(dst_rect.width()), |
| 1095 static_cast<float>(dst_rect.height())); | 1107 static_cast<float>(dst_rect.height())); |
| 1096 gfx::Transform quad_rect_matrix; | 1108 gfx::Transform quad_rect_matrix; |
| 1097 QuadRectTransform(&quad_rect_matrix, params->quad_to_target_transform, | 1109 QuadRectTransform(&quad_rect_matrix, params->quad_to_target_transform, |
| 1098 params->dst_rect); | 1110 params->dst_rect); |
| 1099 params->contents_device_transform = | 1111 params->contents_device_transform = |
| 1100 params->window_matrix * params->projection_matrix * quad_rect_matrix; | 1112 params->window_matrix * params->projection_matrix * quad_rect_matrix; |
| 1101 params->contents_device_transform.FlattenTo2d(); | 1113 params->contents_device_transform.FlattenTo2d(); |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 1122 | 1134 |
| 1123 return true; | 1135 return true; |
| 1124 } | 1136 } |
| 1125 | 1137 |
| 1126 void GLRenderer::UpdateRPDQShadersForBlending( | 1138 void GLRenderer::UpdateRPDQShadersForBlending( |
| 1127 DrawRenderPassDrawQuadParams* params) { | 1139 DrawRenderPassDrawQuadParams* params) { |
| 1128 const RenderPassDrawQuad* quad = params->quad; | 1140 const RenderPassDrawQuad* quad = params->quad; |
| 1129 SkBlendMode blend_mode = quad->shared_quad_state->blend_mode; | 1141 SkBlendMode blend_mode = quad->shared_quad_state->blend_mode; |
| 1130 params->use_shaders_for_blending = | 1142 params->use_shaders_for_blending = |
| 1131 !CanApplyBlendModeUsingBlendFunc(blend_mode) || | 1143 !CanApplyBlendModeUsingBlendFunc(blend_mode) || |
| 1132 ShouldApplyBackgroundFilters(quad) || | 1144 ShouldApplyBackgroundFilters(quad, params->background_filters) || |
| 1133 settings_->force_blending_with_shaders; | 1145 settings_->force_blending_with_shaders; |
| 1134 | 1146 |
| 1135 if (params->use_shaders_for_blending) { | 1147 if (params->use_shaders_for_blending) { |
| 1136 DCHECK(params->frame); | 1148 DCHECK(params->frame); |
| 1137 // Compute a bounding box around the pixels that will be visible through | 1149 // Compute a bounding box around the pixels that will be visible through |
| 1138 // the quad. | 1150 // the quad. |
| 1139 gfx::Rect unclipped_rect; | 1151 gfx::Rect unclipped_rect; |
| 1140 params->background_rect = GetBackdropBoundingBoxForRenderPassQuad( | 1152 params->background_rect = GetBackdropBoundingBoxForRenderPassQuad( |
| 1141 params->frame, quad, params->contents_device_transform, | 1153 params->frame, quad, params->contents_device_transform, params->filters, |
| 1142 params->clip_region, params->use_aa, &unclipped_rect); | 1154 params->background_filters, params->clip_region, params->use_aa, |
| 1155 &unclipped_rect); | |
| 1143 | 1156 |
| 1144 if (!params->background_rect.IsEmpty()) { | 1157 if (!params->background_rect.IsEmpty()) { |
| 1145 // The pixels from the filtered background should completely replace the | 1158 // The pixels from the filtered background should completely replace the |
| 1146 // current pixel values. | 1159 // current pixel values. |
| 1147 if (blend_enabled()) | 1160 if (blend_enabled()) |
| 1148 SetBlendEnabled(false); | 1161 SetBlendEnabled(false); |
| 1149 | 1162 |
| 1150 // Read the pixels in the bounding box into a buffer R. | 1163 // Read the pixels in the bounding box into a buffer R. |
| 1151 // This function allocates a texture, which should contribute to the | 1164 // This function allocates a texture, which should contribute to the |
| 1152 // amount of memory used by render surfaces: | 1165 // amount of memory used by render surfaces: |
| 1153 // LayerTreeHost::CalculateMemoryForRenderSurfaces. | 1166 // LayerTreeHost::CalculateMemoryForRenderSurfaces. |
| 1154 params->background_texture = | 1167 params->background_texture = |
| 1155 GetBackdropTexture(params->frame, params->background_rect); | 1168 GetBackdropTexture(params->frame, params->background_rect); |
| 1156 | 1169 |
| 1157 if (ShouldApplyBackgroundFilters(quad) && params->background_texture) { | 1170 if (ShouldApplyBackgroundFilters(quad, params->background_filters) && |
| 1171 params->background_texture) { | |
| 1158 // Apply the background filters to R, so that it is applied in the | 1172 // Apply the background filters to R, so that it is applied in the |
| 1159 // pixels' coordinate space. | 1173 // pixels' coordinate space. |
| 1160 params->background_image = ApplyBackgroundFilters( | 1174 params->background_image = ApplyBackgroundFilters( |
| 1161 quad, params->background_texture.get(), | 1175 quad, params->background_filters, params->background_texture.get(), |
| 1162 gfx::RectF(params->background_rect), gfx::RectF(unclipped_rect)); | 1176 gfx::RectF(params->background_rect), gfx::RectF(unclipped_rect)); |
| 1163 if (params->background_image) { | 1177 if (params->background_image) { |
| 1164 params->background_image_id = | 1178 params->background_image_id = |
| 1165 skia::GrBackendObjectToGrGLTextureInfo( | 1179 skia::GrBackendObjectToGrGLTextureInfo( |
| 1166 params->background_image->getTextureHandle(true)) | 1180 params->background_image->getTextureHandle(true)) |
| 1167 ->fID; | 1181 ->fID; |
| 1168 DCHECK(params->background_image_id); | 1182 DCHECK(params->background_image_id); |
| 1169 } | 1183 } |
| 1170 } | 1184 } |
| 1171 } | 1185 } |
| 1172 | 1186 |
| 1173 if (!params->background_texture) { | 1187 if (!params->background_texture) { |
| 1174 // Something went wrong with reading the backdrop. | 1188 // Something went wrong with reading the backdrop. |
| 1175 DCHECK(!params->background_image_id); | 1189 DCHECK(!params->background_image_id); |
| 1176 params->use_shaders_for_blending = false; | 1190 params->use_shaders_for_blending = false; |
| 1177 } else if (params->background_image_id) { | 1191 } else if (params->background_image_id) { |
| 1178 // Reset original background texture if there is not any mask | 1192 // Reset original background texture if there is not any mask |
| 1179 if (!quad->mask_resource_id()) | 1193 if (!quad->mask_resource_id()) |
| 1180 params->background_texture.reset(); | 1194 params->background_texture.reset(); |
| 1181 } else if (CanApplyBlendModeUsingBlendFunc(blend_mode) && | 1195 } else if (CanApplyBlendModeUsingBlendFunc(blend_mode) && |
| 1182 ShouldApplyBackgroundFilters(quad)) { | 1196 ShouldApplyBackgroundFilters(quad, params->background_filters)) { |
| 1183 // Something went wrong with applying background filters to the backdrop. | 1197 // Something went wrong with applying background filters to the backdrop. |
| 1184 params->use_shaders_for_blending = false; | 1198 params->use_shaders_for_blending = false; |
| 1185 params->background_texture.reset(); | 1199 params->background_texture.reset(); |
| 1186 } | 1200 } |
| 1187 } | 1201 } |
| 1188 // Need original background texture for mask? | 1202 // Need original background texture for mask? |
| 1189 params->mask_for_background = | 1203 params->mask_for_background = |
| 1190 params->background_texture && // Have original background texture | 1204 params->background_texture && // Have original background texture |
| 1191 params->background_image_id && // Have filtered background texture | 1205 params->background_image_id && // Have filtered background texture |
| 1192 quad->mask_resource_id(); // Have mask texture | 1206 quad->mask_resource_id(); // Have mask texture |
| 1193 DCHECK_EQ(params->background_texture || params->background_image_id, | 1207 DCHECK_EQ(params->background_texture || params->background_image_id, |
| 1194 params->use_shaders_for_blending); | 1208 params->use_shaders_for_blending); |
| 1195 } | 1209 } |
| 1196 | 1210 |
| 1197 bool GLRenderer::UpdateRPDQWithSkiaFilters( | 1211 bool GLRenderer::UpdateRPDQWithSkiaFilters( |
| 1198 DrawRenderPassDrawQuadParams* params) { | 1212 DrawRenderPassDrawQuadParams* params) { |
| 1199 const RenderPassDrawQuad* quad = params->quad; | 1213 const RenderPassDrawQuad* quad = params->quad; |
| 1200 // Apply filters to the contents texture. | 1214 // Apply filters to the contents texture. |
| 1201 if (!quad->filters.IsEmpty()) { | 1215 if (params->filters) { |
| 1216 DCHECK(!params->filters->IsEmpty()); | |
| 1202 sk_sp<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( | 1217 sk_sp<SkImageFilter> filter = RenderSurfaceFilters::BuildImageFilter( |
| 1203 quad->filters, gfx::SizeF(params->contents_texture->size())); | 1218 *params->filters, gfx::SizeF(params->contents_texture->size())); |
| 1204 if (filter) { | 1219 if (filter) { |
| 1205 SkColorFilter* colorfilter_rawptr = NULL; | 1220 SkColorFilter* colorfilter_rawptr = NULL; |
| 1206 filter->asColorFilter(&colorfilter_rawptr); | 1221 filter->asColorFilter(&colorfilter_rawptr); |
| 1207 sk_sp<SkColorFilter> cf(colorfilter_rawptr); | 1222 sk_sp<SkColorFilter> cf(colorfilter_rawptr); |
| 1208 | 1223 |
| 1209 if (cf && cf->asColorMatrix(params->color_matrix)) { | 1224 if (cf && cf->asColorMatrix(params->color_matrix)) { |
| 1210 // We have a color matrix at the root of the filter DAG; apply it | 1225 // We have a color matrix at the root of the filter DAG; apply it |
| 1211 // locally in the compositor and process the rest of the DAG (if any) | 1226 // locally in the compositor and process the rest of the DAG (if any) |
| 1212 // in Skia. | 1227 // in Skia. |
| 1213 params->use_color_matrix = true; | 1228 params->use_color_matrix = true; |
| (...skipping 2841 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4055 // The alpha has already been applied when copying the RPDQ to an IOSurface. | 4070 // The alpha has already been applied when copying the RPDQ to an IOSurface. |
| 4056 GLfloat alpha = 1; | 4071 GLfloat alpha = 1; |
| 4057 gl_->ScheduleCALayerSharedStateCHROMIUM(alpha, is_clipped, clip_rect, | 4072 gl_->ScheduleCALayerSharedStateCHROMIUM(alpha, is_clipped, clip_rect, |
| 4058 sorting_context_id, gl_transform); | 4073 sorting_context_id, gl_transform); |
| 4059 gl_->ScheduleCALayerCHROMIUM( | 4074 gl_->ScheduleCALayerCHROMIUM( |
| 4060 texture_id, contents_rect, ca_layer_overlay->background_color, | 4075 texture_id, contents_rect, ca_layer_overlay->background_color, |
| 4061 ca_layer_overlay->edge_aa_mask, bounds_rect, filter); | 4076 ca_layer_overlay->edge_aa_mask, bounds_rect, filter); |
| 4062 } | 4077 } |
| 4063 | 4078 |
| 4064 } // namespace cc | 4079 } // namespace cc |
| OLD | NEW |