summaryrefslogtreecommitdiff
path: root/src/content_mapblock.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-11-08 16:17:38 +0200
committerPerttu Ahola <celeron55@gmail.com>2011-11-08 16:17:38 +0200
commit045e32b6ecb99432beac3363685fb622e9ec3457 (patch)
tree8cd881ec22499a5848e8682061a4cf10ae8bd91c /src/content_mapblock.cpp
parentfea55a9b87b47eb7cac19587923c5debde8336b7 (diff)
downloadminetest-045e32b6ecb99432beac3363685fb622e9ec3457.tar.gz
minetest-045e32b6ecb99432beac3363685fb622e9ec3457.tar.bz2
minetest-045e32b6ecb99432beac3363685fb622e9ec3457.zip
Fix water-glass and water-lava surfaces
Diffstat (limited to 'src/content_mapblock.cpp')
-rw-r--r--src/content_mapblock.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/content_mapblock.cpp b/src/content_mapblock.cpp
index 60e07781e..b033e484c 100644
--- a/src/content_mapblock.cpp
+++ b/src/content_mapblock.cpp
@@ -364,6 +364,9 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
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;
@@ -516,10 +519,10 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
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
@@ -530,6 +533,12 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
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] =
{
@@ -603,7 +612,7 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
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);
}
/*