Fix hats with hardware skinning

This commit is contained in:
Benau
2016-12-19 11:06:05 +08:00
parent 2f07b6a8ea
commit 581ca964fd
3 changed files with 21 additions and 2 deletions

View File

@@ -336,7 +336,7 @@ void STKAnimatedMesh::resetSkinningState(scene::IAnimatedMesh* mesh)
{
if (!CVS->supportsHardwareSkinning()) return;
m_skinning_offset = -1;
m_skinned_mesh = dynamic_cast<scene::CSkinnedMesh*>(mesh);
setHardwareSkinning(true);
if (m_skinned_mesh)
m_skinned_mesh->convertForSkinning();
}
@@ -353,6 +353,15 @@ scene::IMesh* STKAnimatedMesh::getMeshForCurrentFrame(SkinningCallback sc,
(uploadJoints, m_skinning_offset);
}
void STKAnimatedMesh::setHardwareSkinning(bool val)
{
if (!CVS->supportsHardwareSkinning()) return;
if (val)
m_skinned_mesh = dynamic_cast<scene::CSkinnedMesh*>(Mesh);
else
m_skinned_mesh = NULL;
}
void STKAnimatedMesh::uploadJoints(const irr::core::matrix4& m,
int joint, int offset)
{

View File

@@ -59,6 +59,7 @@ public:
int getTotalJoints() const;
void setSkinningOffset(int offset) { m_skinning_offset = offset; }
bool useHardwareSkinning() const { return m_skinned_mesh != NULL; }
void setHardwareSkinning(bool val);
void resetSkinningState(scene::IAnimatedMesh*);
// Callback for skinning mesh

View File

@@ -31,6 +31,7 @@
#include "graphics/material_manager.hpp"
#include "graphics/mesh_tools.hpp"
#include "graphics/render_info.hpp"
#include "graphics/stk_animated_mesh.hpp"
#include "io/file_manager.hpp"
#include "io/xml_node.hpp"
#include "karts/abstract_kart.hpp"
@@ -1027,7 +1028,15 @@ void KartModel::attachHat()
m_hat_node = irr_driver->addMesh(hat_mesh, "hat");
bone->addChild(m_hat_node);
m_animated_node->setCurrentFrame((float)m_animation_frame[AF_STRAIGHT]);
m_animated_node->OnAnimate(0);
STKAnimatedMesh* am = dynamic_cast<STKAnimatedMesh*>(m_animated_node);
if (am)
{
am->setHardwareSkinning(false);
am->OnAnimate(0);
am->setHardwareSkinning(true);
}
else
m_animated_node->OnAnimate(0);
bone->updateAbsolutePosition();
// With the hat node attached to the head bone, we have to
// reverse the transformation of the bone, so that the hat