library: vendors/stb_image + vendors/stb_truetype — stb ships with sx
The stb headers move from the repo-root vendors/ (resolvable only with CWD = sx repo) into library/vendors/ following the sqlite convention — bindings module + c/ sources + provenance README — so '#import "vendors/stb_image/stb_image.sx"' (image v2.30 + image_write v1.16) and '#import "vendors/stb_truetype/stb_truetype.sx"' (v1.26) work from any consumer via the stdlib search paths. modules/ffi/stb.sx dissolves into the stb_image vendor; modules/ffi/stb_truetype.sx keeps its non-stb text-shaping companions and re-imports the vendored unit. examples/1625 pins a deterministic in-memory BMP decode; examples/1626 pins font init + metric invariants against the system Helvetica.
This commit is contained in:
35
examples/1625-vendor-stb-image-decode.sx
Normal file
35
examples/1625-vendor-stb-image-decode.sx
Normal file
@@ -0,0 +1,35 @@
|
||||
// The sx library ships stb_image: `#import "vendors/stb_image/
|
||||
// stb_image.sx"` resolves through the stdlib search paths and the
|
||||
// implementation compiles through the object cache. Decodes a 2x2
|
||||
// 24-bit BMP built in memory — fully deterministic: dimensions,
|
||||
// channel count, and the top-left pixel (blue) are pinned.
|
||||
#import "modules/std.sx";
|
||||
stb :: #import "vendors/stb_image/stb_image.sx";
|
||||
|
||||
main :: () -> i32 {
|
||||
// BITMAPFILEHEADER (14) + BITMAPINFOHEADER (40) + 2 rows of
|
||||
// 2 BGR pixels padded to 4-byte rows (8 each) = 70 bytes.
|
||||
// Bottom row: red, green; top row: blue, white (BMP is bottom-up).
|
||||
bmp : [70]u8 = .{
|
||||
66, 77, 70, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 0,
|
||||
40, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 1, 0, 24, 0,
|
||||
0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 255, 0, 255, 0, 0, 0,
|
||||
255, 0, 0, 255, 255, 255, 0, 0,
|
||||
};
|
||||
|
||||
w : i32 = 0;
|
||||
h : i32 = 0;
|
||||
ch : i32 = 0;
|
||||
img := stb.stbi_load_from_memory(@bmp[0], 70, @w, @h, @ch, 3);
|
||||
if xx img == 0 {
|
||||
print("decode failed\n");
|
||||
return 1;
|
||||
}
|
||||
p : [*]u8 = xx img;
|
||||
print("decoded {}x{} ({} channels)\n", w, h, ch);
|
||||
print("top-left pixel: {} {} {}\n", p[0], p[1], p[2]);
|
||||
stb.stbi_image_free(xx img);
|
||||
0
|
||||
}
|
||||
Reference in New Issue
Block a user