Index: cc/quads/draw_polygon_unittest.cc |
diff --git a/cc/quads/draw_polygon_unittest.cc b/cc/quads/draw_polygon_unittest.cc |
deleted file mode 100644 |
index 27cfed43816b02bc64df851c03d4806bf6efe268..0000000000000000000000000000000000000000 |
--- a/cc/quads/draw_polygon_unittest.cc |
+++ /dev/null |
@@ -1,190 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include <limits> |
-#include <vector> |
- |
-#include "cc/output/bsp_compare_result.h" |
-#include "cc/quads/draw_polygon.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "ui/gfx/transform.h" |
- |
-namespace cc { |
-namespace { |
- |
-#define CREATE_NEW_DRAW_POLYGON(name, points_vector, normal, polygon_id) \ |
- DrawPolygon name(NULL, points_vector, normal, polygon_id) |
- |
-#define EXPECT_FLOAT_WITHIN_EPSILON_OF(a, b) \ |
- EXPECT_TRUE(std::abs(a - b) < std::numeric_limits<float>::epsilon()); |
- |
-#define EXPECT_POINT_EQ(point_a, point_b) \ |
- EXPECT_FLOAT_EQ(point_a.x(), point_b.x()); \ |
- EXPECT_FLOAT_EQ(point_a.y(), point_b.y()); \ |
- EXPECT_FLOAT_EQ(point_a.z(), point_b.z()); |
- |
-static void ValidatePoints(const DrawPolygon& polygon, |
- const std::vector<gfx::Point3F>& points) { |
- EXPECT_EQ(polygon.points().size(), points.size()); |
- for (size_t i = 0; i < points.size(); i++) { |
- EXPECT_POINT_EQ(polygon.points()[i], points[i]); |
- } |
-} |
- |
-// Two quads are definitely not touching and so no split should occur. |
-TEST(DrawPolygonSplitTest, NotTouchingNoSplit) { |
- std::vector<gfx::Point3F> vertices_a; |
- vertices_a.push_back(gfx::Point3F(0.0f, 10.0f, 0.0f)); |
- vertices_a.push_back(gfx::Point3F(0.0f, 0.0f, 0.0f)); |
- vertices_a.push_back(gfx::Point3F(10.0f, 0.0f, 0.0f)); |
- vertices_a.push_back(gfx::Point3F(10.0f, 10.0f, 0.0f)); |
- std::vector<gfx::Point3F> vertices_b; |
- vertices_b.push_back(gfx::Point3F(5.0f, 10.0f, 5.0f)); |
- vertices_b.push_back(gfx::Point3F(5.0f, 0.0f, 15.0f)); |
- vertices_b.push_back(gfx::Point3F(5.0f, 0.0f, 15.0f)); |
- vertices_b.push_back(gfx::Point3F(5.0f, 10.0f, 5.0f)); |
- |
- CREATE_NEW_DRAW_POLYGON( |
- polygon_a, vertices_a, gfx::Vector3dF(0.0f, 0.0f, 1.0f), 0); |
- CREATE_NEW_DRAW_POLYGON( |
- polygon_b, vertices_b, gfx::Vector3dF(-1.0f, 0.0f, 0.0f), 1); |
- |
- EXPECT_EQ(DrawPolygon::SideCompare(polygon_b, polygon_a), BSP_FRONT); |
-} |
- |
-// One quad is resting against another, but doesn't cross its plane so no split |
-// should occur. |
-TEST(DrawPolygonSplitTest, BarelyTouchingNoSplit) { |
- std::vector<gfx::Point3F> vertices_a; |
- vertices_a.push_back(gfx::Point3F(0.0f, 10.0f, 0.0f)); |
- vertices_a.push_back(gfx::Point3F(0.0f, 0.0f, 0.0f)); |
- vertices_a.push_back(gfx::Point3F(10.0f, 0.0f, 0.0f)); |
- vertices_a.push_back(gfx::Point3F(10.0f, 10.0f, 0.0f)); |
- std::vector<gfx::Point3F> vertices_b; |
- vertices_b.push_back(gfx::Point3F(5.0f, 10.0f, 0.0f)); |
- vertices_b.push_back(gfx::Point3F(5.0f, 0.0f, -10.0f)); |
- vertices_b.push_back(gfx::Point3F(5.0f, 0.0f, -10.0f)); |
- vertices_b.push_back(gfx::Point3F(5.0f, 10.0f, 0.0f)); |
- |
- CREATE_NEW_DRAW_POLYGON( |
- polygon_a, vertices_a, gfx::Vector3dF(0.0f, 0.0f, 1.0f), 0); |
- CREATE_NEW_DRAW_POLYGON( |
- polygon_b, vertices_b, gfx::Vector3dF(-1.0f, 0.0f, 0.0f), 1); |
- |
- EXPECT_EQ(DrawPolygon::SideCompare(polygon_b, polygon_a), BSP_BACK); |
-} |
- |
-// One quad intersects another and becomes two pieces. |
-TEST(DrawPolygonSplitTest, BasicSplit) { |
- std::vector<gfx::Point3F> vertices_a; |
- vertices_a.push_back(gfx::Point3F(0.0f, 10.0f, 0.0f)); |
- vertices_a.push_back(gfx::Point3F(0.0f, 0.0f, 0.0f)); |
- vertices_a.push_back(gfx::Point3F(10.0f, 0.0f, 0.0f)); |
- vertices_a.push_back(gfx::Point3F(10.0f, 10.0f, 0.0f)); |
- std::vector<gfx::Point3F> vertices_b; |
- vertices_b.push_back(gfx::Point3F(5.0f, 10.0f, -5.0f)); |
- vertices_b.push_back(gfx::Point3F(5.0f, 0.0f, -5.0f)); |
- vertices_b.push_back(gfx::Point3F(5.0f, 0.0f, 5.0f)); |
- vertices_b.push_back(gfx::Point3F(5.0f, 10.0f, 5.0f)); |
- |
- CREATE_NEW_DRAW_POLYGON( |
- polygon_a, vertices_a, gfx::Vector3dF(0.0f, 0.0f, 1.0f), 0); |
- CREATE_NEW_DRAW_POLYGON( |
- polygon_b, vertices_b, gfx::Vector3dF(-1.0f, 0.0f, 0.0f), 1); |
- |
- EXPECT_EQ(DrawPolygon::SideCompare(polygon_b, polygon_a), BSP_SPLIT); |
- |
- scoped_ptr<DrawPolygon> front_polygon; |
- scoped_ptr<DrawPolygon> back_polygon; |
- polygon_b.Split(polygon_a, &front_polygon, &back_polygon); |
- EXPECT_EQ(DrawPolygon::SideCompare(*front_polygon, polygon_a), BSP_FRONT); |
- EXPECT_EQ(DrawPolygon::SideCompare(*back_polygon, polygon_a), BSP_BACK); |
- |
- std::vector<gfx::Point3F> test_points_a; |
- test_points_a.push_back(gfx::Point3F(5.0f, 0.0f, 0.0f)); |
- test_points_a.push_back(gfx::Point3F(5.0f, 0.0f, 5.0f)); |
- test_points_a.push_back(gfx::Point3F(5.0f, 10.0f, 5.0f)); |
- test_points_a.push_back(gfx::Point3F(5.0f, 10.0f, 0.0f)); |
- std::vector<gfx::Point3F> test_points_b; |
- test_points_b.push_back(gfx::Point3F(5.0f, 10.0f, 0.0f)); |
- test_points_b.push_back(gfx::Point3F(5.0f, 10.0f, -5.0f)); |
- test_points_b.push_back(gfx::Point3F(5.0f, 0.0f, -5.0f)); |
- test_points_b.push_back(gfx::Point3F(5.0f, 0.0f, 0.0f)); |
- ValidatePoints(*(front_polygon.get()), test_points_a); |
- ValidatePoints(*(back_polygon.get()), test_points_b); |
- |
- EXPECT_EQ(front_polygon->points().size(), 4u); |
- EXPECT_EQ(back_polygon->points().size(), 4u); |
-} |
- |
-// In this test we cut the corner of a quad so that it creates a triangle and |
-// a pentagon as a result. |
-TEST(DrawPolygonSplitTest, AngledSplit) { |
- std::vector<gfx::Point3F> vertices_a; |
- vertices_a.push_back(gfx::Point3F(0.0f, 0.0f, 0.0f)); |
- vertices_a.push_back(gfx::Point3F(0.0f, 0.0f, 10.0f)); |
- vertices_a.push_back(gfx::Point3F(10.0f, 0.0f, 10.0f)); |
- vertices_a.push_back(gfx::Point3F(10.0f, 0.0f, 0.0f)); |
- std::vector<gfx::Point3F> vertices_b; |
- vertices_b.push_back(gfx::Point3F(2.0f, 5.0f, 1.0f)); |
- vertices_b.push_back(gfx::Point3F(2.0f, -5.0f, 1.0f)); |
- vertices_b.push_back(gfx::Point3F(-1.0f, -5.0f, -2.0f)); |
- vertices_b.push_back(gfx::Point3F(-1.0f, 5.0f, -2.0f)); |
- |
- CREATE_NEW_DRAW_POLYGON( |
- polygon_a, vertices_a, gfx::Vector3dF(0.0f, 1.0f, 0.0f), 0); |
- CREATE_NEW_DRAW_POLYGON( |
- polygon_b, vertices_b, gfx::Vector3dF(0.707107f, 0.0f, -0.707107f), 1); |
- |
- EXPECT_EQ(DrawPolygon::SideCompare(polygon_a, polygon_b), BSP_SPLIT); |
- |
- scoped_ptr<DrawPolygon> front_polygon; |
- scoped_ptr<DrawPolygon> back_polygon; |
- polygon_a.Split(polygon_b, &front_polygon, &back_polygon); |
- EXPECT_EQ(DrawPolygon::SideCompare(*front_polygon, polygon_b), BSP_FRONT); |
- EXPECT_EQ(DrawPolygon::SideCompare(*back_polygon, polygon_b), BSP_BACK); |
- |
- EXPECT_EQ(front_polygon->points().size(), 3u); |
- EXPECT_EQ(back_polygon->points().size(), 5u); |
- |
- std::vector<gfx::Point3F> test_points_a; |
- test_points_a.push_back(gfx::Point3F(10.0f, 0.0f, 9.0f)); |
- test_points_a.push_back(gfx::Point3F(10.0f, 0.0f, 0.0f)); |
- test_points_a.push_back(gfx::Point3F(1.0f, 0.0f, 0.0f)); |
- std::vector<gfx::Point3F> test_points_b; |
- test_points_b.push_back(gfx::Point3F(1.0f, 0.0f, 0.0f)); |
- test_points_b.push_back(gfx::Point3F(0.0f, 0.0f, 0.0f)); |
- test_points_b.push_back(gfx::Point3F(0.0f, 0.0f, 10.0f)); |
- test_points_b.push_back(gfx::Point3F(10.0f, 0.0f, 10.0f)); |
- test_points_b.push_back(gfx::Point3F(10.0f, 0.0f, 9.0f)); |
- |
- ValidatePoints(*(front_polygon.get()), test_points_a); |
- ValidatePoints(*(back_polygon.get()), test_points_b); |
-} |
- |
-TEST(DrawPolygonTransformTest, TransformNormal) { |
- // We give this polygon no actual vertices because we're not interested |
- // in actually transforming any points, just the normal. |
- std::vector<gfx::Point3F> vertices_a; |
- CREATE_NEW_DRAW_POLYGON( |
- polygon_a, vertices_a, gfx::Vector3dF(0.707107f, 0.0f, -0.707107f), 0); |
- |
- gfx::Transform transform; |
- transform.RotateAboutYAxis(45.0); |
- // This would transform the vertices as well, but we are transforming a |
- // DrawPolygon with 0 vertices just to make sure our normal transformation |
- // using the inverse tranpose matrix gives us the right result. |
- polygon_a.TransformToScreenSpace(transform); |
- |
- // Note: We use EXPECT_FLOAT_WITHIN_EPSILON instead of EXPECT_FLOAT_EQUAL here |
- // because some architectures (e.g., Arm64) employ a fused multiply-add |
- // instruction which causes rounding asymmetry and reduces precision. |
- // http://crbug.com/401117. |
- EXPECT_FLOAT_WITHIN_EPSILON_OF(polygon_a.normal().x(), 0); |
- EXPECT_FLOAT_WITHIN_EPSILON_OF(polygon_a.normal().y(), 0); |
- EXPECT_FLOAT_WITHIN_EPSILON_OF(polygon_a.normal().z(), -1); |
-} |
- |
-} // namespace |
-} // namespace cc |