power of two
parent
aeb8ed39f7
commit
c5c7df6c91
72
src/cram.c
72
src/cram.c
|
@ -106,34 +106,19 @@ typedef struct Cram_Internal_Context
|
|||
Cram_AtlasData *atlasData;
|
||||
} Cram_Internal_Context;
|
||||
|
||||
/* API functions */
|
||||
/* Internal functions */
|
||||
|
||||
uint32_t Wellspring_LinkedVersion(void)
|
||||
/* https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 */
|
||||
static uint32_t Cram_Internal_NextPowerOfTwo(uint32_t v)
|
||||
{
|
||||
return WELLSPRING_COMPILED_VERSION;
|
||||
}
|
||||
|
||||
Cram_Context* Cram_Init(Cram_ContextCreateInfo *createInfo)
|
||||
{
|
||||
Cram_Internal_Context *context = Cram_malloc(sizeof(Cram_Internal_Context));
|
||||
|
||||
context->name = Cram_strdup(createInfo->name);
|
||||
|
||||
context->width = createInfo->maxDimension;
|
||||
context->height = createInfo->maxDimension;
|
||||
|
||||
context->padding = createInfo->padding;
|
||||
context->trim = createInfo->trim;
|
||||
|
||||
context->images = Cram_malloc(INITIAL_DATA_CAPACITY * sizeof(Cram_Image));
|
||||
context->imageCapacity = INITIAL_DATA_CAPACITY;
|
||||
context->imageCount = 0;
|
||||
|
||||
context->atlasData = Cram_malloc(sizeof(Cram_AtlasData));
|
||||
|
||||
context->pixels = NULL;
|
||||
|
||||
return (Cram_Context*) context;
|
||||
v--;
|
||||
v |= v >> 1;
|
||||
v |= v >> 2;
|
||||
v |= v >> 4;
|
||||
v |= v >> 8;
|
||||
v |= v >> 16;
|
||||
v++;
|
||||
return v;
|
||||
}
|
||||
|
||||
static uint8_t Cram_Internal_IsImageEqual(Cram_Image *a, Cram_Image *b)
|
||||
|
@ -220,6 +205,36 @@ static int8_t Cram_Internal_CopyPixels(
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* API functions */
|
||||
|
||||
uint32_t Wellspring_LinkedVersion(void)
|
||||
{
|
||||
return WELLSPRING_COMPILED_VERSION;
|
||||
}
|
||||
|
||||
Cram_Context* Cram_Init(Cram_ContextCreateInfo *createInfo)
|
||||
{
|
||||
Cram_Internal_Context *context = Cram_malloc(sizeof(Cram_Internal_Context));
|
||||
|
||||
context->name = Cram_strdup(createInfo->name);
|
||||
|
||||
context->width = createInfo->maxDimension;
|
||||
context->height = createInfo->maxDimension;
|
||||
|
||||
context->padding = createInfo->padding;
|
||||
context->trim = createInfo->trim;
|
||||
|
||||
context->images = Cram_malloc(INITIAL_DATA_CAPACITY * sizeof(Cram_Image));
|
||||
context->imageCapacity = INITIAL_DATA_CAPACITY;
|
||||
context->imageCount = 0;
|
||||
|
||||
context->atlasData = Cram_malloc(sizeof(Cram_AtlasData));
|
||||
|
||||
context->pixels = NULL;
|
||||
|
||||
return (Cram_Context*) context;
|
||||
}
|
||||
|
||||
void Cram_AddFile(Cram_Context *context, const char *path)
|
||||
{
|
||||
Cram_Internal_Context *internalContext = (Cram_Internal_Context*) context;
|
||||
|
@ -378,6 +393,7 @@ int8_t Cram_Pack(Cram_Context *context)
|
|||
}
|
||||
}
|
||||
|
||||
/* TODO: replace this with something that uses MaxRects algorithm */
|
||||
stbrp_pack_rects(&rectPackContext, rects, numRects);
|
||||
|
||||
numRects = 0;
|
||||
|
@ -404,8 +420,8 @@ int8_t Cram_Pack(Cram_Context *context)
|
|||
}
|
||||
}
|
||||
|
||||
internalContext->width = maxWidth;
|
||||
internalContext->height = maxHeight;
|
||||
internalContext->width = Cram_Internal_NextPowerOfTwo(maxWidth);
|
||||
internalContext->height = Cram_Internal_NextPowerOfTwo(maxHeight);
|
||||
|
||||
internalContext->pixels = Cram_realloc(internalContext->pixels, internalContext->width * internalContext->height * 4);
|
||||
Cram_memset(internalContext->pixels, 0, internalContext->width * internalContext->height * 4);
|
||||
|
|
Loading…
Reference in New Issue