38 lines
631 B
Go
38 lines
631 B
Go
package cache
|
|
|
|
import (
|
|
"zworld/engine/renderapi/device"
|
|
"zworld/engine/renderapi/shader"
|
|
)
|
|
|
|
type ShaderCache T[shader.Ref, shader.T]
|
|
|
|
func NewShaderCache(dev device.T) ShaderCache {
|
|
return New[shader.Ref, shader.T](&shaders{
|
|
device: dev,
|
|
})
|
|
}
|
|
|
|
type shaders struct {
|
|
device device.T
|
|
}
|
|
|
|
func (s *shaders) Name() string {
|
|
return "Shaders"
|
|
}
|
|
|
|
func (s *shaders) Instantiate(key shader.Ref, callback func(shader.T)) {
|
|
// load shader in a background goroutine
|
|
go func() {
|
|
shader := key.Load(s.device)
|
|
callback(shader)
|
|
}()
|
|
}
|
|
|
|
func (s *shaders) Delete(shader shader.T) {
|
|
shader.Destroy()
|
|
}
|
|
|
|
func (s *shaders) Destroy() {
|
|
}
|