Add image.destroy

This commit is contained in:
gingerBill
2022-05-14 15:11:23 +01:00
parent 3aa0a733f3
commit c516fb947f
6 changed files with 29 additions and 16 deletions

View File

@@ -54,6 +54,7 @@ Image :: struct {
*/
background: Maybe(RGB_Pixel_16),
metadata: Image_Metadata,
which: Which_File_Type,
}
Image_Metadata :: union {

View File

@@ -43,3 +43,16 @@ load_from_file :: proc(filename: string, options := Options{}, allocator := cont
return nil, .Unable_To_Read_File
}
}
destroy :: proc(img: ^Image, allocator := context.allocator) -> bool {
if img == nil {
return true
}
context.allocator = allocator
destroyer := _internal_destroyers[img.which]
if destroyer != nil {
destroyer(img)
}
free(img)
return true
}

View File

@@ -47,6 +47,7 @@ load_from_bytes :: proc(data: []byte, allocator := context.allocator) -> (img: ^
context.allocator = allocator
img = new(Image)
img.which = .NetPBM
header: Header; defer header_destroy(&header)
header_size: int
@@ -758,9 +759,5 @@ _register :: proc() {
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)
image.register(.NetPBM, loader, destroyer)
}

View File

@@ -372,6 +372,7 @@ load_from_context :: proc(ctx: ^$C, options := Options{}, allocator := context.a
if img == nil {
img = new(Image)
}
img.which = .PNG
info := new(image.PNG_Info)
img.metadata = info

View File

@@ -224,6 +224,7 @@ load_from_context :: proc(ctx: ^$C, options := Options{}, allocator := context.a
if img == nil {
img = new(Image)
}
img.which = .QOI
if .return_metadata in options {
info := new(image.QOI_Info)

View File

@@ -14,7 +14,7 @@ Which_File_Type :: enum {
JPEG,
JPEG_2000,
JPEG_XL,
PBM, PGM, PPM, PAM, PFM, // NetPBM family
NetPBM, // NetPBM family
PIC, // Softimage PIC
PNG, // Portable Network Graphics
PSD, // Photoshop PSD
@@ -111,16 +111,16 @@ which_bytes :: proc(data: []byte) -> Which_File_Type {
switch s[2] {
case '\t', '\n', '\r':
switch s[1] {
case '1', '4':
return .PBM
case '2', '5':
return .PGM
case '3', '6':
return .PPM
case '7':
return .PAM
case 'F', 'f':
return .PFM
case '1', '4': // PBM
return .NetPBM
case '2', '5': // PGM
return .NetPBM
case '3', '6': // PPM
return .NetPBM
case '7': // PAM
return .NetPBM
case 'F', 'f': // PFM
return .NetPBM
}
}
case s[:8] == "\x89PNG\r\n\x1a\n":