From 938f4e701ce3fcb880814c8c390452ca415c77ff Mon Sep 17 00:00:00 2001 From: jacob Date: Thu, 4 Sep 2025 00:57:28 -0500 Subject: [PATCH] formatting --- build.c | 2 -- src/ase/ase.c | 7 ++-- src/ase/ase.h | 15 +++++--- src/base/base.h | 2 +- src/base/base_snc.c | 2 +- src/base/base_snc.h | 2 +- icon.ico => src/pp/pp_res/icon.ico | Bin src/sprite/sprite.c | 48 +++++++++++++++++++++---- src/sprite/sprite.h | 54 ++++++++++++++--------------- 9 files changed, 87 insertions(+), 45 deletions(-) delete mode 100644 build.c rename icon.ico => src/pp/pp_res/icon.ico (100%) diff --git a/build.c b/build.c deleted file mode 100644 index bb64caa2..00000000 --- a/build.c +++ /dev/null @@ -1,2 +0,0 @@ -//////////////////////////////// -//~ Includes diff --git a/src/ase/ase.c b/src/ase/ase.c index 5ee39053..3e8a6f06 100644 --- a/src/ase/ase.c +++ b/src/ase/ase.c @@ -402,7 +402,7 @@ void ASE_Inflate(u8 *dst, u8 *encoded) } //////////////////////////////// -//~ Error handling +//~ Error helpers void ASE_PushError(Arena *arena, ASE_ErrorList *list, String msg_src) { @@ -421,7 +421,7 @@ void ASE_PushError(Arena *arena, ASE_ErrorList *list, String msg_src) } //////////////////////////////// -//~ Decode image +//~ Decode helpers u32 ASE_BlendMulU8(u32 a, u32 b) { @@ -482,6 +482,9 @@ void ASE_MakeDimensionsSquareish(ASE_Header *header, u32 *frames_x, u32 *frames_ } } +//////////////////////////////// +//~ Decode image + ASE_DecodedImage ASE_DecodeImage(Arena *arena, String encoded) { __prof; diff --git a/src/ase/ase.h b/src/ase/ase.h index 86149564..1c957b22 100644 --- a/src/ase/ase.h +++ b/src/ase/ase.h @@ -226,16 +226,23 @@ u16 ASE_DecodeHuffDict(ASE_HuffDict *huffman, ASE_Bitbuff *bb); void ASE_Inflate(u8 *dst, u8 *encoded); //////////////////////////////// -//~ Error handling operations +//~ Error helpers -//- Helpers void ASE_PushError(Arena *arena, ASE_ErrorList *list, String msg_src); + +//////////////////////////////// +//~ Decode helpers + u32 ASE_BlendMulU8(u32 a, u32 b); u32 ASE_Blend(u32 src, u32 dst, u8 opacity); void ASE_MakeDimensionsSquareish(ASE_Header *header, u32 *frames_x, u32 *frames_y, u64 *image_width, u64 *image_height); -//- Decode image +//////////////////////////////// +//~ Decode image + ASE_DecodedImage ASE_DecodeImage(Arena *arena, String encoded); -//- Decode sheet +//////////////////////////////// +//~ Decode sheet + ASE_DecodedSheet ASE_DecodeSheet(Arena *arena, String encoded); diff --git a/src/base/base.h b/src/base/base.h index e68d839b..77cc8c53 100644 --- a/src/base/base.h +++ b/src/base/base.h @@ -671,7 +671,7 @@ void SignalExit(i32 code); void ExitNow(i32 code); //////////////////////////////// -//~ @hookdecl Layer initialization hook (defined by metaprogram) +//~ @hookdecl Meta hooks void StartupLayers(void); diff --git a/src/base/base_snc.c b/src/base/base_snc.c index 7a444d7f..f50d898a 100644 --- a/src/base/base_snc.c +++ b/src/base/base_snc.c @@ -173,7 +173,7 @@ void SignalCv(Cv *cv, i32 count) //////////////////////////////// //~ Counter -u64 ValueFromCounter(Counter *counter) +i64 ValueFromCounter(Counter *counter) { return Atomic64Fetch(&counter->v); } diff --git a/src/base/base_snc.h b/src/base/base_snc.h index eae9c1ab..e4a04c42 100644 --- a/src/base/base_snc.h +++ b/src/base/base_snc.h @@ -79,6 +79,6 @@ void SignalCv(Cv *cv, i32 count); //////////////////////////////// //~ Counter operations -u64 ValueFromCounter(Counter *counter); +i64 ValueFromCounter(Counter *counter); void AddCounter(Counter *counter, i64 x); void YieldOnCounter(Counter *counter); diff --git a/icon.ico b/src/pp/pp_res/icon.ico similarity index 100% rename from icon.ico rename to src/pp/pp_res/icon.ico diff --git a/src/sprite/sprite.c b/src/sprite/sprite.c index 2c60bffb..8c025048 100644 --- a/src/sprite/sprite.c +++ b/src/sprite/sprite.c @@ -10,18 +10,54 @@ void S_Startup(void) } //////////////////////////////// -//~ Load texture job +//~ Load jobs JobDef(S_LoadTextureJob, sig, _) { + TempArena scratch = BeginScratchNoConflict(); S_Entry *entry = sig->entry; + Resource resource = entry->resource; + b32 success = 1; + S_Texture *texture = &entry->texture; + texture->valid = 1; + + String name = NameFromResource(resource); + String data = DataFromResource(resource); + + ASE_DecodedImage decoded = ASE_DecodeImage(scratch.arena, data); + success = decoded.success; + + if (success) + { + GPU_ResourceDesc desc = ZI; + desc.kind = GPU_ResourceKind_Texture2D; + desc.flags = GPU_ResourceFlag_AllowSrv; + desc.flags = GPU_ResourceFlag_AllowUav; + desc.flags = GPU_ResourceFlag_AllowRtv; + desc.texture.format = GPU_Format_R8G8B8A8_Unorm_Srgb; + desc.texture.size = VEC3I32(decoded.width, decoded.height, 1); + desc.texture.mip_levels = 1; + texture->gpu_resource = GPU_AcquireResource(desc); + texture->width = decoded.width; + texture->height = decoded.height; + } + + texture->loaded = 1; AddCounter(&entry->texture_load_counter, -1); + EndScratch(scratch); } JobDef(S_LoadSheetJob, sig, _) { + TempArena scratch = BeginScratchNoConflict(); S_Entry *entry = sig->entry; + Resource resource = entry->resource; + b32 success = 1; + S_Sheet *sheet = &entry->sheet; + sheet->valid = 1; + AddCounter(&entry->sheet_load_counter, -1); + EndScratch(scratch); } //////////////////////////////// @@ -69,8 +105,6 @@ S_Entry *S_FetchEntry(Resource resource, JobPool pool, S_FetchFlag flags) { entry = PushStruct(PermArena, S_Entry); entry->resource = resource; - entry->texture = &S_NilTexture; - entry->sheet = &S_NilSheet; AddCounter(&entry->texture_load_counter, 1); AddCounter(&entry->sheet_load_counter, 1); QueuePush_N(bin->first, bin->last, entry, next_in_bin); @@ -102,7 +136,7 @@ S_Texture *S_TextureFromResource(Resource resource) { S_Entry *entry = S_FetchEntry(resource, JobPool_Inherit, S_FetchFlag_Texture); YieldOnCounter(&entry->texture_load_counter); - return entry->texture; + return &entry->texture; } S_Texture *S_TextureFromResourceAsync(Resource resource) @@ -111,7 +145,7 @@ S_Texture *S_TextureFromResourceAsync(Resource resource) S_Entry *entry = S_FetchEntry(resource, JobPool_Inherit, S_FetchFlag_Texture); if (ValueFromCounter(&entry->texture_load_counter) <= 0) { - result = entry->texture; + result = &entry->texture; } return result; } @@ -120,7 +154,7 @@ S_Sheet *S_SheetFromResource(Resource resource) { S_Entry *entry = S_FetchEntry(resource, JobPool_Inherit, S_FetchFlag_Sheet); YieldOnCounter(&entry->sheet_load_counter); - return entry->sheet; + return &entry->sheet; } S_Sheet *S_SheetFromResourceAsync(Resource resource) @@ -129,7 +163,7 @@ S_Sheet *S_SheetFromResourceAsync(Resource resource) S_Entry *entry = S_FetchEntry(resource, JobPool_Inherit, S_FetchFlag_Sheet); if (ValueFromCounter(&entry->sheet_load_counter) <= 0) { - result = entry->sheet; + result = &entry->sheet; } return result; } diff --git a/src/sprite/sprite.h b/src/sprite/sprite.h index 1bb1b383..206bd000 100644 --- a/src/sprite/sprite.h +++ b/src/sprite/sprite.h @@ -1,35 +1,10 @@ -//////////////////////////////// -//~ Cache types - -Struct(S_Entry) -{ - S_Entry *next_in_bin; - - struct S_Texture *texture; - struct S_Sheet *sheet; - - Atomic32 texture_touched; - Atomic32 sheet_touched; - - Resource resource; - Counter texture_load_counter; - Counter sheet_load_counter; -}; - -Struct(S_EntryBin) -{ - S_Entry *first; - S_Entry *last; - Mutex mutex; -}; - //////////////////////////////// //~ Texture types Struct(S_Texture) { - b32 loaded; b32 valid; + b32 loaded; GPU_Resource *gpu_resource; u32 width; u32 height; @@ -91,8 +66,8 @@ Struct(S_SheetSliceGroup) Struct(S_Sheet) { - b32 loaded; b32 valid; + b32 loaded; Vec2 image_size; Vec2 frame_size; @@ -110,6 +85,31 @@ Struct(S_Sheet) extern Readonly S_Sheet S_NilSheet; +//////////////////////////////// +//~ Cache types + +Struct(S_Entry) +{ + S_Entry *next_in_bin; + + S_Texture texture; + S_Sheet sheet; + + Atomic32 texture_touched; + Atomic32 sheet_touched; + + Resource resource; + Counter texture_load_counter; + Counter sheet_load_counter; +}; + +Struct(S_EntryBin) +{ + S_Entry *first; + S_Entry *last; + Mutex mutex; +}; + //////////////////////////////// //~ Shared state