17 #define qsort_r BLI_qsort_r
22 # pragma GCC diagnostic error "-Wpadded"
28 #define USE_FREE_STRIP
60 # pragma GCC diagnostic ignored "-Wpadded"
64 #define EPSILON 0.0000001f
65 #define EPSILON_MERGE 0.00001f
67 # define EPSILON_BIAS 0.000001f
73 #define CORNERFLAGS (BLF | TRF | TLF | BRF)
102 return box->
v[
BL]->
y;
107 return box->
v[
TR]->
y;
130 box->
v[
TR]->
x = f + box->
w;
137 box->
v[
BL]->
x = f - box->
w;
144 box->
v[
TR]->
y = f + box->
h;
151 box->
v[
BL]->
y = f - box->
h;
164 return box->
w * box->
h;
180 return b >
a ?
b :
a;
193 # define BOXDEBUG(b) \
194 printf("\tBox Debug i %i, w:%.3f h:%.3f x:%.3f y:%.3f\n", b->index, b->w, b->h, b->x, b->y)
204 const BoxPack *b1 = p1, *b2 = p2;
227 static int vertex_sort(
const void *p1,
const void *p2,
void *vs_ctx_p)
236 #ifdef USE_FREE_STRIP
271 uint box_index, verts_pack_len, i, j, k;
272 uint *vertex_pack_indices;
274 float tot_x = 0.0f, tot_y = 0.0f;
292 vertex_pack_indices =
MEM_mallocN(
sizeof(
int[3]) * (
size_t)
len,
"BoxPack Indices");
296 for (box = boxarray, box_index = 0, i = 0; box_index <
len; box_index++, box++) {
347 box->
x = box->
y = 0.0f;
349 for (i = 0; i < 4; i++) {
350 box->
v[i]->
used =
true;
356 for (i = 0; i < 3; i++) {
357 vertex_pack_indices[i] = box->
v[i + 1]->
index;
364 for (box_index = 1; box_index <
len; box_index++, box++) {
370 qsort_r(vertex_pack_indices, (
size_t)verts_pack_len,
sizeof(
int),
vertex_sort, &vs_ctx);
372 #ifdef USE_FREE_STRIP
374 i = verts_pack_len - 1;
375 while ((i != 0) && vs_ctx.
vertarray[vertex_pack_indices[i]].
free == 0) {
378 verts_pack_len = i + 1;
385 for (i = 0; i < verts_pack_len && isect; i++) {
386 vert = &vs_ctx.
vertarray[vertex_pack_indices[i]];
394 for (j = 0; (j < 4) && isect; j++) {
435 for (box_test = boxarray; box_test != box; box_test++) {
497 # define A (vert->trb->v[TL])
498 # define B (vert->tlb->v[TR])
499 # define MASK (BLF | BRF)
502 A->free &=
B->free & ~
MASK;
506 B->free &=
A->free & ~
MASK;
518 else if (vert->
tlb->
h > vert->
trb->
h) {
528 # define A (vert->blb->v[BR])
529 # define B (vert->brb->v[BL])
530 # define MASK (TRF | TLF)
533 A->free &=
B->free & ~
MASK;
537 B->free &=
A->free & ~
MASK;
549 else if (vert->
blb->
h > vert->
brb->
h) {
560 # define A (vert->blb->v[TL])
561 # define B (vert->tlb->v[BL])
562 # define MASK (TRF | BRF)
565 A->free &=
B->free & ~
MASK;
569 B->free &=
A->free & ~
MASK;
581 else if (vert->
tlb->
w > vert->
blb->
w) {
592 # define A (vert->brb->v[TR])
593 # define B (vert->trb->v[BR])
594 # define MASK (TLF | BLF)
597 A->free &=
B->free & ~
MASK;
601 B->free &=
A->free & ~
MASK;
613 else if (vert->
trb->
w > vert->
brb->
w) {
622 for (k = 0; k < 4; k++) {
623 if (box->
v[k]->
used ==
false) {
624 box->
v[k]->
used =
true;
628 vertex_pack_indices[verts_pack_len] = box->
v[k]->
index;
648 for (box_index = 0; box_index <
len; box_index++) {
649 box = boxarray + box_index;
650 box->
v[0] = box->
v[1] = box->
v[2] = box->
v[3] =
NULL;
674 if (box->w > space->w || box->h > space->h) {
684 if (box->w == space->w && box->h == space->h) {
689 else if (box->w == space->w) {
695 else if (box->h == space->h) {
717 int area_hsplit_large = space->w * (space->h - box->h);
718 int area_vsplit_large = (space->w - box->w) * space->h;
723 if (area_hsplit_large > area_vsplit_large) {
724 new_space->x = space->x + box->w;
725 new_space->y = space->y;
726 new_space->w = space->w - box->w;
727 new_space->h = box->h;
733 new_space->x = space->x;
734 new_space->y = space->y + box->h;
735 new_space->w = box->w;
736 new_space->h = space->h - box->h;
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Strict compiler flags for areas of code we want to ensure don't do conversions without us knowing abo...
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
Read Guarded memory(de)allocation.
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert * v
BLI_INLINE void box_v34x_update(BoxPack *box)
BLI_INLINE void box_v34y_update(BoxPack *box)
static int box_areasort(const void *p1, const void *p2)
static void vert_bias_update(BoxVert *v)
static float box_xmax_get(const BoxPack *box)
void BLI_box_pack_2d_fixedarea(ListBase *boxes, int width, int height, ListBase *packed)
static bool box_isect(const BoxPack *box_a, const BoxPack *box_b)
static float box_ymax_get(const BoxPack *box)
static float box_ymin_get(const BoxPack *box)
static int vertex_sort(const void *p1, const void *p2, void *vs_ctx_p)
static void box_xmin_set(BoxPack *box, const float f)
static void box_ymin_set(BoxPack *box, const float f)
static float max_ff(const float a, const float b)
static void box_ymax_set(BoxPack *box, const float f)
static float box_xmin_get(const BoxPack *box)
BLI_INLINE int quad_flag(uint q)
void BLI_box_pack_2d(BoxPack *boxarray, const uint len, float *r_tot_x, float *r_tot_y)
static float box_area(const BoxPack *box)
static void box_xmax_set(BoxPack *box, const float f)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
struct BoxPack * isect_cache[4]