1
2
3
4
5
6
7
8
9
10
11
12
13package generate_image_info
14
15import "core:os"
16import "core:strings"
17import "core:fmt"
18import "core:path/slashpath"
19import "core:image/png"
20import "core:image"
21
22
23
24_ :: png
25
26INPUT_DIR :: "images"
27OUTPUT_FILE :: "images.odin"
28
29main :: proc() {
30 d, d_err := os.open(INPUT_DIR)
31 assert(d_err == nil, "Failed opening '" + INPUT_DIR + "' folder")
32 defer os.close(d)
33
34 input_files, _ := os.read_dir(d, -1, context.allocator)
35
36 f, _ := os.open(OUTPUT_FILE, {.Write, .Create, .Trunc}, {.Write_User, .Read_Other, .Read_Group})
37 defer os.close(f)
38
39 images: [dynamic]os.File_Info
40
41 for i in input_files {
42 if !strings.has_suffix(i.name, ".png") {
43 continue
44 }
45
46 append(&images, i)
47 }
48
49 fmt.fprintln(f,
50`// This file is generated. Re-generate it by running:
51// odin run generate_image_info
52package image_viewer
53
54Image :: struct {
55 width: int,
56 height: int,
57 data: []u8,
58}
59
60Image_Name :: enum {`,
61)
62
63 for i in images {
64 fmt.fprintfln(f, " %v,", strings.to_ada_case(slashpath.name(i.name)))
65 }
66
67 fmt.fprintln(f,
68`}
69
70images := [Image_Name]Image {`,
71)
72
73 for i in images {
74 img, img_err := image.load_from_file(i.fullpath)
75
76 if img_err == nil {
77 enum_name := strings.to_ada_case(slashpath.name(i.name))
78 fmt.fprintfln(f, " .%v = {{ data = #load(\"images/%v\"), width = %v, height = %v }},", enum_name, i.name, img.width, img.height)
79 }
80 }
81
82 fmt.fprintln(f, "}")
83}