Fix colorization of wheels and speed weight objects
This commit is contained in:
@@ -1170,7 +1170,8 @@ scene::IParticleSystemSceneNode *IrrDriver::addParticleNode(bool default_emitter
|
||||
scene::IMeshSceneNode *IrrDriver::addMesh(scene::IMesh *mesh,
|
||||
const std::string& debug_name,
|
||||
scene::ISceneNode *parent,
|
||||
RenderInfo* render_info)
|
||||
RenderInfo* render_info,
|
||||
bool all_parts_colorized)
|
||||
{
|
||||
if (!CVS->isGLSL())
|
||||
return m_scene_manager->addMeshSceneNode(mesh, parent);
|
||||
@@ -1184,7 +1185,8 @@ scene::IMeshSceneNode *IrrDriver::addMesh(scene::IMesh *mesh,
|
||||
core::vector3df(0, 0, 0),
|
||||
core::vector3df(0, 0, 0),
|
||||
core::vector3df(1.0f, 1.0f, 1.0f),
|
||||
true, render_info);
|
||||
true, render_info,
|
||||
all_parts_colorized);
|
||||
node->drop();
|
||||
|
||||
return node;
|
||||
@@ -1367,7 +1369,7 @@ void IrrDriver::removeTexture(video::ITexture *t)
|
||||
*/
|
||||
scene::IAnimatedMeshSceneNode *IrrDriver::addAnimatedMesh(scene::IAnimatedMesh *mesh,
|
||||
const std::string& debug_name, scene::ISceneNode* parent,
|
||||
RenderInfo* render_info)
|
||||
RenderInfo* render_info, bool all_parts_colorized)
|
||||
{
|
||||
if (!CVS->isGLSL())
|
||||
{
|
||||
@@ -1383,7 +1385,7 @@ scene::IAnimatedMeshSceneNode *IrrDriver::addAnimatedMesh(scene::IAnimatedMesh *
|
||||
scene::IAnimatedMeshSceneNode* node =
|
||||
new STKAnimatedMesh(mesh, parent, m_scene_manager, -1, debug_name,
|
||||
core::vector3df(0, 0, 0), core::vector3df(0, 0, 0),
|
||||
core::vector3df(1, 1, 1), render_info);
|
||||
core::vector3df(1, 1, 1), render_info, all_parts_colorized);
|
||||
node->drop();
|
||||
return node;
|
||||
} // addAnimatedMesh
|
||||
|
||||
@@ -388,7 +388,8 @@ public:
|
||||
scene::IMeshSceneNode*addMesh(scene::IMesh *mesh,
|
||||
const std::string& debug_name,
|
||||
scene::ISceneNode *parent = NULL,
|
||||
RenderInfo* render_info = NULL);
|
||||
RenderInfo* render_info = NULL,
|
||||
bool all_parts_colorized = false);
|
||||
PerCameraNode *addPerCameraNode(scene::ISceneNode* node,
|
||||
scene::ICameraSceneNode* cam,
|
||||
scene::ISceneNode *parent = NULL);
|
||||
@@ -411,7 +412,8 @@ public:
|
||||
*addAnimatedMesh(scene::IAnimatedMesh *mesh,
|
||||
const std::string& debug_name,
|
||||
scene::ISceneNode* parent = NULL,
|
||||
RenderInfo* render_info = NULL);
|
||||
RenderInfo* render_info = NULL,
|
||||
bool all_parts_colorized = false);
|
||||
scene::ICameraSceneNode
|
||||
*addCameraSceneNode();
|
||||
Camera *addCamera(unsigned int index, AbstractKart *kart);
|
||||
|
||||
@@ -39,12 +39,13 @@ STKAnimatedMesh::STKAnimatedMesh(irr::scene::IAnimatedMesh* mesh, irr::scene::IS
|
||||
irr::scene::ISceneManager* mgr, s32 id, const std::string& debug_name,
|
||||
const core::vector3df& position,
|
||||
const core::vector3df& rotation,
|
||||
const core::vector3df& scale, RenderInfo* render_info) :
|
||||
const core::vector3df& scale, RenderInfo* render_info, bool all_parts_colorized) :
|
||||
CAnimatedMeshSceneNode(mesh, parent, mgr, id, position, rotation, scale)
|
||||
{
|
||||
isGLInitialized = false;
|
||||
isMaterialInitialized = false;
|
||||
m_mesh_render_info = render_info;
|
||||
m_all_parts_colorized = all_parts_colorized;
|
||||
#ifdef DEBUG
|
||||
m_debug_name = debug_name;
|
||||
#endif
|
||||
@@ -103,14 +104,14 @@ void STKAnimatedMesh::updateNoGL()
|
||||
{
|
||||
scene::IMeshBuffer* mb = Mesh->getMeshBuffer(i);
|
||||
bool affected = false;
|
||||
if (mb && m_mesh_render_info)
|
||||
if (!m_all_parts_colorized && mb && m_mesh_render_info)
|
||||
{
|
||||
// Test if material is affected by hue change
|
||||
affected = m_mesh_render_info->isColorizable(i);
|
||||
}
|
||||
|
||||
GLmeshes.push_back(allocateMeshBuffer(mb, m_debug_name,
|
||||
affected ? m_mesh_render_info : NULL));
|
||||
affected || m_all_parts_colorized ? m_mesh_render_info : NULL));
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < m->getMeshBufferCount(); ++i)
|
||||
|
||||
@@ -43,7 +43,7 @@ public:
|
||||
const irr::core::vector3df& position = irr::core::vector3df(0,0,0),
|
||||
const irr::core::vector3df& rotation = irr::core::vector3df(0,0,0),
|
||||
const irr::core::vector3df& scale = irr::core::vector3df(1.0f, 1.0f, 1.0f),
|
||||
RenderInfo* render_info = NULL);
|
||||
RenderInfo* render_info = NULL, bool all_parts_colorized = false);
|
||||
~STKAnimatedMesh();
|
||||
|
||||
virtual void render();
|
||||
@@ -51,6 +51,7 @@ public:
|
||||
virtual bool glow() const { return false; }
|
||||
private:
|
||||
RenderInfo* m_mesh_render_info;
|
||||
bool m_all_parts_colorized;
|
||||
};
|
||||
|
||||
#endif // STKANIMATEDMESH_HPP
|
||||
|
||||
@@ -54,7 +54,7 @@ STKMeshSceneNode::STKMeshSceneNode(irr::scene::IMesh* mesh, ISceneNode* parent,
|
||||
irr::s32 id, const std::string& debug_name,
|
||||
const irr::core::vector3df& position,
|
||||
const irr::core::vector3df& rotation,
|
||||
const irr::core::vector3df& scale, bool createGLMeshes, RenderInfo* render_info) :
|
||||
const irr::core::vector3df& scale, bool createGLMeshes, RenderInfo* render_info, bool all_parts_colorized) :
|
||||
CMeshSceneNode(mesh, parent, mgr, id, position, rotation, scale)
|
||||
{
|
||||
isDisplacement = false;
|
||||
@@ -65,7 +65,7 @@ STKMeshSceneNode::STKMeshSceneNode(irr::scene::IMesh* mesh, ISceneNode* parent,
|
||||
m_debug_name = debug_name;
|
||||
|
||||
if (createGLMeshes)
|
||||
this->createGLMeshes(render_info);
|
||||
this->createGLMeshes(render_info, all_parts_colorized);
|
||||
}
|
||||
|
||||
void STKMeshSceneNode::setReloadEachFrame(bool val)
|
||||
@@ -75,20 +75,20 @@ void STKMeshSceneNode::setReloadEachFrame(bool val)
|
||||
immediate_draw = true;
|
||||
}
|
||||
|
||||
void STKMeshSceneNode::createGLMeshes(RenderInfo* render_info)
|
||||
void STKMeshSceneNode::createGLMeshes(RenderInfo* render_info, bool all_parts_colorized)
|
||||
{
|
||||
for (u32 i = 0; i<Mesh->getMeshBufferCount(); ++i)
|
||||
{
|
||||
scene::IMeshBuffer* mb = Mesh->getMeshBuffer(i);
|
||||
bool affected = false;
|
||||
if (mb && render_info)
|
||||
if (!all_parts_colorized && mb && render_info)
|
||||
{
|
||||
// Test if material is affected by hue change
|
||||
affected = render_info->isColorizable(i);
|
||||
}
|
||||
|
||||
GLmeshes.push_back(allocateMeshBuffer(mb, m_debug_name,
|
||||
affected ? render_info : NULL));
|
||||
affected || all_parts_colorized ? render_info : NULL));
|
||||
}
|
||||
isMaterialInitialized = false;
|
||||
isGLInitialized = false;
|
||||
|
||||
@@ -35,7 +35,7 @@ protected:
|
||||
|
||||
// Misc passes shaders (glow, displace...)
|
||||
void drawGlow(const GLMesh &mesh);
|
||||
void createGLMeshes(RenderInfo* render_info = NULL);
|
||||
void createGLMeshes(RenderInfo* render_info = NULL, bool all_parts_colorized = false);
|
||||
void cleanGLMeshes();
|
||||
void setFirstTimeMaterial();
|
||||
void updatevbo();
|
||||
@@ -57,7 +57,7 @@ public:
|
||||
const irr::core::vector3df& rotation = irr::core::vector3df(0, 0, 0),
|
||||
const irr::core::vector3df& scale = irr::core::vector3df(1.0f, 1.0f, 1.0f),
|
||||
bool createGLMeshes = true,
|
||||
RenderInfo* render_info = NULL);
|
||||
RenderInfo* render_info = NULL, bool all_parts_colorized = false);
|
||||
virtual void render();
|
||||
virtual void setMesh(irr::scene::IMesh* mesh);
|
||||
virtual void OnRegisterSceneNode();
|
||||
|
||||
@@ -459,7 +459,7 @@ scene::ISceneNode* KartModel::attachModel(bool animated_models, bool always_anim
|
||||
{
|
||||
if(!m_wheel_model[i]) continue;
|
||||
m_wheel_node[i] = irr_driver->addMesh(m_wheel_model[i], "wheel",
|
||||
node, getRenderInfo());
|
||||
node, getRenderInfo(), true/*all_parts_colorized*/);
|
||||
Vec3 wheel_min, wheel_max;
|
||||
MeshTools::minMax3D(m_wheel_model[i], &wheel_min, &wheel_max);
|
||||
m_wheel_graphics_radius[i] = 0.5f*(wheel_max.getY() - wheel_min.getY());
|
||||
@@ -481,7 +481,8 @@ scene::ISceneNode* KartModel::attachModel(bool animated_models, bool always_anim
|
||||
if(obj.m_model)
|
||||
{
|
||||
obj.m_node = irr_driver->addAnimatedMesh(obj.m_model,
|
||||
"speedweighted", node, getRenderInfo());
|
||||
"speedweighted", node, getRenderInfo(),
|
||||
true/*all_parts_colorized*/);
|
||||
obj.m_node->grab();
|
||||
|
||||
obj.m_node->setFrameLoop(m_animation_frame[AF_SPEED_WEIGHTED_START],
|
||||
|
||||
Reference in New Issue
Block a user