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/software_renderer.h" | 5 #include "cc/output/software_renderer.h" |
6 | 6 |
7 #include "cc/layers/quad_sink.h" | 7 #include "cc/layers/quad_sink.h" |
8 #include "cc/output/compositor_frame_metadata.h" | 8 #include "cc/output/compositor_frame_metadata.h" |
9 #include "cc/output/software_output_device.h" | 9 #include "cc/output/software_output_device.h" |
10 #include "cc/quads/render_pass.h" | 10 #include "cc/quads/render_pass.h" |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 inner_quad->visible_rect = visible_rect; | 88 inner_quad->visible_rect = visible_rect; |
89 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); | 89 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); |
90 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); | 90 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); |
91 | 91 |
92 RenderPassList list; | 92 RenderPassList list; |
93 list.push_back(root_render_pass.PassAs<RenderPass>()); | 93 list.push_back(root_render_pass.PassAs<RenderPass>()); |
94 | 94 |
95 float device_scale_factor = 1.f; | 95 float device_scale_factor = 1.f; |
96 gfx::Rect device_viewport_rect(outer_size); | 96 gfx::Rect device_viewport_rect(outer_size); |
97 renderer()->DrawFrame(&list, | 97 renderer()->DrawFrame(&list, |
98 NULL, | |
99 device_scale_factor, | 98 device_scale_factor, |
100 device_viewport_rect, | 99 device_viewport_rect, |
101 device_viewport_rect, | 100 device_viewport_rect, |
102 false); | 101 false); |
103 | 102 |
104 SkBitmap output; | 103 SkBitmap output; |
105 output.setConfig( | 104 output.setConfig( |
106 SkBitmap::kARGB_8888_Config, outer_rect.width(), outer_rect.height()); | 105 SkBitmap::kARGB_8888_Config, outer_rect.width(), outer_rect.height()); |
107 output.allocPixels(); | 106 output.allocPixels(); |
108 renderer()->GetFramebufferPixels(output.getPixels(), outer_rect); | 107 renderer()->GetFramebufferPixels(output.getPixels(), outer_rect); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 false); | 191 false); |
193 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); | 192 root_render_pass->AppendQuad(inner_quad.PassAs<DrawQuad>()); |
194 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); | 193 root_render_pass->AppendQuad(outer_quad.PassAs<DrawQuad>()); |
195 | 194 |
196 RenderPassList list; | 195 RenderPassList list; |
197 list.push_back(root_render_pass.PassAs<RenderPass>()); | 196 list.push_back(root_render_pass.PassAs<RenderPass>()); |
198 | 197 |
199 float device_scale_factor = 1.f; | 198 float device_scale_factor = 1.f; |
200 gfx::Rect device_viewport_rect(outer_size); | 199 gfx::Rect device_viewport_rect(outer_size); |
201 renderer()->DrawFrame(&list, | 200 renderer()->DrawFrame(&list, |
202 NULL, | |
203 device_scale_factor, | 201 device_scale_factor, |
204 device_viewport_rect, | 202 device_viewport_rect, |
205 device_viewport_rect, | 203 device_viewport_rect, |
206 false); | 204 false); |
207 | 205 |
208 SkBitmap output; | 206 SkBitmap output; |
209 output.setConfig( | 207 output.setConfig( |
210 SkBitmap::kARGB_8888_Config, outer_size.width(), outer_size.height()); | 208 SkBitmap::kARGB_8888_Config, outer_size.width(), outer_size.height()); |
211 output.allocPixels(); | 209 output.allocPixels(); |
212 renderer()->GetFramebufferPixels(output.getPixels(), outer_rect); | 210 renderer()->GetFramebufferPixels(output.getPixels(), outer_rect); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 false); | 271 false); |
274 quad->visible_rect = visible_rect; | 272 quad->visible_rect = visible_rect; |
275 root_render_pass->AppendQuad(quad.PassAs<DrawQuad>()); | 273 root_render_pass->AppendQuad(quad.PassAs<DrawQuad>()); |
276 | 274 |
277 RenderPassList list; | 275 RenderPassList list; |
278 list.push_back(root_render_pass.PassAs<RenderPass>()); | 276 list.push_back(root_render_pass.PassAs<RenderPass>()); |
279 | 277 |
280 float device_scale_factor = 1.f; | 278 float device_scale_factor = 1.f; |
281 gfx::Rect device_viewport_rect(tile_size); | 279 gfx::Rect device_viewport_rect(tile_size); |
282 renderer()->DrawFrame(&list, | 280 renderer()->DrawFrame(&list, |
283 NULL, | |
284 device_scale_factor, | 281 device_scale_factor, |
285 device_viewport_rect, | 282 device_viewport_rect, |
286 device_viewport_rect, | 283 device_viewport_rect, |
287 false); | 284 false); |
288 | 285 |
289 SkBitmap output; | 286 SkBitmap output; |
290 output.setConfig( | 287 output.setConfig( |
291 SkBitmap::kARGB_8888_Config, tile_size.width(), tile_size.height()); | 288 SkBitmap::kARGB_8888_Config, tile_size.width(), tile_size.height()); |
292 output.allocPixels(); | 289 output.allocPixels(); |
293 renderer()->GetFramebufferPixels(output.getPixels(), tile_rect); | 290 renderer()->GetFramebufferPixels(output.getPixels(), tile_rect); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 output.allocPixels(); | 325 output.allocPixels(); |
329 | 326 |
330 // Draw a fullscreen green quad in a first frame. | 327 // Draw a fullscreen green quad in a first frame. |
331 RenderPass::Id root_clear_pass_id(1, 0); | 328 RenderPass::Id root_clear_pass_id(1, 0); |
332 TestRenderPass* root_clear_pass = AddRenderPass( | 329 TestRenderPass* root_clear_pass = AddRenderPass( |
333 &list, root_clear_pass_id, viewport_rect, gfx::Transform()); | 330 &list, root_clear_pass_id, viewport_rect, gfx::Transform()); |
334 AddQuad(root_clear_pass, viewport_rect, SK_ColorGREEN); | 331 AddQuad(root_clear_pass, viewport_rect, SK_ColorGREEN); |
335 | 332 |
336 renderer()->DecideRenderPassAllocationsForFrame(list); | 333 renderer()->DecideRenderPassAllocationsForFrame(list); |
337 renderer()->DrawFrame(&list, | 334 renderer()->DrawFrame(&list, |
338 NULL, | |
339 device_scale_factor, | 335 device_scale_factor, |
340 viewport_rect, | 336 viewport_rect, |
341 viewport_rect, | 337 viewport_rect, |
342 false); | 338 false); |
343 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect); | 339 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect); |
344 | 340 |
345 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); | 341 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); |
346 EXPECT_EQ(SK_ColorGREEN, | 342 EXPECT_EQ(SK_ColorGREEN, |
347 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); | 343 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); |
348 | 344 |
349 list.clear(); | 345 list.clear(); |
350 | 346 |
351 // Draw a smaller magenta rect without filling the viewport in a separate | 347 // Draw a smaller magenta rect without filling the viewport in a separate |
352 // frame. | 348 // frame. |
353 gfx::Rect smaller_rect(20, 20, 60, 60); | 349 gfx::Rect smaller_rect(20, 20, 60, 60); |
354 | 350 |
355 RenderPass::Id root_smaller_pass_id(2, 0); | 351 RenderPass::Id root_smaller_pass_id(2, 0); |
356 TestRenderPass* root_smaller_pass = AddRenderPass( | 352 TestRenderPass* root_smaller_pass = AddRenderPass( |
357 &list, root_smaller_pass_id, viewport_rect, gfx::Transform()); | 353 &list, root_smaller_pass_id, viewport_rect, gfx::Transform()); |
358 AddQuad(root_smaller_pass, smaller_rect, SK_ColorMAGENTA); | 354 AddQuad(root_smaller_pass, smaller_rect, SK_ColorMAGENTA); |
359 | 355 |
360 renderer()->DecideRenderPassAllocationsForFrame(list); | 356 renderer()->DecideRenderPassAllocationsForFrame(list); |
361 renderer()->DrawFrame(&list, | 357 renderer()->DrawFrame(&list, |
362 NULL, | |
363 device_scale_factor, | 358 device_scale_factor, |
364 viewport_rect, | 359 viewport_rect, |
365 viewport_rect, | 360 viewport_rect, |
366 false); | 361 false); |
367 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect); | 362 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect); |
368 | 363 |
369 // If we didn't clear, the borders should still be green. | 364 // If we didn't clear, the borders should still be green. |
370 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); | 365 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); |
371 EXPECT_EQ(SK_ColorGREEN, | 366 EXPECT_EQ(SK_ColorGREEN, |
372 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); | 367 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); |
(...skipping 30 matching lines...) Expand all Loading... |
403 AddRenderPass(&list, root_clear_pass_id, viewport_rect, gfx::Transform()); | 398 AddRenderPass(&list, root_clear_pass_id, viewport_rect, gfx::Transform()); |
404 AddRenderPassQuad(root_clear_pass, smaller_pass); | 399 AddRenderPassQuad(root_clear_pass, smaller_pass); |
405 AddQuad(root_clear_pass, viewport_rect, SK_ColorGREEN); | 400 AddQuad(root_clear_pass, viewport_rect, SK_ColorGREEN); |
406 | 401 |
407 // Interior pass quad has smaller visible rect. | 402 // Interior pass quad has smaller visible rect. |
408 gfx::Rect interior_visible_rect(30, 30, 40, 40); | 403 gfx::Rect interior_visible_rect(30, 30, 40, 40); |
409 root_clear_pass->quad_list[0]->visible_rect = interior_visible_rect; | 404 root_clear_pass->quad_list[0]->visible_rect = interior_visible_rect; |
410 | 405 |
411 renderer()->DecideRenderPassAllocationsForFrame(list); | 406 renderer()->DecideRenderPassAllocationsForFrame(list); |
412 renderer()->DrawFrame(&list, | 407 renderer()->DrawFrame(&list, |
413 NULL, | |
414 device_scale_factor, | 408 device_scale_factor, |
415 viewport_rect, | 409 viewport_rect, |
416 viewport_rect, | 410 viewport_rect, |
417 false); | 411 false); |
418 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect); | 412 renderer()->GetFramebufferPixels(output.getPixels(), viewport_rect); |
419 | 413 |
420 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); | 414 EXPECT_EQ(SK_ColorGREEN, output.getColor(0, 0)); |
421 EXPECT_EQ( | 415 EXPECT_EQ( |
422 SK_ColorGREEN, | 416 SK_ColorGREEN, |
423 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); | 417 output.getColor(viewport_rect.width() - 1, viewport_rect.height() - 1)); |
424 | 418 |
425 // Part outside visible rect should remain green. | 419 // Part outside visible rect should remain green. |
426 EXPECT_EQ(SK_ColorGREEN, output.getColor(smaller_rect.x(), smaller_rect.y())); | 420 EXPECT_EQ(SK_ColorGREEN, output.getColor(smaller_rect.x(), smaller_rect.y())); |
427 EXPECT_EQ( | 421 EXPECT_EQ( |
428 SK_ColorGREEN, | 422 SK_ColorGREEN, |
429 output.getColor(smaller_rect.right() - 1, smaller_rect.bottom() - 1)); | 423 output.getColor(smaller_rect.right() - 1, smaller_rect.bottom() - 1)); |
430 | 424 |
431 EXPECT_EQ( | 425 EXPECT_EQ( |
432 SK_ColorMAGENTA, | 426 SK_ColorMAGENTA, |
433 output.getColor(interior_visible_rect.x(), interior_visible_rect.y())); | 427 output.getColor(interior_visible_rect.x(), interior_visible_rect.y())); |
434 EXPECT_EQ(SK_ColorMAGENTA, | 428 EXPECT_EQ(SK_ColorMAGENTA, |
435 output.getColor(interior_visible_rect.right() - 1, | 429 output.getColor(interior_visible_rect.right() - 1, |
436 interior_visible_rect.bottom() - 1)); | 430 interior_visible_rect.bottom() - 1)); |
437 } | 431 } |
438 | 432 |
439 } // namespace | 433 } // namespace |
440 } // namespace cc | 434 } // namespace cc |
OLD | NEW |