diff --git a/src/Character.cpp b/src/Character.cpp index 7e19693..4e629ce 100644 --- a/src/Character.cpp +++ b/src/Character.cpp @@ -298,7 +298,10 @@ void Character::drawGpuSkinning(Renderer& renderer) { if (anim.skinningMatrices.empty()) { - return; + if (anim.model.animations.empty() || anim.model.animations[0].keyFrames.empty()) return; + anim.model.ComputeSkinningMatrices( + anim.model.animations[0].keyFrames[0].frame, anim.skinningMatrices); + if (anim.skinningMatrices.empty()) return; } static const std::string skinningShaderName = "skinning"; static const std::string boneMatricesUniform = "uBoneMatrices[0]"; @@ -401,7 +404,12 @@ void Character::drawShadowDepthGpuSkinning(Renderer& renderer) { auto& anim = it->second; prepareGpuSkinningVBOs(anim); - if (anim.skinningMatrices.empty()) return; + if (anim.skinningMatrices.empty()) { + if (anim.model.animations.empty() || anim.model.animations[0].keyFrames.empty()) return; + anim.model.ComputeSkinningMatrices( + anim.model.animations[0].keyFrames[0].frame, anim.skinningMatrices); + if (anim.skinningMatrices.empty()) return; + } static const std::string shadowSkinningShader = "shadow_depth_skinning"; static const std::string boneMatricesUniform = "uBoneMatrices[0]"; @@ -506,7 +514,12 @@ void Character::drawGpuSkinningWithShadow(Renderer& renderer, const Eigen::Matri auto& anim = it->second; prepareGpuSkinningVBOs(anim); - if (anim.skinningMatrices.empty()) return; + if (anim.skinningMatrices.empty()) { + if (anim.model.animations.empty() || anim.model.animations[0].keyFrames.empty()) return; + anim.model.ComputeSkinningMatrices( + anim.model.animations[0].keyFrames[0].frame, anim.skinningMatrices); + if (anim.skinningMatrices.empty()) return; + } static const std::string skinningShadowShader = "skinning_shadow"; static const std::string boneMatricesUniform = "uBoneMatrices[0]";