| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/direct_renderer.h" | 5 #include "cc/output/direct_renderer.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <unordered_map> | 9 #include <unordered_map> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 RenderPass* root_render_pass = render_passes_in_draw_order->back().get(); | 226 RenderPass* root_render_pass = render_passes_in_draw_order->back().get(); |
| 227 DCHECK(root_render_pass); | 227 DCHECK(root_render_pass); |
| 228 | 228 |
| 229 DrawingFrame frame; | 229 DrawingFrame frame; |
| 230 frame.render_passes_in_draw_order = render_passes_in_draw_order; | 230 frame.render_passes_in_draw_order = render_passes_in_draw_order; |
| 231 frame.root_render_pass = root_render_pass; | 231 frame.root_render_pass = root_render_pass; |
| 232 frame.root_damage_rect = root_render_pass->damage_rect; | 232 frame.root_damage_rect = root_render_pass->damage_rect; |
| 233 frame.root_damage_rect.Union(overlay_processor_->GetAndResetOverlayDamage()); | 233 frame.root_damage_rect.Union(overlay_processor_->GetAndResetOverlayDamage()); |
| 234 frame.root_damage_rect.Intersect(gfx::Rect(device_viewport_size)); | 234 frame.root_damage_rect.Intersect(gfx::Rect(device_viewport_size)); |
| 235 frame.device_viewport_size = device_viewport_size; | 235 frame.device_viewport_size = device_viewport_size; |
| 236 frame.device_color_space = device_color_space; |
| 236 | 237 |
| 237 // Only reshape when we know we are going to draw. Otherwise, the reshape | 238 // Only reshape when we know we are going to draw. Otherwise, the reshape |
| 238 // can leave the window at the wrong size if we never draw and the proper | 239 // can leave the window at the wrong size if we never draw and the proper |
| 239 // viewport size is never set. | 240 // viewport size is never set. |
| 240 output_surface_->Reshape(device_viewport_size, device_scale_factor, | 241 bool frame_has_alpha = frame.root_render_pass->has_transparent_background; |
| 241 device_color_space, | 242 if (device_viewport_size != reshape_surface_size_ || |
| 242 frame.root_render_pass->has_transparent_background); | 243 device_scale_factor != reshape_device_scale_factor_ || |
| 243 surface_size_for_swap_buffers_ = device_viewport_size; | 244 device_color_space != reshape_device_color_space_ || |
| 245 frame_has_alpha != reshape_has_alpha_) { |
| 246 reshape_surface_size_ = device_viewport_size; |
| 247 reshape_device_scale_factor_ = device_scale_factor; |
| 248 reshape_device_color_space_ = device_color_space; |
| 249 reshape_has_alpha_ = frame.root_render_pass->has_transparent_background; |
| 250 output_surface_->Reshape(reshape_surface_size_, |
| 251 reshape_device_scale_factor_, |
| 252 reshape_device_color_space_, reshape_has_alpha_); |
| 253 } |
| 244 | 254 |
| 245 BeginDrawingFrame(&frame); | 255 BeginDrawingFrame(&frame); |
| 246 | 256 |
| 247 // Draw all non-root render passes except for the root render pass. | 257 // Draw all non-root render passes except for the root render pass. |
| 248 for (const auto& pass : *render_passes_in_draw_order) { | 258 for (const auto& pass : *render_passes_in_draw_order) { |
| 249 if (pass.get() == root_render_pass) | 259 if (pass.get() == root_render_pass) |
| 250 break; | 260 break; |
| 251 DrawRenderPassAndExecuteCopyRequests(&frame, pass.get()); | 261 DrawRenderPassAndExecuteCopyRequests(&frame, pass.get()); |
| 252 } | 262 } |
| 253 | 263 |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 return true; | 545 return true; |
| 536 } | 546 } |
| 537 | 547 |
| 538 ScopedResource* texture = render_pass_textures_[render_pass->id].get(); | 548 ScopedResource* texture = render_pass_textures_[render_pass->id].get(); |
| 539 DCHECK(texture); | 549 DCHECK(texture); |
| 540 | 550 |
| 541 gfx::Size size = RenderPassTextureSize(render_pass); | 551 gfx::Size size = RenderPassTextureSize(render_pass); |
| 542 size.Enlarge(enlarge_pass_texture_amount_.width(), | 552 size.Enlarge(enlarge_pass_texture_amount_.width(), |
| 543 enlarge_pass_texture_amount_.height()); | 553 enlarge_pass_texture_amount_.height()); |
| 544 if (!texture->id()) { | 554 if (!texture->id()) { |
| 545 texture->Allocate(size, | 555 texture->Allocate( |
| 546 ResourceProvider::TEXTURE_HINT_IMMUTABLE_FRAMEBUFFER, | 556 size, ResourceProvider::TEXTURE_HINT_IMMUTABLE_FRAMEBUFFER, |
| 547 resource_provider_->best_texture_format(), | 557 resource_provider_->best_texture_format(), frame->device_color_space); |
| 548 output_surface_->device_color_space()); | |
| 549 } | 558 } |
| 550 DCHECK(texture->id()); | 559 DCHECK(texture->id()); |
| 551 | 560 |
| 552 if (BindFramebufferToTexture(frame, texture)) { | 561 if (BindFramebufferToTexture(frame, texture)) { |
| 553 InitializeViewport(frame, render_pass->output_rect, | 562 InitializeViewport(frame, render_pass->output_rect, |
| 554 gfx::Rect(render_pass->output_rect.size()), | 563 gfx::Rect(render_pass->output_rect.size()), |
| 555 texture->size()); | 564 texture->size()); |
| 556 return true; | 565 return true; |
| 557 } | 566 } |
| 558 | 567 |
| 559 return false; | 568 return false; |
| 560 } | 569 } |
| 561 | 570 |
| 562 bool DirectRenderer::HasAllocatedResourcesForTesting(RenderPassId id) const { | 571 bool DirectRenderer::HasAllocatedResourcesForTesting(RenderPassId id) const { |
| 563 auto iter = render_pass_textures_.find(id); | 572 auto iter = render_pass_textures_.find(id); |
| 564 return iter != render_pass_textures_.end() && iter->second->id(); | 573 return iter != render_pass_textures_.end() && iter->second->id(); |
| 565 } | 574 } |
| 566 | 575 |
| 567 // static | 576 // static |
| 568 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { | 577 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { |
| 569 return render_pass->output_rect.size(); | 578 return render_pass->output_rect.size(); |
| 570 } | 579 } |
| 571 | 580 |
| 572 } // namespace cc | 581 } // namespace cc |
| OLD | NEW |