removed the name parameter from LoadImage as well; fixed a bug if the image finalizer is called after explicitly deleting

This commit is contained in:
Thomas Friedel 2018-04-05 18:54:14 +02:00
parent ad16b6fee2
commit 1699257f6d

View file

@ -21,9 +21,8 @@ var images = make(map[string]*Image)
// LoadImage loads an image. The src parameter can be either an image from the // LoadImage loads an image. The src parameter can be either an image from the
// standard image package, a byte slice that will be loaded, or a file name // standard image package, a byte slice that will be loaded, or a file name
// string. If you want the canvas package to load the image, make sure you // string. If you want the canvas package to load the image, make sure you
// import the required format packages. Name is an optional name that can also // import the required format packages
// be used in draw functions func LoadImage(src interface{}) (*Image, error) {
func LoadImage(src interface{}, name string) (*Image, error) {
var img *Image var img *Image
var err error var err error
switch v := src.(type) { switch v := src.(type) {
@ -51,22 +50,21 @@ func LoadImage(src interface{}, name string) (*Image, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
return LoadImage(srcImg, name) return LoadImage(srcImg)
case []byte: case []byte:
srcImg, _, err := image.Decode(bytes.NewReader(v)) srcImg, _, err := image.Decode(bytes.NewReader(v))
if err != nil { if err != nil {
return nil, err return nil, err
} }
return LoadImage(srcImg, name) return LoadImage(srcImg)
default: default:
return nil, errors.New("Unsupported source type") return nil, errors.New("Unsupported source type")
} }
if name != "" {
images[name] = img
}
runtime.SetFinalizer(img, func(img *Image) { runtime.SetFinalizer(img, func(img *Image) {
glChan <- func() { if !img.deleted {
gli.DeleteTextures(1, &img.tex) glChan <- func() {
gli.DeleteTextures(1, &img.tex)
}
} }
}) })
return img, nil return img, nil
@ -80,9 +78,11 @@ func getImage(image interface{}) *Image {
if img, ok := images[v]; ok { if img, ok := images[v]; ok {
return img return img
} }
if img, err := LoadImage(v, v); err == nil { img, err := LoadImage(v)
if err == nil {
return img return img
} }
images[v] = img
} }
return nil return nil
} }