mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 14:48:47 +00:00
Add image.destroy
This commit is contained in:
@@ -54,6 +54,7 @@ Image :: struct {
|
|||||||
*/
|
*/
|
||||||
background: Maybe(RGB_Pixel_16),
|
background: Maybe(RGB_Pixel_16),
|
||||||
metadata: Image_Metadata,
|
metadata: Image_Metadata,
|
||||||
|
which: Which_File_Type,
|
||||||
}
|
}
|
||||||
|
|
||||||
Image_Metadata :: union {
|
Image_Metadata :: union {
|
||||||
|
|||||||
@@ -43,3 +43,16 @@ load_from_file :: proc(filename: string, options := Options{}, allocator := cont
|
|||||||
return nil, .Unable_To_Read_File
|
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
|
||||||
|
}
|
||||||
@@ -47,6 +47,7 @@ load_from_bytes :: proc(data: []byte, allocator := context.allocator) -> (img: ^
|
|||||||
context.allocator = allocator
|
context.allocator = allocator
|
||||||
|
|
||||||
img = new(Image)
|
img = new(Image)
|
||||||
|
img.which = .NetPBM
|
||||||
|
|
||||||
header: Header; defer header_destroy(&header)
|
header: Header; defer header_destroy(&header)
|
||||||
header_size: int
|
header_size: int
|
||||||
@@ -758,9 +759,5 @@ _register :: proc() {
|
|||||||
destroyer :: proc(img: ^Image) {
|
destroyer :: proc(img: ^Image) {
|
||||||
_ = destroy(img)
|
_ = destroy(img)
|
||||||
}
|
}
|
||||||
image.register(.PBM, loader, destroyer)
|
image.register(.NetPBM, loader, destroyer)
|
||||||
image.register(.PGM, loader, destroyer)
|
|
||||||
image.register(.PPM, loader, destroyer)
|
|
||||||
image.register(.PAM, loader, destroyer)
|
|
||||||
image.register(.PFM, loader, destroyer)
|
|
||||||
}
|
}
|
||||||
@@ -372,6 +372,7 @@ load_from_context :: proc(ctx: ^$C, options := Options{}, allocator := context.a
|
|||||||
if img == nil {
|
if img == nil {
|
||||||
img = new(Image)
|
img = new(Image)
|
||||||
}
|
}
|
||||||
|
img.which = .PNG
|
||||||
|
|
||||||
info := new(image.PNG_Info)
|
info := new(image.PNG_Info)
|
||||||
img.metadata = info
|
img.metadata = info
|
||||||
|
|||||||
@@ -224,6 +224,7 @@ load_from_context :: proc(ctx: ^$C, options := Options{}, allocator := context.a
|
|||||||
if img == nil {
|
if img == nil {
|
||||||
img = new(Image)
|
img = new(Image)
|
||||||
}
|
}
|
||||||
|
img.which = .QOI
|
||||||
|
|
||||||
if .return_metadata in options {
|
if .return_metadata in options {
|
||||||
info := new(image.QOI_Info)
|
info := new(image.QOI_Info)
|
||||||
|
|||||||
+11
-11
@@ -14,7 +14,7 @@ Which_File_Type :: enum {
|
|||||||
JPEG,
|
JPEG,
|
||||||
JPEG_2000,
|
JPEG_2000,
|
||||||
JPEG_XL,
|
JPEG_XL,
|
||||||
PBM, PGM, PPM, PAM, PFM, // NetPBM family
|
NetPBM, // NetPBM family
|
||||||
PIC, // Softimage PIC
|
PIC, // Softimage PIC
|
||||||
PNG, // Portable Network Graphics
|
PNG, // Portable Network Graphics
|
||||||
PSD, // Photoshop PSD
|
PSD, // Photoshop PSD
|
||||||
@@ -111,16 +111,16 @@ which_bytes :: proc(data: []byte) -> Which_File_Type {
|
|||||||
switch s[2] {
|
switch s[2] {
|
||||||
case '\t', '\n', '\r':
|
case '\t', '\n', '\r':
|
||||||
switch s[1] {
|
switch s[1] {
|
||||||
case '1', '4':
|
case '1', '4': // PBM
|
||||||
return .PBM
|
return .NetPBM
|
||||||
case '2', '5':
|
case '2', '5': // PGM
|
||||||
return .PGM
|
return .NetPBM
|
||||||
case '3', '6':
|
case '3', '6': // PPM
|
||||||
return .PPM
|
return .NetPBM
|
||||||
case '7':
|
case '7': // PAM
|
||||||
return .PAM
|
return .NetPBM
|
||||||
case 'F', 'f':
|
case 'F', 'f': // PFM
|
||||||
return .PFM
|
return .NetPBM
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case s[:8] == "\x89PNG\r\n\x1a\n":
|
case s[:8] == "\x89PNG\r\n\x1a\n":
|
||||||
|
|||||||
Reference in New Issue
Block a user