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 "base/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
6 #include "cc/output/gl_renderer.h" | 6 #include "cc/output/gl_renderer.h" |
7 #include "cc/quads/draw_quad.h" | 7 #include "cc/quads/draw_quad.h" |
8 #include "cc/quads/picture_draw_quad.h" | 8 #include "cc/quads/picture_draw_quad.h" |
9 #include "cc/quads/texture_draw_quad.h" | 9 #include "cc/quads/texture_draw_quad.h" |
10 #include "cc/resources/video_resource_updater.h" | 10 #include "cc/resources/video_resource_updater.h" |
(...skipping 2470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2481 | 2481 |
2482 RenderPassList pass_list; | 2482 RenderPassList pass_list; |
2483 pass_list.push_back(pass.Pass()); | 2483 pass_list.push_back(pass.Pass()); |
2484 | 2484 |
2485 EXPECT_TRUE(this->RunPixelTest( | 2485 EXPECT_TRUE(this->RunPixelTest( |
2486 &pass_list, | 2486 &pass_list, |
2487 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), | 2487 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), |
2488 ExactPixelComparator(true))); | 2488 ExactPixelComparator(true))); |
2489 } | 2489 } |
2490 | 2490 |
| 2491 // This disables filtering by setting |nearest_neighbor| to true on the |
| 2492 // TextureDrawQuad. |
| 2493 TYPED_TEST(SoftwareRendererPixelTest, TextureDrawQuadNearestNeighbor) { |
| 2494 gfx::Rect viewport(this->device_viewport_size_); |
| 2495 bool nearest_neighbor = true; |
| 2496 |
| 2497 SkBitmap bitmap; |
| 2498 bitmap.allocN32Pixels(2, 2); |
| 2499 { |
| 2500 SkAutoLockPixels lock(bitmap); |
| 2501 SkCanvas canvas(bitmap); |
| 2502 canvas.drawPoint(0, 0, SK_ColorGREEN); |
| 2503 canvas.drawPoint(0, 1, SK_ColorBLUE); |
| 2504 canvas.drawPoint(1, 0, SK_ColorBLUE); |
| 2505 canvas.drawPoint(1, 1, SK_ColorGREEN); |
| 2506 } |
| 2507 |
| 2508 gfx::Size tile_size(2, 2); |
| 2509 ResourceProvider::ResourceId resource = |
| 2510 this->resource_provider_->CreateResource( |
| 2511 tile_size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
| 2512 RGBA_8888); |
| 2513 |
| 2514 { |
| 2515 SkAutoLockPixels lock(bitmap); |
| 2516 this->resource_provider_->CopyToResource( |
| 2517 resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size); |
| 2518 } |
| 2519 |
| 2520 RenderPassId id(1, 1); |
| 2521 gfx::Transform transform_to_root; |
| 2522 scoped_ptr<RenderPass> pass = |
| 2523 CreateTestRenderPass(id, viewport, transform_to_root); |
| 2524 |
| 2525 gfx::Transform content_to_target_transform; |
| 2526 SharedQuadState* shared_state = CreateTestSharedQuadState( |
| 2527 content_to_target_transform, viewport, pass.get()); |
| 2528 |
| 2529 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 2530 TextureDrawQuad* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 2531 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, false, |
| 2532 gfx::PointF(0, 0), gfx::PointF(1, 1), SK_ColorBLACK, |
| 2533 vertex_opacity, false, nearest_neighbor); |
| 2534 |
| 2535 RenderPassList pass_list; |
| 2536 pass_list.push_back(pass.Pass()); |
| 2537 |
| 2538 EXPECT_TRUE(this->RunPixelTest( |
| 2539 &pass_list, |
| 2540 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), |
| 2541 FuzzyPixelComparator(false, 2.f, 0.f, 256.f, 256, 0.f))); |
| 2542 } |
| 2543 |
| 2544 // This ensures filtering is enabled by setting |nearest_neighbor| to false on |
| 2545 // the TextureDrawQuad. |
| 2546 TYPED_TEST(SoftwareRendererPixelTest, TextureDrawQuadLinear) { |
| 2547 gfx::Rect viewport(this->device_viewport_size_); |
| 2548 bool nearest_neighbor = false; |
| 2549 |
| 2550 SkBitmap bitmap; |
| 2551 bitmap.allocN32Pixels(2, 2); |
| 2552 { |
| 2553 SkAutoLockPixels lock(bitmap); |
| 2554 SkCanvas canvas(bitmap); |
| 2555 canvas.drawPoint(0, 0, SK_ColorGREEN); |
| 2556 canvas.drawPoint(0, 1, SK_ColorBLUE); |
| 2557 canvas.drawPoint(1, 0, SK_ColorBLUE); |
| 2558 canvas.drawPoint(1, 1, SK_ColorGREEN); |
| 2559 } |
| 2560 |
| 2561 gfx::Size tile_size(2, 2); |
| 2562 ResourceProvider::ResourceId resource = |
| 2563 this->resource_provider_->CreateResource( |
| 2564 tile_size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
| 2565 RGBA_8888); |
| 2566 |
| 2567 { |
| 2568 SkAutoLockPixels lock(bitmap); |
| 2569 this->resource_provider_->CopyToResource( |
| 2570 resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size); |
| 2571 } |
| 2572 |
| 2573 RenderPassId id(1, 1); |
| 2574 gfx::Transform transform_to_root; |
| 2575 scoped_ptr<RenderPass> pass = |
| 2576 CreateTestRenderPass(id, viewport, transform_to_root); |
| 2577 |
| 2578 gfx::Transform content_to_target_transform; |
| 2579 SharedQuadState* shared_state = CreateTestSharedQuadState( |
| 2580 content_to_target_transform, viewport, pass.get()); |
| 2581 |
| 2582 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 2583 TextureDrawQuad* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 2584 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, false, |
| 2585 gfx::PointF(0, 0), gfx::PointF(1, 1), SK_ColorBLACK, |
| 2586 vertex_opacity, false, nearest_neighbor); |
| 2587 |
| 2588 RenderPassList pass_list; |
| 2589 pass_list.push_back(pass.Pass()); |
| 2590 |
| 2591 // Allow for a small amount of error as the blending alogrithm used by Skia is |
| 2592 // affected by the offset in the expanded rect. |
| 2593 EXPECT_TRUE(this->RunPixelTest( |
| 2594 &pass_list, |
| 2595 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers_linear.png")), |
| 2596 FuzzyPixelComparator(false, 100.f, 0.f, 16.f, 16.f, 0.f))); |
| 2597 } |
| 2598 |
2491 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNonIdentityScale) { | 2599 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNonIdentityScale) { |
2492 gfx::Size pile_tile_size(1000, 1000); | 2600 gfx::Size pile_tile_size(1000, 1000); |
2493 gfx::Rect viewport(this->device_viewport_size_); | 2601 gfx::Rect viewport(this->device_viewport_size_); |
2494 // TODO(enne): the renderer should figure this out on its own. | 2602 // TODO(enne): the renderer should figure this out on its own. |
2495 ResourceFormat texture_format = RGBA_8888; | 2603 ResourceFormat texture_format = RGBA_8888; |
2496 bool nearest_neighbor = false; | 2604 bool nearest_neighbor = false; |
2497 | 2605 |
2498 RenderPassId id(1, 1); | 2606 RenderPassId id(1, 1); |
2499 gfx::Transform transform_to_root; | 2607 gfx::Transform transform_to_root; |
2500 scoped_ptr<RenderPass> pass = | 2608 scoped_ptr<RenderPass> pass = |
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2942 ? FILE_PATH_LITERAL("four_blue_green_checkers.png") | 3050 ? FILE_PATH_LITERAL("four_blue_green_checkers.png") |
2943 : FILE_PATH_LITERAL("checkers_big.png"); | 3051 : FILE_PATH_LITERAL("checkers_big.png"); |
2944 EXPECT_TRUE(this->RunPixelTest(&pass_list, base::FilePath(path), | 3052 EXPECT_TRUE(this->RunPixelTest(&pass_list, base::FilePath(path), |
2945 ExactPixelComparator(true))); | 3053 ExactPixelComparator(true))); |
2946 } | 3054 } |
2947 | 3055 |
2948 #endif // !defined(OS_ANDROID) | 3056 #endif // !defined(OS_ANDROID) |
2949 | 3057 |
2950 } // namespace | 3058 } // namespace |
2951 } // namespace cc | 3059 } // namespace cc |
OLD | NEW |