From 812d142aa078635ad847721e1d55d5cb3fa9a5ab Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Fri, 22 Jul 2022 11:38:30 -0700 Subject: [PATCH] misc fixes --- src/cram.c | 10 +++++----- tools/cli/main.c | 17 +++++++++++------ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/cram.c b/src/cram.c index e6b28b0..ea588c3 100644 --- a/src/cram.c +++ b/src/cram.c @@ -68,7 +68,7 @@ typedef struct Cram_Internal_Context uint32_t width; uint32_t height; - uint32_t padding; + int32_t padding; uint8_t trim; uint8_t *pixels; @@ -262,6 +262,7 @@ void Cram_Internal_Score( } } +/* Check if a contains b */ static inline uint8_t Cram_Internal_Contains(Rect* a, Rect* b) { return b->x >= a->x && @@ -289,7 +290,7 @@ void Cram_Internal_PruneRects(RectPackContext* context) if (context->freeRectangleCapacity < context->freeRectangleCount + context->newFreeRectangleCount) { - context->freeRectangleCapacity = context->freeRectangleCount + context->newFreeRectangleCount; + context->freeRectangleCapacity = Cram_max(context->freeRectangleCapacity * 2, context->freeRectangleCount + context->newFreeRectangleCount); context->freeRectangles = Cram_realloc(context->freeRectangles, sizeof(Rect) * context->freeRectangleCapacity); } @@ -298,6 +299,8 @@ void Cram_Internal_PruneRects(RectPackContext* context) context->freeRectangles[context->freeRectangleCount] = context->newFreeRectangles[i]; context->freeRectangleCount += 1; } + + context->newFreeRectangleCount = 0; } static inline void Cram_Internal_AddNewFreeRect(RectPackContext *context, Rect rect) @@ -405,8 +408,6 @@ void Cram_Internal_PlaceRect(RectPackContext *context, Rect *rect) } Cram_Internal_PruneRects(context); - - context->newFreeRectangleCount = 0; } /* Given rects with width and height, modifies rects with packed x and y positions. */ @@ -654,7 +655,6 @@ int8_t Cram_Pack(Cram_Context *context) if (Cram_Internal_PackRects(rectPackContext, packerRects, numRects) < 0) { - fprintf(stderr, "Not enough room! Packing aborted!"); return -1; } diff --git a/tools/cli/main.c b/tools/cli/main.c index c22c0c9..6a69e80 100644 --- a/tools/cli/main.c +++ b/tools/cli/main.c @@ -78,7 +78,7 @@ static void dirwalk(char *dir) void print_help() { - fprintf(stdout, "Usage: cram input_dir output_dir atlas_name [--padding padding_value] [--trim] [--dimension max_dimension]"); + fprintf(stdout, "Usage: cram input_dir output_dir atlas_name [--padding padding_value] [--notrim] [--dimension max_dimension]"); } uint8_t check_dir_exists(char *path) @@ -123,20 +123,21 @@ int main(int argc, char *argv[]) if (strcmp(arg, "--padding") == 0) { i += 1; - createInfo.padding = atoi(argv[argc]); + createInfo.padding = atoi(argv[i]); if (createInfo.padding < 0) { fprintf(stderr, "Padding must be equal to or greater than 0!"); return 1; } } - else if (strcmp(arg, "--trim") == 0) + else if (strcmp(arg, "--notrim") == 0) { - createInfo.trim = 1; + createInfo.trim = 0; } else if (strcmp(arg, "--dimension") == 0) { - createInfo.maxDimension = atoi(argv[argc]); + i += 1; + createInfo.maxDimension = atoi(argv[i]); if (createInfo.maxDimension < 0 || createInfo.maxDimension > 8192) { fprintf(stderr, "Padding must be between 0 and 8192!"); @@ -188,7 +189,11 @@ int main(int argc, char *argv[]) dirwalk(inputDirPath); - Cram_Pack(context); + if (Cram_Pack(context) < 0) + { + fprintf(stderr, "Not enough room! Packing aborted!"); + return 1; + } Cram_GetPixelData(context, &pixelData, &width, &height);