forked from AbleOS/ableos
koniifer
96c2bd5cd5
restructure render lib add peony's render api additions and example add image example fix some dubious bugs i had made in unused code in mem_serve.rs remove tetris stub (now in peony's fork) update hblang
51 lines
1 KiB
Plaintext
51 lines
1 KiB
Plaintext
.{Color} := @use("./lib.hb");
|
|
.{memory, log} := @use("../../stn/src/lib.hb")
|
|
|
|
Image := struct {
|
|
buf: ^Color,
|
|
width: i32,
|
|
height: i32,
|
|
}
|
|
|
|
BitmapFileHeader := packed struct {
|
|
img_type: u16,
|
|
size: u32,
|
|
reserved_1: u16,
|
|
reserved_2: u16,
|
|
offset: u32,
|
|
}
|
|
|
|
BitmapInfoHeader := packed struct {
|
|
size: u32,
|
|
width: i32,
|
|
height: i32,
|
|
planes: u16,
|
|
bits: u16,
|
|
compression: u32,
|
|
image_size: u32,
|
|
x_resolution: i32,
|
|
y_resolution: i32,
|
|
n_colours: u32,
|
|
important_colours: u32,
|
|
}
|
|
|
|
BitmapColorHeader := packed struct {
|
|
red_mask: u32,
|
|
green_mask: u32,
|
|
blue_mask: u32,
|
|
alpha_mask: u32,
|
|
color_space_type: u32,
|
|
unused: u32,
|
|
}
|
|
|
|
from_bmp := fn(bmp: ^u8): Image {
|
|
file_header := @as(^BitmapFileHeader, @bitcast(bmp))
|
|
if file_header.img_type != 0x4D42 {
|
|
log.error("failed to load bmp image: not a bmp image, idiot\0")
|
|
return @as(Image, idk)
|
|
}
|
|
info_header := @as(^BitmapInfoHeader, @bitcast(bmp + @sizeof(BitmapFileHeader)))
|
|
bmp += file_header.offset
|
|
|
|
return .(@bitcast(bmp), @bitcast(info_header.width), @bitcast(info_header.height))
|
|
} |