From 5ee7e02f7a320765944a2266273bc50f7fab3830 Mon Sep 17 00:00:00 2001 From: kamkow1 Date: Sat, 28 Jun 2025 14:13:27 +0200 Subject: [PATCH] blog: Asset packing with zip.c - add images --- blog/blog-asset-packing-with-zip.c.md | 6 ++++++ build.c | 2 ++ etc/apwz-xkcd1.png | Bin 0 -> 23867 bytes etc/apwz-zip-icon.png | Bin 0 -> 16621 bytes 4 files changed, 8 insertions(+) create mode 100644 etc/apwz-xkcd1.png create mode 100644 etc/apwz-zip-icon.png diff --git a/blog/blog-asset-packing-with-zip.c.md b/blog/blog-asset-packing-with-zip.c.md index 54f2766..a6b701f 100644 --- a/blog/blog-asset-packing-with-zip.c.md +++ b/blog/blog-asset-packing-with-zip.c.md @@ -10,6 +10,8 @@ have to worry about this too much right now, since I've reimplemented asset pack zip library by \`kuba--\` (Polska GUROM!!!111!!). In this article I'd like to demonstrate how I've minimised the size of our assets using \`zip\` and \`incbin\`. +![zip file](/bakedres/apwz-zip-icon.png) + ## References - zip: https://raw.githubusercontent.com/kuba--/zip/refs/heads/master/src/zip.c @@ -256,6 +258,10 @@ void init_baked_resources(void) which is unpacking an in-memory .zip file. We iterate each entry in the bundle, get the name and size, preallocate a buffer and read said entry into the buffer. We can then add the resource to the hash table as we did previously. +## Conclusion + +![xkcd](/bakedres/apwz-xkcd1.png) + One question you may ask is, how much space are we saving? I don't remeber the exact sizes of the binary, but I remember that before compression it was \`~1.2M\` and now after compression is implemented, it's \`~1.6M\`. How is that an improvement if the binary gained weight? That \`~.4M\` is likely due to zip format overhead - metadata, file and diff --git a/build.c b/build.c index 22127dc..0c0cd47 100644 --- a/build.c +++ b/build.c @@ -34,6 +34,8 @@ int main(int argc, char ** argv) "./etc/me.jpg", \ "./etc/tmoa-engine.jpg", \ "./etc/tmoa-garbage.jpg", \ + "./etc/apwz-zip-icon.png", \ + "./etc/apwz-xkcd1.png", \ "./blog/blog-welcome.md", \ "./blog/blog-weird-page.md", \ "./blog/blog-curious-case-of-gebs.md", \ diff --git a/etc/apwz-xkcd1.png b/etc/apwz-xkcd1.png new file mode 100644 index 0000000000000000000000000000000000000000..64be56653d7c8bf18bf929fe1c271fc470032b99 GIT binary patch literal 23867 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