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