Fix hats with hardware skinning
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user