|
|
|
|
@@ -259,43 +259,51 @@ fn_inline r3i64_t r3i64_center_halfdim(v3i64_t center, v3i64_t halfdim) { return
|
|
|
|
|
fn r2f32_t r2f32_cut_left(r2f32_t *r, f32 value) {
|
|
|
|
|
f32 minx = r->min.x;
|
|
|
|
|
r->min.x = MIN(r->min.x + value, r->max.x);
|
|
|
|
|
return (r2f32_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
r2f32_t result = { .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2f32_t r2f32_cut_right(r2f32_t *r, f32 value) {
|
|
|
|
|
f32 maxx = r->max.x;
|
|
|
|
|
r->max.x = MAX(r->min.x, r->max.x - value);
|
|
|
|
|
return (r2f32_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
r2f32_t result = { .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2f32_t r2f32_cut_top(r2f32_t *r, f32 value) { /* Y is down */
|
|
|
|
|
f32 miny = r->min.y;
|
|
|
|
|
r->min.y = MIN(r->max.y, r->min.y + value);
|
|
|
|
|
return (r2f32_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
r2f32_t result = { .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2f32_t r2f32_cut_bottom(r2f32_t *r, f32 value) { /* Y is down */
|
|
|
|
|
f32 maxy = r->max.y;
|
|
|
|
|
r->max.y = MAX(r->min.y, r->max.y - value);
|
|
|
|
|
return (r2f32_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
r2f32_t result = { .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn r2f32_t r2f32_cut_left_no_squash(r2f32_t *r, f32 value) {
|
|
|
|
|
f32 minx = r->min.x;
|
|
|
|
|
r->min.x = r->min.x + value;
|
|
|
|
|
return (r2f32_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
r2f32_t result = { .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2f32_t r2f32_cut_right_no_squash(r2f32_t *r, f32 value) {
|
|
|
|
|
f32 maxx = r->max.x;
|
|
|
|
|
r->max.x = r->max.x - value;
|
|
|
|
|
return (r2f32_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
r2f32_t result = { .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2f32_t r2f32_cut_top_no_squash(r2f32_t *r, f32 value) { /* Y is down */
|
|
|
|
|
f32 miny = r->min.y;
|
|
|
|
|
r->min.y = r->min.y + value;
|
|
|
|
|
return (r2f32_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
r2f32_t result = { .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2f32_t r2f32_cut_bottom_no_squash(r2f32_t *r, f32 value) { /* Y is down */
|
|
|
|
|
f32 maxy = r->max.y;
|
|
|
|
|
r->max.y = r->max.y - value;
|
|
|
|
|
return (r2f32_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
r2f32_t result = { .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn r2f32_t r2f32_add_left(r2f32_t *r, f32 value) {
|
|
|
|
|
@@ -358,6 +366,7 @@ fn r2f32_t r2f32_get_bottom(const r2f32_t *r, f32 value) { /* Y is down */
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn_inline r2f32_t r2f32_shrink(r2f32_t rect, v2f32_t value) { return (r2f32_t){ v2f32_add(rect.min, value), v2f32_sub(rect.max, value) }; }
|
|
|
|
|
fn_inline r2f32_t r2f32_shrinks(r2f32_t rect, f32 value) { return (r2f32_t){ v2f32_adds(rect.min, value), v2f32_subs(rect.max, value) }; }
|
|
|
|
|
fn_inline v2f32_t r2f32_get_size(r2f32_t r) { return (v2f32_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
|
|
|
|
|
@@ -370,43 +379,51 @@ fn_inline r2f32_t r2f32_union(r2f32_t a, r2f32_t b) { return (r2f32_t){ .min.x =
|
|
|
|
|
fn r2f64_t r2f64_cut_left(r2f64_t *r, f64 value) {
|
|
|
|
|
f64 minx = r->min.x;
|
|
|
|
|
r->min.x = MIN(r->min.x + value, r->max.x);
|
|
|
|
|
return (r2f64_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
r2f64_t result = { .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2f64_t r2f64_cut_right(r2f64_t *r, f64 value) {
|
|
|
|
|
f64 maxx = r->max.x;
|
|
|
|
|
r->max.x = MAX(r->min.x, r->max.x - value);
|
|
|
|
|
return (r2f64_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
r2f64_t result = { .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2f64_t r2f64_cut_top(r2f64_t *r, f64 value) { /* Y is down */
|
|
|
|
|
f64 miny = r->min.y;
|
|
|
|
|
r->min.y = MIN(r->max.y, r->min.y + value);
|
|
|
|
|
return (r2f64_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
r2f64_t result = { .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2f64_t r2f64_cut_bottom(r2f64_t *r, f64 value) { /* Y is down */
|
|
|
|
|
f64 maxy = r->max.y;
|
|
|
|
|
r->max.y = MAX(r->min.y, r->max.y - value);
|
|
|
|
|
return (r2f64_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
r2f64_t result = { .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn r2f64_t r2f64_cut_left_no_squash(r2f64_t *r, f64 value) {
|
|
|
|
|
f64 minx = r->min.x;
|
|
|
|
|
r->min.x = r->min.x + value;
|
|
|
|
|
return (r2f64_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
r2f64_t result = { .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2f64_t r2f64_cut_right_no_squash(r2f64_t *r, f64 value) {
|
|
|
|
|
f64 maxx = r->max.x;
|
|
|
|
|
r->max.x = r->max.x - value;
|
|
|
|
|
return (r2f64_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
r2f64_t result = { .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2f64_t r2f64_cut_top_no_squash(r2f64_t *r, f64 value) { /* Y is down */
|
|
|
|
|
f64 miny = r->min.y;
|
|
|
|
|
r->min.y = r->min.y + value;
|
|
|
|
|
return (r2f64_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
r2f64_t result = { .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2f64_t r2f64_cut_bottom_no_squash(r2f64_t *r, f64 value) { /* Y is down */
|
|
|
|
|
f64 maxy = r->max.y;
|
|
|
|
|
r->max.y = r->max.y - value;
|
|
|
|
|
return (r2f64_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
r2f64_t result = { .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn r2f64_t r2f64_add_left(r2f64_t *r, f64 value) {
|
|
|
|
|
@@ -469,6 +486,7 @@ fn r2f64_t r2f64_get_bottom(const r2f64_t *r, f64 value) { /* Y is down */
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn_inline r2f64_t r2f64_shrink(r2f64_t rect, v2f64_t value) { return (r2f64_t){ v2f64_add(rect.min, value), v2f64_sub(rect.max, value) }; }
|
|
|
|
|
fn_inline r2f64_t r2f64_shrinks(r2f64_t rect, f64 value) { return (r2f64_t){ v2f64_adds(rect.min, value), v2f64_subs(rect.max, value) }; }
|
|
|
|
|
fn_inline v2f64_t r2f64_get_size(r2f64_t r) { return (v2f64_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
|
|
|
|
|
@@ -481,43 +499,51 @@ fn_inline r2f64_t r2f64_union(r2f64_t a, r2f64_t b) { return (r2f64_t){ .min.x =
|
|
|
|
|
fn r2i32_t r2i32_cut_left(r2i32_t *r, i32 value) {
|
|
|
|
|
i32 minx = r->min.x;
|
|
|
|
|
r->min.x = MIN(r->min.x + value, r->max.x);
|
|
|
|
|
return (r2i32_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
r2i32_t result = { .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2i32_t r2i32_cut_right(r2i32_t *r, i32 value) {
|
|
|
|
|
i32 maxx = r->max.x;
|
|
|
|
|
r->max.x = MAX(r->min.x, r->max.x - value);
|
|
|
|
|
return (r2i32_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
r2i32_t result = { .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2i32_t r2i32_cut_top(r2i32_t *r, i32 value) { /* Y is down */
|
|
|
|
|
i32 miny = r->min.y;
|
|
|
|
|
r->min.y = MIN(r->max.y, r->min.y + value);
|
|
|
|
|
return (r2i32_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
r2i32_t result = { .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2i32_t r2i32_cut_bottom(r2i32_t *r, i32 value) { /* Y is down */
|
|
|
|
|
i32 maxy = r->max.y;
|
|
|
|
|
r->max.y = MAX(r->min.y, r->max.y - value);
|
|
|
|
|
return (r2i32_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
r2i32_t result = { .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn r2i32_t r2i32_cut_left_no_squash(r2i32_t *r, i32 value) {
|
|
|
|
|
i32 minx = r->min.x;
|
|
|
|
|
r->min.x = r->min.x + value;
|
|
|
|
|
return (r2i32_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
r2i32_t result = { .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2i32_t r2i32_cut_right_no_squash(r2i32_t *r, i32 value) {
|
|
|
|
|
i32 maxx = r->max.x;
|
|
|
|
|
r->max.x = r->max.x - value;
|
|
|
|
|
return (r2i32_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
r2i32_t result = { .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2i32_t r2i32_cut_top_no_squash(r2i32_t *r, i32 value) { /* Y is down */
|
|
|
|
|
i32 miny = r->min.y;
|
|
|
|
|
r->min.y = r->min.y + value;
|
|
|
|
|
return (r2i32_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
r2i32_t result = { .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2i32_t r2i32_cut_bottom_no_squash(r2i32_t *r, i32 value) { /* Y is down */
|
|
|
|
|
i32 maxy = r->max.y;
|
|
|
|
|
r->max.y = r->max.y - value;
|
|
|
|
|
return (r2i32_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
r2i32_t result = { .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn r2i32_t r2i32_add_left(r2i32_t *r, i32 value) {
|
|
|
|
|
@@ -580,6 +606,7 @@ fn r2i32_t r2i32_get_bottom(const r2i32_t *r, i32 value) { /* Y is down */
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn_inline r2i32_t r2i32_shrink(r2i32_t rect, v2i32_t value) { return (r2i32_t){ v2i32_add(rect.min, value), v2i32_sub(rect.max, value) }; }
|
|
|
|
|
fn_inline r2i32_t r2i32_shrinks(r2i32_t rect, i32 value) { return (r2i32_t){ v2i32_adds(rect.min, value), v2i32_subs(rect.max, value) }; }
|
|
|
|
|
fn_inline v2i32_t r2i32_get_size(r2i32_t r) { return (v2i32_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
|
|
|
|
|
@@ -592,43 +619,51 @@ fn_inline r2i32_t r2i32_union(r2i32_t a, r2i32_t b) { return (r2i32_t){ .min.x =
|
|
|
|
|
fn r2i64_t r2i64_cut_left(r2i64_t *r, i64 value) {
|
|
|
|
|
i64 minx = r->min.x;
|
|
|
|
|
r->min.x = MIN(r->min.x + value, r->max.x);
|
|
|
|
|
return (r2i64_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
r2i64_t result = { .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2i64_t r2i64_cut_right(r2i64_t *r, i64 value) {
|
|
|
|
|
i64 maxx = r->max.x;
|
|
|
|
|
r->max.x = MAX(r->min.x, r->max.x - value);
|
|
|
|
|
return (r2i64_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
r2i64_t result = { .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2i64_t r2i64_cut_top(r2i64_t *r, i64 value) { /* Y is down */
|
|
|
|
|
i64 miny = r->min.y;
|
|
|
|
|
r->min.y = MIN(r->max.y, r->min.y + value);
|
|
|
|
|
return (r2i64_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
r2i64_t result = { .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2i64_t r2i64_cut_bottom(r2i64_t *r, i64 value) { /* Y is down */
|
|
|
|
|
i64 maxy = r->max.y;
|
|
|
|
|
r->max.y = MAX(r->min.y, r->max.y - value);
|
|
|
|
|
return (r2i64_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
r2i64_t result = { .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn r2i64_t r2i64_cut_left_no_squash(r2i64_t *r, i64 value) {
|
|
|
|
|
i64 minx = r->min.x;
|
|
|
|
|
r->min.x = r->min.x + value;
|
|
|
|
|
return (r2i64_t){ .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
r2i64_t result = { .min = {.x = minx, .y = r->min.y}, .max = {.x = r->min.x, .y =r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2i64_t r2i64_cut_right_no_squash(r2i64_t *r, i64 value) {
|
|
|
|
|
i64 maxx = r->max.x;
|
|
|
|
|
r->max.x = r->max.x - value;
|
|
|
|
|
return (r2i64_t){ .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
r2i64_t result = { .min = {.x = r->max.x, .y = r->min.y}, .max = {.x = maxx, .y = r->max.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2i64_t r2i64_cut_top_no_squash(r2i64_t *r, i64 value) { /* Y is down */
|
|
|
|
|
i64 miny = r->min.y;
|
|
|
|
|
r->min.y = r->min.y + value;
|
|
|
|
|
return (r2i64_t){ .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
r2i64_t result = { .min = {.x = r->min.x, .y = miny}, .max = {.x = r->max.x, .y = r->min.y} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
fn r2i64_t r2i64_cut_bottom_no_squash(r2i64_t *r, i64 value) { /* Y is down */
|
|
|
|
|
i64 maxy = r->max.y;
|
|
|
|
|
r->max.y = r->max.y - value;
|
|
|
|
|
return (r2i64_t){ .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
r2i64_t result = { .min = {.x = r->min.x, .y = r->max.y}, .max = {.x = r->max.x, .y = maxy} };
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn r2i64_t r2i64_add_left(r2i64_t *r, i64 value) {
|
|
|
|
|
@@ -691,6 +726,7 @@ fn r2i64_t r2i64_get_bottom(const r2i64_t *r, i64 value) { /* Y is down */
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn_inline r2i64_t r2i64_shrink(r2i64_t rect, v2i64_t value) { return (r2i64_t){ v2i64_add(rect.min, value), v2i64_sub(rect.max, value) }; }
|
|
|
|
|
fn_inline r2i64_t r2i64_shrinks(r2i64_t rect, i64 value) { return (r2i64_t){ v2i64_adds(rect.min, value), v2i64_subs(rect.max, value) }; }
|
|
|
|
|
fn_inline v2i64_t r2i64_get_size(r2i64_t r) { return (v2i64_t){r.max.x - r.min.x, r.max.y - r.min.y}; }
|
|
|
|
|
|