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:
parent
ad16b6fee2
commit
1699257f6d
1 changed files with 11 additions and 11 deletions
22
images.go
22
images.go
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue