5c08e3c357
This adds aliases like skvx::float2, float4, etc. to SkVx.h and goes through existing usages of SkVx to standardize on those aliases, or refer to the full name directly. In particular, this lets us clean up the equivalent aliases in src/gpu/tessellate, src/gpu/graphite/VectorTypes and src/gpu/ganesh/GrVx Where possible, I switched to using skvx::Foo directly and leveraged auto to make it less redundant. Headers always used the full type except for PatchWriter.h and Rect.h because of the number of their usages. In this case, the alias is scoped to private so it can't leak. This is prep to migrate older code that is still using SkNx and its aliases like Sk4f to SkVx as well. Change-Id: I9dd104e83cf17c2b88995a047cfd2e2b0fe6fac2 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/541058 Reviewed-by: Brian Osman <brianosman@google.com> Commit-Queue: Michael Ludwig <michaelludwig@google.com>
122 lines
4.4 KiB
C++
122 lines
4.4 KiB
C++
/*
|
|
* Copyright 2021 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#include "src/gpu/graphite/geom/Rect.h"
|
|
#include "tests/Test.h"
|
|
|
|
namespace skgpu::graphite {
|
|
|
|
#define CHECK(A) REPORTER_ASSERT(reporter, A)
|
|
|
|
DEF_GRAPHITE_TEST(skgpu_Rect, reporter) {
|
|
using float2 = skvx::float2;
|
|
using float4 = skvx::float4;
|
|
|
|
const SkRect skRect = SkRect::MakeLTRB(1,-3,4,0);
|
|
const Rect rect = skRect;
|
|
CHECK(rect == rect);
|
|
CHECK(rect == skRect); // promotes 'skRect' to a Rect for ==
|
|
CHECK(rect.asSkRect() == skRect); // converts 'rect' to SkRect for ==
|
|
|
|
for (const float l : {0,1,2}) {
|
|
for (const float t : {-4,-3,-2}) {
|
|
for (const float r : {3,4,5}) {
|
|
for (const float b : {-1,0,1}) {
|
|
const Rect rect2(l,t,r,b);
|
|
const SkRect skRect2{l,t,r,b};
|
|
|
|
CHECK(rect2 == rect2);
|
|
CHECK(rect2 == Rect(float2(l,t), float2(r,b)));
|
|
CHECK(rect2 == Rect(skRect2));
|
|
CHECK(rect2.asSkRect() == skRect2);
|
|
|
|
CHECK((rect2 == rect) == (rect == rect2));
|
|
CHECK((rect2 != rect) == (rect != rect2));
|
|
CHECK((rect != rect2) == !(rect == rect2));
|
|
|
|
CHECK(rect2 == Rect::XYWH(l, t, r - l, b - t));
|
|
CHECK(rect2 == Rect::XYWH(float2(l, t), float2(r - l, b - t)));
|
|
if (l == 0 && t == 0) {
|
|
CHECK(rect2 == Rect::WH(r - l, b - t));
|
|
CHECK(rect2 == Rect::WH(float2(r - l, b - t)));
|
|
}
|
|
CHECK(rect2 == Rect::FromVals(rect2.vals()));
|
|
|
|
CHECK(rect2.x() == l);
|
|
CHECK(rect2.y() == t);
|
|
CHECK(rect2.left() == l);
|
|
CHECK(rect2.top() == t);
|
|
CHECK(rect2.right() == r);
|
|
CHECK(rect2.bot() == b);
|
|
CHECK(all(rect2.topLeft() == float2(l,t)));
|
|
CHECK(all(rect2.botRight() == float2(r,b)));
|
|
CHECK(all(rect2.ltrb() == float4(l,t,r,b)));
|
|
CHECK(all(rect2.vals() == float4(l,t,-r,-b)));
|
|
|
|
Rect setTest(-99,-99,99,99);
|
|
CHECK(setTest != rect2);
|
|
setTest.setLeft(l);
|
|
setTest.setTop(t);
|
|
setTest.setRight(r);
|
|
setTest.setBot(b);
|
|
CHECK(setTest == rect2);
|
|
|
|
setTest = Rect(-99,-99,99,99);
|
|
CHECK(setTest != rect2);
|
|
setTest.setTopLeft({l,t});
|
|
setTest.setBotRight({r,b});
|
|
CHECK(setTest == rect2);
|
|
|
|
for (int i = 0; i < 4; ++i) {
|
|
Rect rnan = rect2;
|
|
CHECK(!rnan.isEmptyNegativeOrNaN());
|
|
rnan.vals()[i] = std::numeric_limits<float>::quiet_NaN();
|
|
CHECK(rnan.isEmptyNegativeOrNaN());
|
|
}
|
|
|
|
CHECK(all(rect2.size() == float2(skRect2.width(), skRect2.height())));
|
|
CHECK(all(rect2.center() == float2(skRect2.centerX(), skRect2.centerY())));
|
|
CHECK(rect2.area() == skRect2.height() * skRect2.width());
|
|
|
|
CHECK(rect.intersects(rect2) == rect2.intersects(rect));
|
|
CHECK(rect.intersects(rect2) == skRect.intersects(skRect2));
|
|
CHECK(rect.contains(rect2) == skRect.contains(skRect2));
|
|
CHECK(rect2.contains(rect) == skRect2.contains(skRect));
|
|
|
|
CHECK(rect2.makeRoundIn() == SkRect::Make(skRect2.roundIn()));
|
|
CHECK(rect2.makeRoundOut() == SkRect::Make(skRect2.roundOut()));
|
|
CHECK(rect2.makeInset(.5f) == skRect2.makeInset(.5f, .5f));
|
|
CHECK(rect2.makeInset({.5f, -.25f}) == skRect2.makeInset(.5f, -.25f));
|
|
CHECK(rect2.makeOutset(.5f) == skRect2.makeOutset(.5f, .5f));
|
|
CHECK(rect2.makeOutset({.5f, -.25f}) == skRect2.makeOutset(.5f, -.25f));
|
|
CHECK(rect2.makeOffset({.5f, -.25f}) == skRect2.makeOffset(.5f, -.25f));
|
|
|
|
SkRect skJoin = skRect;
|
|
skJoin.join(skRect2);
|
|
CHECK(rect.makeJoin(rect2) == skJoin);
|
|
CHECK(rect.makeJoin(rect2) == rect2.makeJoin(rect));
|
|
|
|
CHECK(rect.intersects(rect2) == !rect.makeIntersect(rect2).isEmptyNegativeOrNaN());
|
|
CHECK(rect.makeIntersect(rect2) == rect2.makeIntersect(rect));
|
|
if (rect.intersects(rect2)) {
|
|
CHECK(skRect.intersects(skRect2));
|
|
SkRect skIsect;
|
|
CHECK(skIsect.intersect(skRect, skRect2));
|
|
CHECK(rect.makeIntersect(rect2) == Rect(skIsect));
|
|
}
|
|
|
|
const Rect rect3{r,b,l,t}; // intentionally out of order
|
|
const SkRect skRect3{r,b,l,t};
|
|
CHECK(rect3.isEmptyNegativeOrNaN());
|
|
CHECK(skRect3.isEmpty());
|
|
CHECK(rect3.makeSorted() == skRect3.makeSorted());
|
|
CHECK(rect3.makeSorted() == rect2);
|
|
}}}}
|
|
}
|
|
|
|
} // namespace skgpu
|