| 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 875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 backdrop_rect.Intersect(MoveFromDrawToWindowSpace( | 886 backdrop_rect.Intersect(MoveFromDrawToWindowSpace( |
| 887 frame, frame->current_render_pass->output_rect)); | 887 frame, frame->current_render_pass->output_rect)); |
| 888 return backdrop_rect; | 888 return backdrop_rect; |
| 889 } | 889 } |
| 890 | 890 |
| 891 std::unique_ptr<ScopedResource> GLRenderer::GetBackdropTexture( | 891 std::unique_ptr<ScopedResource> GLRenderer::GetBackdropTexture( |
| 892 const gfx::Rect& bounding_rect) { | 892 const gfx::Rect& bounding_rect) { |
| 893 std::unique_ptr<ScopedResource> device_background_texture = | 893 std::unique_ptr<ScopedResource> device_background_texture = |
| 894 ScopedResource::Create(resource_provider_); | 894 ScopedResource::Create(resource_provider_); |
| 895 // CopyTexImage2D fails when called on a texture having immutable storage. | 895 // CopyTexImage2D fails when called on a texture having immutable storage. |
| 896 device_background_texture->Allocate( | 896 device_background_texture->Allocate(bounding_rect.size(), |
| 897 bounding_rect.size(), ResourceProvider::TEXTURE_HINT_DEFAULT, | 897 ResourceProvider::TEXTURE_HINT_DEFAULT, |
| 898 resource_provider_->best_texture_format()); | 898 resource_provider_->best_texture_format(), |
| 899 output_surface_->device_color_space()); |
| 899 { | 900 { |
| 900 ResourceProvider::ScopedWriteLockGL lock( | 901 ResourceProvider::ScopedWriteLockGL lock( |
| 901 resource_provider_, device_background_texture->id(), false); | 902 resource_provider_, device_background_texture->id(), false); |
| 902 GetFramebufferTexture(lock.texture_id(), bounding_rect); | 903 GetFramebufferTexture(lock.texture_id(), bounding_rect); |
| 903 } | 904 } |
| 904 return device_background_texture; | 905 return device_background_texture; |
| 905 } | 906 } |
| 906 | 907 |
| 907 sk_sp<SkImage> GLRenderer::ApplyBackgroundFilters( | 908 sk_sp<SkImage> GLRenderer::ApplyBackgroundFilters( |
| 908 const RenderPassDrawQuad* quad, | 909 const RenderPassDrawQuad* quad, |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1032 DrawRenderPassDrawQuadParams params; | 1033 DrawRenderPassDrawQuadParams params; |
| 1033 params.quad = quad; | 1034 params.quad = quad; |
| 1034 params.frame = frame; | 1035 params.frame = frame; |
| 1035 params.clip_region = clip_region; | 1036 params.clip_region = clip_region; |
| 1036 params.window_matrix = frame->window_matrix; | 1037 params.window_matrix = frame->window_matrix; |
| 1037 params.projection_matrix = frame->projection_matrix; | 1038 params.projection_matrix = frame->projection_matrix; |
| 1038 if (bypass != render_pass_bypass_quads_.end()) { | 1039 if (bypass != render_pass_bypass_quads_.end()) { |
| 1039 TileDrawQuad* tile_quad = &bypass->second; | 1040 TileDrawQuad* tile_quad = &bypass->second; |
| 1040 // RGBA_8888 here is arbitrary and unused. | 1041 // RGBA_8888 here is arbitrary and unused. |
| 1041 Resource tile_resource(tile_quad->resource_id(), tile_quad->texture_size, | 1042 Resource tile_resource(tile_quad->resource_id(), tile_quad->texture_size, |
| 1042 ResourceFormat::RGBA_8888); | 1043 ResourceFormat::RGBA_8888, |
| 1044 output_surface_->device_color_space()); |
| 1043 // The projection matrix used by GLRenderer has a flip. As tile texture | 1045 // The projection matrix used by GLRenderer has a flip. As tile texture |
| 1044 // inputs are oriented opposite to framebuffer outputs, don't flip via | 1046 // inputs are oriented opposite to framebuffer outputs, don't flip via |
| 1045 // texture coords and let the projection matrix naturallyd o it. | 1047 // texture coords and let the projection matrix naturallyd o it. |
| 1046 params.flip_texture = false; | 1048 params.flip_texture = false; |
| 1047 params.contents_texture = &tile_resource; | 1049 params.contents_texture = &tile_resource; |
| 1048 DrawRenderPassQuadInternal(¶ms); | 1050 DrawRenderPassQuadInternal(¶ms); |
| 1049 } else { | 1051 } else { |
| 1050 ScopedResource* contents_texture = | 1052 ScopedResource* contents_texture = |
| 1051 render_pass_textures_[quad->render_pass_id].get(); | 1053 render_pass_textures_[quad->render_pass_id].get(); |
| 1052 DCHECK(contents_texture); | 1054 DCHECK(contents_texture); |
| (...skipping 1338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2391 yuv_to_rgb_multiplied[i] = yuv_to_rgb[i] * quad->resource_multiplier; | 2393 yuv_to_rgb_multiplied[i] = yuv_to_rgb[i] * quad->resource_multiplier; |
| 2392 | 2394 |
| 2393 for (int i = 0; i < 3; ++i) { | 2395 for (int i = 0; i < 3; ++i) { |
| 2394 yuv_adjust_with_offset[i] = | 2396 yuv_adjust_with_offset[i] = |
| 2395 yuv_adjust[i] * adjustment_multiplier / quad->resource_multiplier - | 2397 yuv_adjust[i] * adjustment_multiplier / quad->resource_multiplier - |
| 2396 quad->resource_offset; | 2398 quad->resource_offset; |
| 2397 } | 2399 } |
| 2398 | 2400 |
| 2399 if (lut_texture_location != -1) { | 2401 if (lut_texture_location != -1) { |
| 2400 unsigned int lut_texture = color_lut_cache_.GetLUT( | 2402 unsigned int lut_texture = color_lut_cache_.GetLUT( |
| 2401 quad->video_color_space, output_surface_->color_space(), 32); | 2403 quad->video_color_space, output_surface_->device_color_space(), 32); |
| 2402 gl_->ActiveTexture(GL_TEXTURE5); | 2404 gl_->ActiveTexture(GL_TEXTURE5); |
| 2403 gl_->BindTexture(GL_TEXTURE_2D, lut_texture); | 2405 gl_->BindTexture(GL_TEXTURE_2D, lut_texture); |
| 2404 gl_->Uniform1i(lut_texture_location, 5); | 2406 gl_->Uniform1i(lut_texture_location, 5); |
| 2405 gl_->ActiveTexture(GL_TEXTURE0); | 2407 gl_->ActiveTexture(GL_TEXTURE0); |
| 2406 } | 2408 } |
| 2407 | 2409 |
| 2408 if (resource_multiplier_location != -1) { | 2410 if (resource_multiplier_location != -1) { |
| 2409 gl_->Uniform1f(resource_multiplier_location, quad->resource_multiplier); | 2411 gl_->Uniform1f(resource_multiplier_location, quad->resource_multiplier); |
| 2410 } | 2412 } |
| 2411 | 2413 |
| (...skipping 1564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3976 gfx::QuadF device_layer_quad = MathUtil::MapQuad( | 3978 gfx::QuadF device_layer_quad = MathUtil::MapQuad( |
| 3977 params.contents_device_transform, SharedGeometryQuad(), &clipped); | 3979 params.contents_device_transform, SharedGeometryQuad(), &clipped); |
| 3978 LayerQuad device_layer_edges(device_layer_quad); | 3980 LayerQuad device_layer_edges(device_layer_quad); |
| 3979 InflateAntiAliasingDistances(device_layer_quad, &device_layer_edges, | 3981 InflateAntiAliasingDistances(device_layer_quad, &device_layer_edges, |
| 3980 params.edge); | 3982 params.edge); |
| 3981 } | 3983 } |
| 3982 | 3984 |
| 3983 // Establish destination texture. | 3985 // Establish destination texture. |
| 3984 *resource = overlay_resource_pool_->AcquireResource( | 3986 *resource = overlay_resource_pool_->AcquireResource( |
| 3985 gfx::Size(updated_dst_rect.width(), updated_dst_rect.height()), | 3987 gfx::Size(updated_dst_rect.width(), updated_dst_rect.height()), |
| 3986 ResourceFormat::RGBA_8888); | 3988 ResourceFormat::RGBA_8888, output_surface_->device_color_space()); |
| 3987 ResourceProvider::ScopedWriteLockGL destination(resource_provider_, | 3989 ResourceProvider::ScopedWriteLockGL destination(resource_provider_, |
| 3988 (*resource)->id(), false); | 3990 (*resource)->id(), false); |
| 3989 GLuint temp_fbo; | 3991 GLuint temp_fbo; |
| 3990 | 3992 |
| 3991 gl_->GenFramebuffers(1, &temp_fbo); | 3993 gl_->GenFramebuffers(1, &temp_fbo); |
| 3992 gl_->BindFramebuffer(GL_FRAMEBUFFER, temp_fbo); | 3994 gl_->BindFramebuffer(GL_FRAMEBUFFER, temp_fbo); |
| 3993 gl_->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, | 3995 gl_->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, |
| 3994 destination.target(), destination.texture_id(), 0); | 3996 destination.target(), destination.texture_id(), 0); |
| 3995 DCHECK(gl_->CheckFramebufferStatus(GL_FRAMEBUFFER) == | 3997 DCHECK(gl_->CheckFramebufferStatus(GL_FRAMEBUFFER) == |
| 3996 GL_FRAMEBUFFER_COMPLETE); | 3998 GL_FRAMEBUFFER_COMPLETE); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4060 | 4062 |
| 4061 gl_->ScheduleCALayerSharedStateCHROMIUM( | 4063 gl_->ScheduleCALayerSharedStateCHROMIUM( |
| 4062 ca_layer_overlay->shared_state->opacity, is_clipped, clip_rect, | 4064 ca_layer_overlay->shared_state->opacity, is_clipped, clip_rect, |
| 4063 sorting_context_id, gl_transform); | 4065 sorting_context_id, gl_transform); |
| 4064 gl_->ScheduleCALayerCHROMIUM( | 4066 gl_->ScheduleCALayerCHROMIUM( |
| 4065 texture_id, contents_rect, ca_layer_overlay->background_color, | 4067 texture_id, contents_rect, ca_layer_overlay->background_color, |
| 4066 ca_layer_overlay->edge_aa_mask, bounds_rect, filter); | 4068 ca_layer_overlay->edge_aa_mask, bounds_rect, filter); |
| 4067 } | 4069 } |
| 4068 | 4070 |
| 4069 } // namespace cc | 4071 } // namespace cc |
| OLD | NEW |