mirror of
https://github.com/nicbarker/clay.git
synced 2025-04-19 04:38:01 +00:00
Convert clay measure text hash map size to runtime variable
This commit is contained in:
parent
4b115afd57
commit
5261c1eef2
17
clay.h
17
clay.h
@ -479,6 +479,7 @@ Clay_RenderCommand * Clay_RenderCommandArray_Get(Clay_RenderCommandArray* array,
|
|||||||
void Clay_SetDebugModeEnabled(bool enabled);
|
void Clay_SetDebugModeEnabled(bool enabled);
|
||||||
void Clay_SetCullingEnabled(bool enabled);
|
void Clay_SetCullingEnabled(bool enabled);
|
||||||
void Clay_SetMaxElementCount(uint32_t maxElementCount);
|
void Clay_SetMaxElementCount(uint32_t maxElementCount);
|
||||||
|
void Clay_SetMeasureTextCacheSize(uint32_t measureTextCacheSize);
|
||||||
|
|
||||||
// Internal API functions required by macros
|
// Internal API functions required by macros
|
||||||
void Clay__OpenElement();
|
void Clay__OpenElement();
|
||||||
@ -518,10 +519,6 @@ extern uint32_t Clay__debugViewWidth;
|
|||||||
#define CLAY__TEXT_MEASURE_HASH_BUCKET_COUNT 16
|
#define CLAY__TEXT_MEASURE_HASH_BUCKET_COUNT 16
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef CLAY_MEASURE_TEXT_CACHE_SIZE
|
|
||||||
#define CLAY_MEASURE_TEXT_CACHE_SIZE Clay__maxElementCount * 2
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef CLAY__NULL
|
#ifndef CLAY__NULL
|
||||||
#define CLAY__NULL 0
|
#define CLAY__NULL 0
|
||||||
#endif
|
#endif
|
||||||
@ -532,6 +529,7 @@ extern uint32_t Clay__debugViewWidth;
|
|||||||
|
|
||||||
bool Clay__warningsEnabled = true;
|
bool Clay__warningsEnabled = true;
|
||||||
uint32_t Clay__maxElementCount = 128;
|
uint32_t Clay__maxElementCount = 128;
|
||||||
|
uint32_t Clay__measureTextCacheSize = 128;
|
||||||
Clay_ErrorHandler Clay__errorHandler = CLAY__INIT(Clay_ErrorHandler) { .errorHandlerFunction = Clay__Noop };
|
Clay_ErrorHandler Clay__errorHandler = CLAY__INIT(Clay_ErrorHandler) { .errorHandlerFunction = Clay__Noop };
|
||||||
|
|
||||||
void Clay__Noop() {};
|
void Clay__Noop() {};
|
||||||
@ -1653,7 +1651,7 @@ Clay__MeasureTextCacheItem *Clay__MeasureTextCached(Clay_String *text, Clay_Text
|
|||||||
if (!Clay__booleanWarnings.maxTextMeasureCacheExceeded) {
|
if (!Clay__booleanWarnings.maxTextMeasureCacheExceeded) {
|
||||||
Clay__errorHandler.errorHandlerFunction(CLAY__INIT(Clay_ErrorData) {
|
Clay__errorHandler.errorHandlerFunction(CLAY__INIT(Clay_ErrorData) {
|
||||||
.errorType = CLAY_ERROR_TYPE_TEXT_MEASUREMENT_CAPACITY_EXCEEDED,
|
.errorType = CLAY_ERROR_TYPE_TEXT_MEASUREMENT_CAPACITY_EXCEEDED,
|
||||||
.errorText = CLAY_STRING("Clay has run out of space in it's internal text measurement cache. Try increasing CLAY_MEASURE_TEXT_CACHE_SIZE."),
|
.errorText = CLAY_STRING("Clay has run out of space in it's internal text measurement cache. Try using Clay_SetMeasureTextCacheSize() (default 16384, with 1 unit storing 1 measured word)."),
|
||||||
.userData = Clay__errorHandler.userData });
|
.userData = Clay__errorHandler.userData });
|
||||||
Clay__booleanWarnings.maxTextMeasureCacheExceeded = true;
|
Clay__booleanWarnings.maxTextMeasureCacheExceeded = true;
|
||||||
}
|
}
|
||||||
@ -2034,9 +2032,9 @@ void Clay__InitializePersistentMemory(Clay_Arena *arena) {
|
|||||||
Clay__layoutElementsHashMap = Clay__int32_tArray_Allocate_Arena(Clay__maxElementCount, arena);
|
Clay__layoutElementsHashMap = Clay__int32_tArray_Allocate_Arena(Clay__maxElementCount, arena);
|
||||||
Clay__measureTextHashMapInternal = Clay__MeasureTextCacheItemArray_Allocate_Arena(Clay__maxElementCount, arena);
|
Clay__measureTextHashMapInternal = Clay__MeasureTextCacheItemArray_Allocate_Arena(Clay__maxElementCount, arena);
|
||||||
Clay__measureTextHashMapInternalFreeList = Clay__int32_tArray_Allocate_Arena(Clay__maxElementCount, arena);
|
Clay__measureTextHashMapInternalFreeList = Clay__int32_tArray_Allocate_Arena(Clay__maxElementCount, arena);
|
||||||
Clay__measuredWordsFreeList = Clay__int32_tArray_Allocate_Arena(CLAY_MEASURE_TEXT_CACHE_SIZE, arena);
|
Clay__measuredWordsFreeList = Clay__int32_tArray_Allocate_Arena(Clay__measureTextCacheSize, arena);
|
||||||
Clay__measureTextHashMap = Clay__int32_tArray_Allocate_Arena(Clay__maxElementCount, arena);
|
Clay__measureTextHashMap = Clay__int32_tArray_Allocate_Arena(Clay__maxElementCount, arena);
|
||||||
Clay__measuredWords = Clay__MeasuredWordArray_Allocate_Arena(CLAY_MEASURE_TEXT_CACHE_SIZE, arena);
|
Clay__measuredWords = Clay__MeasuredWordArray_Allocate_Arena(Clay__measureTextCacheSize, arena);
|
||||||
Clay__pointerOverIds = Clay__ElementIdArray_Allocate_Arena(Clay__maxElementCount, arena);
|
Clay__pointerOverIds = Clay__ElementIdArray_Allocate_Arena(Clay__maxElementCount, arena);
|
||||||
Clay__debugElementData = Clay__DebugElementDataArray_Allocate_Arena(Clay__maxElementCount, arena);
|
Clay__debugElementData = Clay__DebugElementDataArray_Allocate_Arena(Clay__maxElementCount, arena);
|
||||||
Clay__arenaResetOffset = arena->nextAllocation;
|
Clay__arenaResetOffset = arena->nextAllocation;
|
||||||
@ -3836,6 +3834,11 @@ void Clay_SetMaxElementCount(uint32_t maxElementCount) {
|
|||||||
Clay__maxElementCount = maxElementCount;
|
Clay__maxElementCount = maxElementCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CLAY_WASM_EXPORT("Clay_SetMeasureTextCacheSize")
|
||||||
|
void Clay_SetMeasureTextCacheSize(uint32_t measureTextCacheSize) {
|
||||||
|
Clay__measureTextCacheSize = measureTextCacheSize;
|
||||||
|
}
|
||||||
|
|
||||||
#endif //CLAY_IMPLEMENTATION
|
#endif //CLAY_IMPLEMENTATION
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -202,8 +202,17 @@ void UpdateDrawFrame(void)
|
|||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool reinitializeClay = false;
|
||||||
|
|
||||||
void HandleClayErrors(Clay_ErrorData errorData) {
|
void HandleClayErrors(Clay_ErrorData errorData) {
|
||||||
printf("%s", errorData.errorText.chars);
|
printf("%s", errorData.errorText.chars);
|
||||||
|
if (errorData.errorType == CLAY_ERROR_TYPE_ELEMENTS_CAPACITY_EXCEEDED) {
|
||||||
|
reinitializeClay = true;
|
||||||
|
Clay_SetMaxElementCount(Clay__maxElementCount * 2);
|
||||||
|
} else if (errorData.errorType == CLAY_ERROR_TYPE_TEXT_MEASUREMENT_CAPACITY_EXCEEDED) {
|
||||||
|
reinitializeClay = true;
|
||||||
|
Clay_SetMeasureTextCacheSize(Clay__measureTextCacheSize * 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
@ -230,6 +239,13 @@ int main(void) {
|
|||||||
// Main game loop
|
// Main game loop
|
||||||
while (!WindowShouldClose()) // Detect window close button or ESC key
|
while (!WindowShouldClose()) // Detect window close button or ESC key
|
||||||
{
|
{
|
||||||
|
if (reinitializeClay) {
|
||||||
|
Clay_SetMaxElementCount(8192);
|
||||||
|
totalMemorySize = Clay_MinMemorySize();
|
||||||
|
clayMemory = (Clay_Arena) { .label = CLAY_STRING("Clay Memory Arena"), .memory = malloc(totalMemorySize), .capacity = totalMemorySize };
|
||||||
|
Clay_Initialize(clayMemory, (Clay_Dimensions) { (float)GetScreenWidth(), (float)GetScreenHeight() }, (Clay_ErrorHandler) { HandleClayErrors });
|
||||||
|
reinitializeClay = false;
|
||||||
|
}
|
||||||
UpdateDrawFrame();
|
UpdateDrawFrame();
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user