summaryrefslogtreecommitdiff
path: root/src/content_cao.cpp
diff options
context:
space:
mode:
authorLars Hofhansl <larsh@apache.org>2017-12-04 22:25:09 -0800
committerLars Hofhansl <larsh@apache.org>2017-12-04 22:29:11 -0800
commitfd9f195fcc2e4e592dbad3290876486eb08318b2 (patch)
tree5e8df8c8057e1a268f700541f8efdf2e4174a2ce /src/content_cao.cpp
parentf470cb7270560a26afff0a0eadfc69070236c109 (diff)
downloadminetest-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.cpp12
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