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() } }