diff options
author | Lars Hofhansl <larsh@apache.org> | 2017-12-04 22:25:09 -0800 |
---|---|---|
committer | Lars Hofhansl <larsh@apache.org> | 2017-12-04 22:29:11 -0800 |
commit | fd9f195fcc2e4e592dbad3290876486eb08318b2 (patch) | |
tree | 5e8df8c8057e1a268f700541f8efdf2e4174a2ce /src/content_cao.cpp | |
parent | f470cb7270560a26afff0a0eadfc69070236c109 (diff) | |
download | minetest-fd9f195fcc2e4e592dbad3290876486eb08318b2.tar.gz minetest-fd9f195fcc2e4e592dbad3290876486eb08318b2.tar.bz2 minetest-fd9f195fcc2e4e592dbad3290876486eb08318b2.zip |
Use Irrlicht's mesh cache for animated meshes.
Fixes #6676.
Allow animated meshes to be cached in Irrlicht's builtin mesh cache.
Use Material.EmmissiveColor instead of manipulating the mesh' vertex colors.
Diffstat (limited to 'src/content_cao.cpp')
-rw-r--r-- | src/content_cao.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/content_cao.cpp b/src/content_cao.cpp index 26f5634d4..9d87c733e 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -563,7 +563,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc) } else if(m_prop.visual == "mesh") { infostream<<"GenericCAO::addToScene(): mesh"<<std::endl; - scene::IAnimatedMesh *mesh = m_client->getMesh(m_prop.mesh); + scene::IAnimatedMesh *mesh = m_client->getMesh(m_prop.mesh, true); if(mesh) { m_animated_meshnode = RenderingEngine::get_scene_manager()-> @@ -575,13 +575,17 @@ void GenericCAO::addToScene(ITextureSource *tsrc) m_prop.visual_size.Y, m_prop.visual_size.X)); u8 li = m_last_light; + + // set vertex colors to ensure alpha is set setMeshColor(m_animated_meshnode->getMesh(), video::SColor(255,li,li,li)); + setAnimatedMeshColor(m_animated_meshnode, video::SColor(255,li,li,li)); + bool backface_culling = m_prop.backface_culling; if (m_is_player) backface_culling = false; - m_animated_meshnode->setMaterialFlag(video::EMF_LIGHTING, false); + m_animated_meshnode->setMaterialFlag(video::EMF_LIGHTING, true); m_animated_meshnode->setMaterialFlag(video::EMF_BILINEAR_FILTER, false); m_animated_meshnode->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF); m_animated_meshnode->setMaterialFlag(video::EMF_FOG_ENABLE, true); @@ -669,7 +673,7 @@ void GenericCAO::updateLightNoCheck(u8 light_at_pos) if (m_meshnode) { setMeshColor(m_meshnode->getMesh(), color); } else if (m_animated_meshnode) { - setMeshColor(m_animated_meshnode->getMesh(), color); + setAnimatedMeshColor(m_animated_meshnode, color); } else if (m_wield_meshnode) { m_wield_meshnode->setColor(color); } else if (m_spritenode) { @@ -1025,7 +1029,7 @@ void GenericCAO::updateTextures(std::string mod) // Set material flags and texture video::SMaterial& material = m_animated_meshnode->getMaterial(i); material.TextureLayer[0].Texture = texture; - material.setFlag(video::EMF_LIGHTING, false); + material.setFlag(video::EMF_LIGHTING, true); material.setFlag(video::EMF_BILINEAR_FILTER, false); // don't filter low-res textures, makes them look blurry |