Refactoring

This commit is contained in:
Vladislav Khorev committed 2026-04-16 15:37:48 +03:00
1 parent 24851a89e8
commit 83cceecccd
4 files changed
+43 -77

No files matched your search

+4 -40
View File
@@ -301,43 +301,6 @@ void Character::draw(Renderer& renderer) {
renderer.shaderManager.PopShader();
}
void Character::prepareGpuSkinningVBOs(BoneAnimationData& anim) {
if (anim.gpuSkinningPrepared)
{
return;
}
anim.model.gpuBoneData.PrepareGpuSkinningData(anim.model.verticesBoneWeight);
// Upload bind-pose mesh (static, done once)
anim.bindPoseMutable.AssignFrom(anim.model.startMesh);
auto& gpu = anim.model.gpuBoneData;
anim.boneIndices0VBO = std::make_shared<VBOHolder>();
glBindBuffer(GL_ARRAY_BUFFER, anim.boneIndices0VBO->getBuffer());
glBufferData(GL_ARRAY_BUFFER, gpu.boneIndices0.size() * sizeof(Eigen::Vector4f),
gpu.boneIndices0.data(), GL_STATIC_DRAW);
anim.boneIndices1VBO = std::make_shared<VBOHolder>();
glBindBuffer(GL_ARRAY_BUFFER, anim.boneIndices1VBO->getBuffer());
glBufferData(GL_ARRAY_BUFFER, gpu.boneIndices1.size() * sizeof(Eigen::Vector2f),
gpu.boneIndices1.data(), GL_STATIC_DRAW);
anim.boneWeights0VBO = std::make_shared<VBOHolder>();
glBindBuffer(GL_ARRAY_BUFFER, anim.boneWeights0VBO->getBuffer());
glBufferData(GL_ARRAY_BUFFER, gpu.boneWeights0.size() * sizeof(Eigen::Vector4f),
gpu.boneWeights0.data(), GL_STATIC_DRAW);
anim.boneWeights1VBO = std::make_shared<VBOHolder>();
glBindBuffer(GL_ARRAY_BUFFER, anim.boneWeights1VBO->getBuffer());
glBufferData(GL_ARRAY_BUFFER, gpu.boneWeights1.size() * sizeof(Eigen::Vector2f),
gpu.boneWeights1.data(), GL_STATIC_DRAW);
anim.gpuSkinningPrepared = true;
}
void Character::drawGpuSkinning(Renderer& renderer) {
AnimationState drawState = resolveActiveState();
auto it = animations.find(drawState);
@@ -347,7 +310,7 @@ void Character::drawGpuSkinning(Renderer& renderer) {
}
auto& anim = it->second;
prepareGpuSkinningVBOs(anim);
anim.prepareGpuSkinningVBOs();
if (anim.skinningMatrices.empty())
{
@@ -456,7 +419,7 @@ void Character::drawShadowDepthGpuSkinning(Renderer& renderer) {
if (it == animations.end()) return;
auto& anim = it->second;
prepareGpuSkinningVBOs(anim);
anim.prepareGpuSkinningVBOs();
if (anim.skinningMatrices.empty()) {
if (anim.model.animations.empty() || anim.model.animations[0].keyFrames.empty()) return;
anim.model.ComputeSkinningMatrices(
@@ -566,7 +529,8 @@ void Character::drawGpuSkinningWithShadow(Renderer& renderer, const Eigen::Matri
if (it == animations.end() || !texture) return;
auto& anim = it->second;
prepareGpuSkinningVBOs(anim);
anim.prepareGpuSkinningVBOs();
if (anim.skinningMatrices.empty()) {
if (anim.model.animations.empty() || anim.model.animations[0].keyFrames.empty()) return;
anim.model.ComputeSkinningMatrices(