zworld/engine/renderapi/texture/ref.go
2024-01-14 22:56:06 +08:00

61 lines
1.0 KiB
Go

package texture
import (
"zworld/engine/renderapi/image"
)
var Checker = PathRef("textures/uv_checker.png")
type Ref interface {
Key() string
Version() int
// ImageData is called by texture caches and loaders, and should return the image data.
// todo: This interface is a bit too simple as it does not allow us to pass
// formats, filters and aspects.
ImageData() *image.Data
TextureArgs() Args
}
type pathRef struct {
path string
img *image.Data
args Args
}
func PathRef(path string) Ref {
return &pathRef{
path: path,
args: Args{
Filter: FilterLinear,
Wrap: WrapRepeat,
},
}
}
func PathArgsRef(path string, args Args) Ref {
return &pathRef{
path: path,
args: args,
}
}
func (r *pathRef) Key() string { return r.path }
func (r *pathRef) Version() int { return 1 }
func (r *pathRef) ImageData() *image.Data {
if r.img != nil {
return r.img
}
var err error
r.img, err = image.LoadFile(r.path)
if err != nil {
panic(err)
}
return r.img
}
func (r *pathRef) TextureArgs() Args {
return r.args
}