blob: 7baa216b7d25858f051250463dd97970e6ee0f03 [file] [log] [blame]
Chris Dalton8610e9c2019-05-09 11:07:10 -06001/*
2 * Copyright 2019 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "src/gpu/ccpr/GrOctoBounds.h"
9
10#ifdef SK_DEBUG
11void GrOctoBounds::validateBoundsAreTight() const {
12 this->validateBoundsAreTight([](bool cond, const char* file, int line, const char* code) {
13 SkASSERTF(cond, "%s(%d): assertion failure: \"assert(%s)\"", file, line, code);
14 });
15}
16
17void GrOctoBounds::validateBoundsAreTight(const std::function<void(
18 bool cond, const char* file, int line, const char* code)>& validateFn) const {
Chris Daltond1c57b62019-05-09 12:27:17 -060019 constexpr static float epsilon = 1e-3f;
Chris Dalton8610e9c2019-05-09 11:07:10 -060020
21 float l=fBounds.left(), l45=fBounds45.left();
22 float t=fBounds.top(), t45=fBounds45.top();
23 float r=fBounds.right(), r45=fBounds45.right();
24 float b=fBounds.bottom(), b45=fBounds45.bottom();
25
26#define VALIDATE(CODE) validateFn(CODE, __FILE__, __LINE__, #CODE)
27 // Verify diagonals are inside far corners of the dev bounds.
28 VALIDATE(l45 >= Get_x45(l,b) - epsilon);
29 VALIDATE(t45 >= Get_y45(l,t) - epsilon);
30 VALIDATE(r45 <= Get_x45(r,t) + epsilon);
31 VALIDATE(b45 <= Get_y45(r,b) + epsilon);
32 // Verify verticals and horizontals are inside far corners of the 45-degree dev bounds.
33 VALIDATE(l >= Get_x(l45,t45) - epsilon);
34 VALIDATE(t >= Get_y(r45,t45) - epsilon);
35 VALIDATE(r <= Get_x(r45,b45) + epsilon);
36 VALIDATE(b <= Get_y(l45,b45) + epsilon);
37 // Verify diagonals are outside middle corners of the dev bounds.
38 VALIDATE(l45 <= Get_x45(r,b) + epsilon);
39 VALIDATE(l45 <= Get_x45(l,t) + epsilon);
40 VALIDATE(t45 <= Get_y45(l,b) + epsilon);
41 VALIDATE(t45 <= Get_y45(r,t) + epsilon);
42 VALIDATE(r45 >= Get_x45(l,t) - epsilon);
43 VALIDATE(r45 >= Get_x45(r,b) - epsilon);
44 VALIDATE(b45 >= Get_y45(r,t) - epsilon);
45 VALIDATE(b45 >= Get_y45(l,b) - epsilon);
46 // Verify verticals and horizontals are outside middle corners of the 45-degree dev bounds.
47 VALIDATE(l <= Get_x(l45,b45) + epsilon);
48 VALIDATE(l <= Get_x(r45,t45) + epsilon);
49 VALIDATE(t <= Get_y(r45,b45) + epsilon);
50 VALIDATE(t <= Get_y(l45,t45) + epsilon);
51 VALIDATE(r >= Get_x(r45,t45) - epsilon);
52 VALIDATE(r >= Get_x(l45,b45) - epsilon);
53 VALIDATE(b >= Get_y(l45,t45) - epsilon);
54 VALIDATE(b >= Get_y(r45,b45) - epsilon);
55#undef VALIDATE
56}
57#endif