// Set material
video::SMaterial material;
material.setFlag(video::EMF_LIGHTING, false);
- material.setFlag(video::EMF_BACK_FACE_CULLING, true);
+ material.setFlag(video::EMF_BACK_FACE_CULLING, false);
material.setFlag(video::EMF_BILINEAR_FILTER, false);
material.setFlag(video::EMF_FOG_ENABLE, true);
//material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
// Set material
video::SMaterial material;
material.setFlag(video::EMF_LIGHTING, false);
- material.setFlag(video::EMF_BACK_FACE_CULLING, true);
+ material.setFlag(video::EMF_BACK_FACE_CULLING, false);
material.setFlag(video::EMF_BILINEAR_FILTER, false);
material.setFlag(video::EMF_FOG_ENABLE, true);
material.MaterialType
assert(content_features(n).special_material);
video::SMaterial &liquid_material =
*content_features(n).special_material;
+ video::SMaterial &liquid_material_bfculled =
+ *content_features(n).special_material2;
+
assert(content_features(n).special_atlas);
AtlasPointer &pa_liquid1 =
*content_features(n).special_atlas;
continue;
content_t neighbor_content = neighbor_contents[dir];
+ ContentFeatures &n_feat = content_features(neighbor_content);
- // Don't draw face if neighbor is not air or liquid
- if(neighbor_content != CONTENT_AIR
- && content_liquid(neighbor_content) == false)
+ // Don't draw face if neighbor is blocking the view
+ if(n_feat.solidness == 2)
continue;
bool neighbor_is_same_liquid = (neighbor_content == c_source
if(neighbor_is_same_liquid == true
&& top_is_same_liquid == false)
continue;
+
+ // Use backface culled material if neighbor doesn't have a
+ // solidness of 0
+ video::SMaterial *current_material = &liquid_material;
+ if(n_feat.solidness != 0 || n_feat.visual_solidness != 0)
+ current_material = &liquid_material_bfculled;
video::S3DVertex vertices[4] =
{
// Do this to not cause glitches when two liquids are
// side-by-side
- if(neighbor_is_same_liquid == false){
+ /*if(neighbor_is_same_liquid == false){
vertices[j].Pos.X *= 0.98;
vertices[j].Pos.Z *= 0.98;
- }
+ }*/
vertices[j].Pos += intToFloat(p + blockpos_nodes, BS);
}
u16 indices[] = {0,1,2,2,3,0};
// Add to mesh collector
- collector.append(liquid_material, vertices, 4, indices, 6);
+ collector.append(*current_material, vertices, 4, indices, 6);
}
/*
video::SMaterial material_rail;
material_rail.setFlag(video::EMF_LIGHTING, false);
- material_rail.setFlag(video::EMF_BACK_FACE_CULLING, true);
+ material_rail.setFlag(video::EMF_BACK_FACE_CULLING, false);
material_rail.setFlag(video::EMF_BILINEAR_FILTER, false);
material_rail.setFlag(video::EMF_FOG_ENABLE, true);
material_rail.MaterialType
// Set material
video::SMaterial material_ladder;
material_ladder.setFlag(video::EMF_LIGHTING, false);
- material_ladder.setFlag(video::EMF_BACK_FACE_CULLING, true);
+ material_ladder.setFlag(video::EMF_BACK_FACE_CULLING, false);
material_ladder.setFlag(video::EMF_BILINEAR_FILTER, false);
material_ladder.setFlag(video::EMF_FOG_ENABLE, true);
material_ladder.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;