aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-05-14 15:06:55 +0100
committergingerBill <bill@gingerbill.org>2022-05-14 15:06:55 +0100
commit3aa0a733f3b59388ae320f07cfabb1f4e7f0cec2 (patch)
tree6bea56d06b07eca6e098644153e11e4a6421f8b8
parent4e080057fb0f24e66bb6ad4eccb931f1f325da9b (diff)
Add `destroy` with loader
-rw-r--r--core/image/general_loader.odin12
-rw-r--r--core/image/netpbm/netpbm.odin13
-rw-r--r--core/image/png/png.odin5
-rw-r--r--core/image/qoi/qoi.odin5
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