|
@@ -1,4 +1,4 @@
|
|
-// stb_rect_pack.h - v0.08 - public domain - rectangle packing
|
|
|
|
|
|
+// stb_rect_pack.h - v0.10 - public domain - rectangle packing
|
|
// Sean Barrett 2014
|
|
// Sean Barrett 2014
|
|
//
|
|
//
|
|
// Useful for e.g. packing rectangular textures into an atlas.
|
|
// Useful for e.g. packing rectangular textures into an atlas.
|
|
@@ -32,6 +32,8 @@
|
|
//
|
|
//
|
|
// Version history:
|
|
// Version history:
|
|
//
|
|
//
|
|
|
|
+// 0.10 (2016-10-25) remove cast-away-const to avoid warnings
|
|
|
|
+// 0.09 (2016-08-27) fix compiler warnings
|
|
// 0.08 (2015-09-13) really fix bug with empty rects (w=0 or h=0)
|
|
// 0.08 (2015-09-13) really fix bug with empty rects (w=0 or h=0)
|
|
// 0.07 (2015-09-13) fix bug with empty rects (w=0 or h=0)
|
|
// 0.07 (2015-09-13) fix bug with empty rects (w=0 or h=0)
|
|
// 0.06 (2015-04-15) added STBRP_SORT to allow replacing qsort
|
|
// 0.06 (2015-04-15) added STBRP_SORT to allow replacing qsort
|
|
@@ -148,7 +150,7 @@ enum
|
|
{
|
|
{
|
|
STBRP_HEURISTIC_Skyline_default=0,
|
|
STBRP_HEURISTIC_Skyline_default=0,
|
|
STBRP_HEURISTIC_Skyline_BL_sortHeight = STBRP_HEURISTIC_Skyline_default,
|
|
STBRP_HEURISTIC_Skyline_BL_sortHeight = STBRP_HEURISTIC_Skyline_default,
|
|
- STBRP_HEURISTIC_Skyline_BF_sortHeight,
|
|
|
|
|
|
+ STBRP_HEURISTIC_Skyline_BF_sortHeight
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
@@ -198,9 +200,15 @@ struct stbrp_context
|
|
#define STBRP_ASSERT assert
|
|
#define STBRP_ASSERT assert
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
+#ifdef _MSC_VER
|
|
|
|
+#define STBRP__NOTUSED(v) (void)(v)
|
|
|
|
+#else
|
|
|
|
+#define STBRP__NOTUSED(v) (void)sizeof(v)
|
|
|
|
+#endif
|
|
|
|
+
|
|
enum
|
|
enum
|
|
{
|
|
{
|
|
- STBRP__INIT_skyline = 1,
|
|
|
|
|
|
+ STBRP__INIT_skyline = 1
|
|
};
|
|
};
|
|
|
|
|
|
STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
|
|
STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
|
|
@@ -273,6 +281,9 @@ static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first, int x0
|
|
stbrp_node *node = first;
|
|
stbrp_node *node = first;
|
|
int x1 = x0 + width;
|
|
int x1 = x0 + width;
|
|
int min_y, visited_width, waste_area;
|
|
int min_y, visited_width, waste_area;
|
|
|
|
+
|
|
|
|
+ STBRP__NOTUSED(c);
|
|
|
|
+
|
|
STBRP_ASSERT(first->x <= x0);
|
|
STBRP_ASSERT(first->x <= x0);
|
|
|
|
|
|
#if 0
|
|
#if 0
|
|
@@ -500,8 +511,8 @@ static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *context, i
|
|
|
|
|
|
static int rect_height_compare(const void *a, const void *b)
|
|
static int rect_height_compare(const void *a, const void *b)
|
|
{
|
|
{
|
|
- stbrp_rect *p = (stbrp_rect *) a;
|
|
|
|
- stbrp_rect *q = (stbrp_rect *) b;
|
|
|
|
|
|
+ const stbrp_rect *p = (const stbrp_rect *) a;
|
|
|
|
+ const stbrp_rect *q = (const stbrp_rect *) b;
|
|
if (p->h > q->h)
|
|
if (p->h > q->h)
|
|
return -1;
|
|
return -1;
|
|
if (p->h < q->h)
|
|
if (p->h < q->h)
|
|
@@ -511,8 +522,8 @@ static int rect_height_compare(const void *a, const void *b)
|
|
|
|
|
|
static int rect_width_compare(const void *a, const void *b)
|
|
static int rect_width_compare(const void *a, const void *b)
|
|
{
|
|
{
|
|
- stbrp_rect *p = (stbrp_rect *) a;
|
|
|
|
- stbrp_rect *q = (stbrp_rect *) b;
|
|
|
|
|
|
+ const stbrp_rect *p = (const stbrp_rect *) a;
|
|
|
|
+ const stbrp_rect *q = (const stbrp_rect *) b;
|
|
if (p->w > q->w)
|
|
if (p->w > q->w)
|
|
return -1;
|
|
return -1;
|
|
if (p->w < q->w)
|
|
if (p->w < q->w)
|
|
@@ -522,8 +533,8 @@ static int rect_width_compare(const void *a, const void *b)
|
|
|
|
|
|
static int rect_original_order(const void *a, const void *b)
|
|
static int rect_original_order(const void *a, const void *b)
|
|
{
|
|
{
|
|
- stbrp_rect *p = (stbrp_rect *) a;
|
|
|
|
- stbrp_rect *q = (stbrp_rect *) b;
|
|
|
|
|
|
+ const stbrp_rect *p = (const stbrp_rect *) a;
|
|
|
|
+ const stbrp_rect *q = (const stbrp_rect *) b;
|
|
return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed);
|
|
return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed);
|
|
}
|
|
}
|
|
|
|
|