|
|
@@ -273,8 +273,13 @@ func (g *GLTF) LoadSkin(skinIdx int) (*graphic.Skeleton, error) {
|
|
|
if skinIdx < 0 || skinIdx >= len(g.Skins) {
|
|
|
return nil, fmt.Errorf("invalid skin index")
|
|
|
}
|
|
|
- log.Debug("Loading Skin %d", skinIdx)
|
|
|
skinData := g.Skins[skinIdx]
|
|
|
+ // Return cached if available
|
|
|
+ if skinData.cache != nil {
|
|
|
+ log.Debug("Fetching Skin %d (cached)", skinIdx)
|
|
|
+ return skinData.cache, nil
|
|
|
+ }
|
|
|
+ log.Debug("Loading Skin %d", skinIdx)
|
|
|
|
|
|
// Create Skeleton and set it on Rigged mesh
|
|
|
skeleton := graphic.NewSkeleton()
|
|
|
@@ -296,6 +301,9 @@ func (g *GLTF) LoadSkin(skinIdx int) (*graphic.Skeleton, error) {
|
|
|
skeleton.AddBone(jointNode.GetNode(), &ibm)
|
|
|
}
|
|
|
|
|
|
+ // Cache skin
|
|
|
+ g.Skins[skinIdx].cache = skeleton
|
|
|
+
|
|
|
return skeleton, nil
|
|
|
}
|
|
|
|