diff options
| author | gingerBill <bill@gingerbill.org> | 2022-05-14 15:06:55 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2022-05-14 15:06:55 +0100 |
| commit | 3aa0a733f3b59388ae320f07cfabb1f4e7f0cec2 (patch) | |
| tree | 6bea56d06b07eca6e098644153e11e4a6421f8b8 | |
| parent | 4e080057fb0f24e66bb6ad4eccb931f1f325da9b (diff) | |
Add `destroy` with loader
| -rw-r--r-- | core/image/general_loader.odin | 12 | ||||
| -rw-r--r-- | core/image/netpbm/netpbm.odin | 13 | ||||
| -rw-r--r-- | core/image/png/png.odin | 5 | ||||
| -rw-r--r-- | core/image/qoi/qoi.odin | 5 |
4 files changed, 21 insertions, 14 deletions
diff --git a/core/image/general_loader.odin b/core/image/general_loader.odin index 4cc8569ab..3acffb452 100644 --- a/core/image/general_loader.odin +++ b/core/image/general_loader.odin @@ -4,13 +4,20 @@ import "core:mem" import "core:os" Loader_Proc :: #type proc(data: []byte, options: Options, allocator: mem.Allocator) -> (img: ^Image, err: Error) +Destroy_Proc :: #type proc(img: ^Image) @(private) _internal_loaders: [Which_File_Type]Loader_Proc +_internal_destroyers: [Which_File_Type]Destroy_Proc -register_loader :: proc(kind: Which_File_Type, loader: Loader_Proc) { +register :: proc(kind: Which_File_Type, loader: Loader_Proc, destroyer: Destroy_Proc) { + assert(loader != nil) + assert(destroyer != nil) assert(_internal_loaders[kind] == nil) _internal_loaders[kind] = loader + + assert(_internal_destroyers[kind] == nil) + _internal_destroyers[kind] = destroyer } load :: proc{ @@ -33,7 +40,6 @@ load_from_file :: proc(filename: string, options := Options{}, allocator := cont if ok { return load_from_bytes(data, options, allocator) } else { - img = new(Image, allocator) - return img, .Unable_To_Read_File + return nil, .Unable_To_Read_File } } diff --git a/core/image/netpbm/netpbm.odin b/core/image/netpbm/netpbm.odin index bfaf49fc6..778ec2c5e 100644 --- a/core/image/netpbm/netpbm.odin +++ b/core/image/netpbm/netpbm.odin @@ -755,9 +755,12 @@ _register :: proc() { loader :: proc(data: []byte, options: image.Options, allocator: mem.Allocator) -> (img: ^Image, err: Error) { return load_from_bytes(data, allocator) } - image.register_loader(.PBM, loader) - image.register_loader(.PGM, loader) - image.register_loader(.PPM, loader) - image.register_loader(.PAM, loader) - image.register_loader(.PFM, loader) + destroyer :: proc(img: ^Image) { + _ = destroy(img) + } + image.register(.PBM, loader, destroyer) + image.register(.PGM, loader, destroyer) + image.register(.PPM, loader, destroyer) + image.register(.PAM, loader, destroyer) + image.register(.PFM, loader, destroyer) }
\ No newline at end of file diff --git a/core/image/png/png.odin b/core/image/png/png.odin index f91ad2b66..ea888d0ad 100644 --- a/core/image/png/png.odin +++ b/core/image/png/png.odin @@ -344,8 +344,7 @@ load_from_file :: proc(filename: string, options := Options{}, allocator := cont if ok { return load_from_bytes(data, options) } else { - img = new(Image) - return img, .Unable_To_Read_File + return nil, .Unable_To_Read_File } } @@ -1642,5 +1641,5 @@ load :: proc{load_from_file, load_from_bytes, load_from_context} @(init, private) _register :: proc() { - image.register_loader(.PNG, load_from_bytes) + image.register(.PNG, load_from_bytes, destroy) }
\ No newline at end of file diff --git a/core/image/qoi/qoi.odin b/core/image/qoi/qoi.odin index 884f4963b..f10f2ff56 100644 --- a/core/image/qoi/qoi.odin +++ b/core/image/qoi/qoi.odin @@ -198,8 +198,7 @@ load_from_file :: proc(filename: string, options := Options{}, allocator := cont if ok {
return load_from_bytes(data, options)
} else {
- img = new(Image)
- return img, .Unable_To_Read_File
+ return nil, .Unable_To_Read_File
}
}
@@ -407,5 +406,5 @@ qoi_hash :: #force_inline proc(pixel: RGBA_Pixel) -> (index: u8) { @(init, private)
_register :: proc() {
- image.register_loader(.QOI, load_from_bytes)
+ image.register(.QOI, load_from_bytes, destroy)
}
\ No newline at end of file |