Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(280)

Side by Side Diff: cc/output/renderer_pixeltest.cc

Issue 1136893005: Respect quad->nearest_neighbor in SoftwareRenderer::DrawTextureQuad (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | cc/output/software_renderer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « no previous file | cc/output/software_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698