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

Side by Side Diff: cc/base/math_util.cc

Issue 2630483002: Remove 2d MapClippedQuad. (Closed)
Patch Set: rebased Created 3 years, 11 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 | « cc/base/math_util.h ('k') | cc/base/math_util_unittest.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 "cc/base/math_util.h" 5 #include "cc/base/math_util.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <limits> 9 #include <limits>
10 #ifdef __SSE__ 10 #ifdef __SSE__
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 const gfx::PointF& rhs) { 170 const gfx::PointF& rhs) {
171 return IsNearlyTheSame(lhs.x(), rhs.x()) && IsNearlyTheSame(lhs.y(), rhs.y()); 171 return IsNearlyTheSame(lhs.x(), rhs.x()) && IsNearlyTheSame(lhs.y(), rhs.y());
172 } 172 }
173 173
174 static inline bool IsNearlyTheSame(const gfx::Point3F& lhs, 174 static inline bool IsNearlyTheSame(const gfx::Point3F& lhs,
175 const gfx::Point3F& rhs) { 175 const gfx::Point3F& rhs) {
176 return IsNearlyTheSame(lhs.x(), rhs.x()) && 176 return IsNearlyTheSame(lhs.x(), rhs.x()) &&
177 IsNearlyTheSame(lhs.y(), rhs.y()) && IsNearlyTheSame(lhs.z(), rhs.z()); 177 IsNearlyTheSame(lhs.y(), rhs.y()) && IsNearlyTheSame(lhs.z(), rhs.z());
178 } 178 }
179 179
180 static inline void AddVertexToClippedQuad(const gfx::PointF& new_vertex,
181 gfx::PointF clipped_quad[8],
182 int* num_vertices_in_clipped_quad) {
183 if (*num_vertices_in_clipped_quad > 0 &&
184 IsNearlyTheSame(clipped_quad[*num_vertices_in_clipped_quad - 1],
185 new_vertex))
186 return;
187
188 clipped_quad[*num_vertices_in_clipped_quad] = new_vertex;
189 (*num_vertices_in_clipped_quad)++;
190 }
191
192 static inline void AddVertexToClippedQuad3d(const gfx::Point3F& new_vertex, 180 static inline void AddVertexToClippedQuad3d(const gfx::Point3F& new_vertex,
193 gfx::Point3F clipped_quad[8], 181 gfx::Point3F clipped_quad[8],
194 int* num_vertices_in_clipped_quad) { 182 int* num_vertices_in_clipped_quad) {
195 if (*num_vertices_in_clipped_quad > 0 && 183 if (*num_vertices_in_clipped_quad > 0 &&
196 IsNearlyTheSame(clipped_quad[*num_vertices_in_clipped_quad - 1], 184 IsNearlyTheSame(clipped_quad[*num_vertices_in_clipped_quad - 1],
197 new_vertex)) 185 new_vertex))
198 return; 186 return;
199 187
200 clipped_quad[*num_vertices_in_clipped_quad] = new_vertex; 188 clipped_quad[*num_vertices_in_clipped_quad] = new_vertex;
201 (*num_vertices_in_clipped_quad)++; 189 (*num_vertices_in_clipped_quad)++;
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 HomogeneousCoordinate hc0(result[0], result[1], result[2], result[3]); 300 HomogeneousCoordinate hc0(result[0], result[1], result[2], result[3]);
313 HomogeneousCoordinate hc1(result[4], result[5], result[6], result[7]); 301 HomogeneousCoordinate hc1(result[4], result[5], result[6], result[7]);
314 DCHECK(!hc0.ShouldBeClipped()); 302 DCHECK(!hc0.ShouldBeClipped());
315 DCHECK(!hc1.ShouldBeClipped()); 303 DCHECK(!hc1.ShouldBeClipped());
316 304
317 gfx::PointF top_left(hc0.CartesianPoint2d()); 305 gfx::PointF top_left(hc0.CartesianPoint2d());
318 gfx::PointF bottom_right(hc1.CartesianPoint2d()); 306 gfx::PointF bottom_right(hc1.CartesianPoint2d());
319 return gfx::ToEnclosedRect(gfx::BoundingRect(top_left, bottom_right)); 307 return gfx::ToEnclosedRect(gfx::BoundingRect(top_left, bottom_right));
320 } 308 }
321 309
322 void MathUtil::MapClippedQuad(const gfx::Transform& transform,
323 const gfx::QuadF& src_quad,
324 gfx::PointF clipped_quad[8],
325 int* num_vertices_in_clipped_quad) {
326 HomogeneousCoordinate h1 =
327 MapHomogeneousPoint(transform, gfx::Point3F(src_quad.p1()));
328 HomogeneousCoordinate h2 =
329 MapHomogeneousPoint(transform, gfx::Point3F(src_quad.p2()));
330 HomogeneousCoordinate h3 =
331 MapHomogeneousPoint(transform, gfx::Point3F(src_quad.p3()));
332 HomogeneousCoordinate h4 =
333 MapHomogeneousPoint(transform, gfx::Point3F(src_quad.p4()));
334
335 // The order of adding the vertices to the array is chosen so that
336 // clockwise / counter-clockwise orientation is retained.
337
338 *num_vertices_in_clipped_quad = 0;
339
340 if (!h1.ShouldBeClipped()) {
341 AddVertexToClippedQuad(
342 h1.CartesianPoint2d(), clipped_quad, num_vertices_in_clipped_quad);
343 }
344
345 if (h1.ShouldBeClipped() ^ h2.ShouldBeClipped()) {
346 AddVertexToClippedQuad(ComputeClippedCartesianPoint2dForEdge(h1, h2),
347 clipped_quad, num_vertices_in_clipped_quad);
348 }
349
350 if (!h2.ShouldBeClipped()) {
351 AddVertexToClippedQuad(
352 h2.CartesianPoint2d(), clipped_quad, num_vertices_in_clipped_quad);
353 }
354
355 if (h2.ShouldBeClipped() ^ h3.ShouldBeClipped()) {
356 AddVertexToClippedQuad(ComputeClippedCartesianPoint2dForEdge(h2, h3),
357 clipped_quad, num_vertices_in_clipped_quad);
358 }
359
360 if (!h3.ShouldBeClipped()) {
361 AddVertexToClippedQuad(
362 h3.CartesianPoint2d(), clipped_quad, num_vertices_in_clipped_quad);
363 }
364
365 if (h3.ShouldBeClipped() ^ h4.ShouldBeClipped()) {
366 AddVertexToClippedQuad(ComputeClippedCartesianPoint2dForEdge(h3, h4),
367 clipped_quad, num_vertices_in_clipped_quad);
368 }
369
370 if (!h4.ShouldBeClipped()) {
371 AddVertexToClippedQuad(
372 h4.CartesianPoint2d(), clipped_quad, num_vertices_in_clipped_quad);
373 }
374
375 if (h4.ShouldBeClipped() ^ h1.ShouldBeClipped()) {
376 AddVertexToClippedQuad(ComputeClippedCartesianPoint2dForEdge(h4, h1),
377 clipped_quad, num_vertices_in_clipped_quad);
378 }
379
380 if (*num_vertices_in_clipped_quad > 2 &&
381 IsNearlyTheSame(clipped_quad[0],
382 clipped_quad[*num_vertices_in_clipped_quad - 1]))
383 *num_vertices_in_clipped_quad -= 1;
384
385 DCHECK_LE(*num_vertices_in_clipped_quad, 8);
386 }
387
388 bool MathUtil::MapClippedQuad3d(const gfx::Transform& transform, 310 bool MathUtil::MapClippedQuad3d(const gfx::Transform& transform,
389 const gfx::QuadF& src_quad, 311 const gfx::QuadF& src_quad,
390 gfx::Point3F clipped_quad[8], 312 gfx::Point3F clipped_quad[8],
391 int* num_vertices_in_clipped_quad) { 313 int* num_vertices_in_clipped_quad) {
392 HomogeneousCoordinate h1 = 314 HomogeneousCoordinate h1 =
393 MapHomogeneousPoint(transform, gfx::Point3F(src_quad.p1())); 315 MapHomogeneousPoint(transform, gfx::Point3F(src_quad.p1()));
394 HomogeneousCoordinate h2 = 316 HomogeneousCoordinate h2 =
395 MapHomogeneousPoint(transform, gfx::Point3F(src_quad.p2())); 317 MapHomogeneousPoint(transform, gfx::Point3F(src_quad.p2()));
396 HomogeneousCoordinate h3 = 318 HomogeneousCoordinate h3 =
397 MapHomogeneousPoint(transform, gfx::Point3F(src_quad.p3())); 319 MapHomogeneousPoint(transform, gfx::Point3F(src_quad.p3()));
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 const gfx::PointF& right) { 907 const gfx::PointF& right) {
986 return IsNearlyTheSame(left, right); 908 return IsNearlyTheSame(left, right);
987 } 909 }
988 910
989 bool MathUtil::IsNearlyTheSameForTesting(const gfx::Point3F& left, 911 bool MathUtil::IsNearlyTheSameForTesting(const gfx::Point3F& left,
990 const gfx::Point3F& right) { 912 const gfx::Point3F& right) {
991 return IsNearlyTheSame(left, right); 913 return IsNearlyTheSame(left, right);
992 } 914 }
993 915
994 } // namespace cc 916 } // namespace cc
OLDNEW
« no previous file with comments | « cc/base/math_util.h ('k') | cc/base/math_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698