opengl-deferred/utils/assetmanager/assetmanager.go

68 lines
1.3 KiB
Go
Raw Normal View History

2024-12-16 12:24:09 +00:00
package assetmanager
import (
"errors"
"reflect"
"git.tek.govt.hu/dowerx/opengl-deferred/types/geometry"
"git.tek.govt.hu/dowerx/opengl-deferred/types/shader"
"git.tek.govt.hu/dowerx/opengl-deferred/types/texture"
)
type AssetManager struct {
Geometries map[string]geometry.Geometry
Textures map[string]texture.Texture
Shadres map[string]shader.Shader
}
var instance *AssetManager
var (
geometryType = reflect.TypeOf(geometry.Geometry{})
textureType = reflect.TypeOf(texture.Texture{})
shaderType = reflect.TypeOf(shader.Shader{})
)
func Get() *AssetManager {
if instance != nil {
return &AssetManager{}
}
instance = &AssetManager{
Geometries: make(map[string]geometry.Geometry),
Textures: make(map[string]texture.Texture),
Shadres: make(map[string]shader.Shader),
}
return instance
}
func (m *AssetManager) Add(key string, item interface{}) error {
switch reflect.TypeOf(item) {
case geometryType:
m.Geometries[key] = item.(geometry.Geometry)
case textureType:
m.Textures[key] = item.(texture.Texture)
case shaderType:
m.Shadres[key] = item.(shader.Shader)
default:
return errors.New("unknown asset type")
}
return nil
}
func (m *AssetManager) Delete() {
for _, g := range m.Geometries {
g.Delete()
}
for _, t := range m.Textures {
t.Delete()
}
for _, s := range m.Shadres {
s.Delete()
}
}