Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add option to disable backface culling for models
- Disabled by default (except players)
- Fixes #2984
  • Loading branch information
BlockMen committed Oct 25, 2015
1 parent 6907c3e commit 50ba7e1
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 4 deletions.
1 change: 1 addition & 0 deletions doc/lua_api.txt
Expand Up @@ -3045,6 +3045,7 @@ Definition tables
stepheight = 0,
automatic_face_movement_dir = 0.0,
-- ^ automatically set yaw to movement direction; offset in degrees; false to disable
backface_culling = true, -- false to disable backface_culling for model
}

### Entity definition (`register_entity`)
Expand Down
5 changes: 5 additions & 0 deletions src/content_cao.cpp
Expand Up @@ -934,10 +934,15 @@ void GenericCAO::addToScene(scene::ISceneManager *smgr, ITextureSource *tsrc,
u8 li = m_last_light;
setMeshColor(m_animated_meshnode->getMesh(), 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_BILINEAR_FILTER, false);
m_animated_meshnode->setMaterialType(video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
m_animated_meshnode->setMaterialFlag(video::EMF_FOG_ENABLE, true);
m_animated_meshnode->setMaterialFlag(video::EMF_BACK_FACE_CULLING, backface_culling);
}
else
errorstream<<"GenericCAO::addToScene(): Could not load mesh "<<m_prop.mesh<<std::endl;
Expand Down
7 changes: 5 additions & 2 deletions src/object_properties.cpp
Expand Up @@ -42,7 +42,8 @@ ObjectProperties::ObjectProperties():
automatic_rotate(0),
stepheight(0),
automatic_face_movement_dir(false),
automatic_face_movement_dir_offset(0.0)
automatic_face_movement_dir_offset(0.0),
backface_culling(true)
{
textures.push_back("unknown_object.png");
colors.push_back(video::SColor(255,255,255,255));
Expand Down Expand Up @@ -74,6 +75,7 @@ std::string ObjectProperties::dump()
os<<", is_visible="<<is_visible;
os<<", makes_footstep_sound="<<makes_footstep_sound;
os<<", automatic_rotate="<<automatic_rotate;
os<<", backface_culling="<<backface_culling;
return os.str();
}

Expand Down Expand Up @@ -106,6 +108,7 @@ void ObjectProperties::serialize(std::ostream &os) const
writeF1000(os,stepheight);
writeU8(os, automatic_face_movement_dir);
writeF1000(os, automatic_face_movement_dir_offset);
writeU8(os, backface_culling);
// Add stuff only at the bottom.
// Never remove anything, because we don't want new versions of this
}
Expand Down Expand Up @@ -142,11 +145,11 @@ void ObjectProperties::deSerialize(std::istream &is)
stepheight = readF1000(is);
automatic_face_movement_dir = readU8(is);
automatic_face_movement_dir_offset = readF1000(is);
backface_culling = readU8(is);
}catch(SerializationError &e){}
}
else
{
throw SerializationError("unsupported ObjectProperties version");
}
}

2 changes: 1 addition & 1 deletion src/object_properties.h
Expand Up @@ -47,6 +47,7 @@ struct ObjectProperties
f32 stepheight;
bool automatic_face_movement_dir;
f32 automatic_face_movement_dir_offset;
bool backface_culling;


ObjectProperties();
Expand All @@ -56,4 +57,3 @@ struct ObjectProperties
};

#endif

4 changes: 3 additions & 1 deletion src/script/common/c_content.cpp
Expand Up @@ -197,6 +197,7 @@ void read_object_properties(lua_State *L, int index,
prop->automatic_face_movement_dir_offset = 0.0;
}
lua_pop(L, 1);
getboolfield(L, -1, "backface_culling", prop->backface_culling);
}

/******************************************************************************/
Expand Down Expand Up @@ -255,6 +256,8 @@ void push_object_properties(lua_State *L, ObjectProperties *prop)
else
lua_pushboolean(L, false);
lua_setfield(L, -2, "automatic_face_movement_dir");
lua_pushboolean(L, prop->backface_culling);
lua_setfield(L, -2, "backface_culling");
}

/******************************************************************************/
Expand Down Expand Up @@ -1231,4 +1234,3 @@ void read_json_value(lua_State *L, Json::Value &root, int index, u8 recursion)
}
lua_pop(L, 1); // Pop value
}

0 comments on commit 50ba7e1

Please sign in to comment.