| 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 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 texture->Free(); | 174 texture->Free(); |
| 175 } | 175 } |
| 176 | 176 |
| 177 // Delete RenderPass textures from the previous frame that will not be used | 177 // Delete RenderPass textures from the previous frame that will not be used |
| 178 // again. | 178 // again. |
| 179 for (size_t i = 0; i < passes_to_delete.size(); ++i) | 179 for (size_t i = 0; i < passes_to_delete.size(); ++i) |
| 180 render_pass_textures_.erase(passes_to_delete[i]); | 180 render_pass_textures_.erase(passes_to_delete[i]); |
| 181 | 181 |
| 182 for (size_t i = 0; i < render_passes_in_draw_order.size(); ++i) { | 182 for (size_t i = 0; i < render_passes_in_draw_order.size(); ++i) { |
| 183 if (render_pass_textures_.count(render_passes_in_draw_order[i]->id) == 0) { | 183 if (render_pass_textures_.count(render_passes_in_draw_order[i]->id) == 0) { |
| 184 scoped_ptr<ScopedResource> texture = | 184 std::unique_ptr<ScopedResource> texture = |
| 185 ScopedResource::Create(resource_provider_); | 185 ScopedResource::Create(resource_provider_); |
| 186 render_pass_textures_[render_passes_in_draw_order[i]->id] = | 186 render_pass_textures_[render_passes_in_draw_order[i]->id] = |
| 187 std::move(texture); | 187 std::move(texture); |
| 188 } | 188 } |
| 189 } | 189 } |
| 190 } | 190 } |
| 191 | 191 |
| 192 void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order, | 192 void DirectRenderer::DrawFrame(RenderPassList* render_passes_in_draw_order, |
| 193 float device_scale_factor, | 193 float device_scale_factor, |
| 194 const gfx::Rect& device_viewport_rect, | 194 const gfx::Rect& device_viewport_rect, |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 } | 390 } |
| 391 | 391 |
| 392 std::vector<gfx::QuadF> quads; | 392 std::vector<gfx::QuadF> quads; |
| 393 poly.ToQuads2D(&quads); | 393 poly.ToQuads2D(&quads); |
| 394 for (size_t i = 0; i < quads.size(); ++i) { | 394 for (size_t i = 0; i < quads.size(); ++i) { |
| 395 DoDrawQuad(frame, poly.original_ref(), &quads[i]); | 395 DoDrawQuad(frame, poly.original_ref(), &quads[i]); |
| 396 } | 396 } |
| 397 } | 397 } |
| 398 | 398 |
| 399 void DirectRenderer::FlushPolygons( | 399 void DirectRenderer::FlushPolygons( |
| 400 std::deque<scoped_ptr<DrawPolygon>>* poly_list, | 400 std::deque<std::unique_ptr<DrawPolygon>>* poly_list, |
| 401 DrawingFrame* frame, | 401 DrawingFrame* frame, |
| 402 const gfx::Rect& render_pass_scissor, | 402 const gfx::Rect& render_pass_scissor, |
| 403 bool use_render_pass_scissor) { | 403 bool use_render_pass_scissor) { |
| 404 if (poly_list->empty()) { | 404 if (poly_list->empty()) { |
| 405 return; | 405 return; |
| 406 } | 406 } |
| 407 | 407 |
| 408 BspTree bsp_tree(poly_list); | 408 BspTree bsp_tree(poly_list); |
| 409 BspWalkActionDrawPolygon action_handler(this, frame, render_pass_scissor, | 409 BspWalkActionDrawPolygon action_handler(this, frame, render_pass_scissor, |
| 410 use_render_pass_scissor); | 410 use_render_pass_scissor); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 mode = SURFACE_INITIALIZATION_MODE_FULL_SURFACE_CLEAR; | 475 mode = SURFACE_INITIALIZATION_MODE_FULL_SURFACE_CLEAR; |
| 476 } else { | 476 } else { |
| 477 mode = SURFACE_INITIALIZATION_MODE_PRESERVE; | 477 mode = SURFACE_INITIALIZATION_MODE_PRESERVE; |
| 478 } | 478 } |
| 479 | 479 |
| 480 PrepareSurfaceForPass( | 480 PrepareSurfaceForPass( |
| 481 frame, mode, | 481 frame, mode, |
| 482 MoveFromDrawToWindowSpace(frame, render_pass_scissor_in_draw_space)); | 482 MoveFromDrawToWindowSpace(frame, render_pass_scissor_in_draw_space)); |
| 483 | 483 |
| 484 const QuadList& quad_list = render_pass->quad_list; | 484 const QuadList& quad_list = render_pass->quad_list; |
| 485 std::deque<scoped_ptr<DrawPolygon>> poly_list; | 485 std::deque<std::unique_ptr<DrawPolygon>> poly_list; |
| 486 | 486 |
| 487 int next_polygon_id = 0; | 487 int next_polygon_id = 0; |
| 488 int last_sorting_context_id = 0; | 488 int last_sorting_context_id = 0; |
| 489 for (auto it = quad_list.BackToFrontBegin(); it != quad_list.BackToFrontEnd(); | 489 for (auto it = quad_list.BackToFrontBegin(); it != quad_list.BackToFrontEnd(); |
| 490 ++it) { | 490 ++it) { |
| 491 const DrawQuad& quad = **it; | 491 const DrawQuad& quad = **it; |
| 492 | 492 |
| 493 if (render_pass_is_clipped && | 493 if (render_pass_is_clipped && |
| 494 ShouldSkipQuad(quad, render_pass_scissor_in_draw_space)) { | 494 ShouldSkipQuad(quad, render_pass_scissor_in_draw_space)) { |
| 495 continue; | 495 continue; |
| 496 } | 496 } |
| 497 | 497 |
| 498 if (last_sorting_context_id != quad.shared_quad_state->sorting_context_id) { | 498 if (last_sorting_context_id != quad.shared_quad_state->sorting_context_id) { |
| 499 last_sorting_context_id = quad.shared_quad_state->sorting_context_id; | 499 last_sorting_context_id = quad.shared_quad_state->sorting_context_id; |
| 500 FlushPolygons(&poly_list, frame, render_pass_scissor_in_draw_space, | 500 FlushPolygons(&poly_list, frame, render_pass_scissor_in_draw_space, |
| 501 render_pass_is_clipped); | 501 render_pass_is_clipped); |
| 502 } | 502 } |
| 503 | 503 |
| 504 // This layer is in a 3D sorting context so we add it to the list of | 504 // This layer is in a 3D sorting context so we add it to the list of |
| 505 // polygons to go into the BSP tree. | 505 // polygons to go into the BSP tree. |
| 506 if (quad.shared_quad_state->sorting_context_id != 0) { | 506 if (quad.shared_quad_state->sorting_context_id != 0) { |
| 507 scoped_ptr<DrawPolygon> new_polygon(new DrawPolygon( | 507 std::unique_ptr<DrawPolygon> new_polygon(new DrawPolygon( |
| 508 *it, gfx::RectF(quad.visible_rect), | 508 *it, gfx::RectF(quad.visible_rect), |
| 509 quad.shared_quad_state->quad_to_target_transform, next_polygon_id++)); | 509 quad.shared_quad_state->quad_to_target_transform, next_polygon_id++)); |
| 510 if (new_polygon->points().size() > 2u) { | 510 if (new_polygon->points().size() > 2u) { |
| 511 poly_list.push_back(std::move(new_polygon)); | 511 poly_list.push_back(std::move(new_polygon)); |
| 512 } | 512 } |
| 513 continue; | 513 continue; |
| 514 } | 514 } |
| 515 | 515 |
| 516 // We are not in a 3d sorting context, so we should draw the quad normally. | 516 // We are not in a 3d sorting context, so we should draw the quad normally. |
| 517 SetScissorStateForQuad(frame, quad, render_pass_scissor_in_draw_space, | 517 SetScissorStateForQuad(frame, quad, render_pass_scissor_in_draw_space, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 auto iter = render_pass_textures_.find(id); | 564 auto iter = render_pass_textures_.find(id); |
| 565 return iter != render_pass_textures_.end() && iter->second->id(); | 565 return iter != render_pass_textures_.end() && iter->second->id(); |
| 566 } | 566 } |
| 567 | 567 |
| 568 // static | 568 // static |
| 569 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { | 569 gfx::Size DirectRenderer::RenderPassTextureSize(const RenderPass* render_pass) { |
| 570 return render_pass->output_rect.size(); | 570 return render_pass->output_rect.size(); |
| 571 } | 571 } |
| 572 | 572 |
| 573 } // namespace cc | 573 } // namespace cc |
| OLD | NEW |