summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-04-24 12:31:19 +0300
committerPerttu Ahola <celeron55@gmail.com>2011-04-24 12:31:19 +0300
commitb21c7de3eda09b9117123639589c0521ce243afd (patch)
treec7ddb37719eb6e61b4cb5cf35b5b5fb3dcdc07ba
parent8c1f7a0dd27782cfc85dce624ccc4e3276f18776 (diff)
downloadminetest-b21c7de3eda09b9117123639589c0521ce243afd.tar.gz
minetest-b21c7de3eda09b9117123639589c0521ce243afd.tar.bz2
minetest-b21c7de3eda09b9117123639589c0521ce243afd.zip
Added a setting for disabling smooth lighting. Updated changelog.
-rw-r--r--doc/changelog.txt3
-rw-r--r--minetest.conf.example2
-rw-r--r--src/defaultsettings.cpp1
-rw-r--r--src/mapblock.cpp172
4 files changed, 97 insertions, 81 deletions
diff --git a/doc/changelog.txt b/doc/changelog.txt
index d61f37861..f467d6ecd 100644
--- a/doc/changelog.txt
+++ b/doc/changelog.txt
@@ -3,6 +3,9 @@ Minetest-c55 changelog
This should contain all the major changes.
For minor stuff, refer to the commit log of the repository.
+X:
+- Smooth lighting with simple ambient occlusion
+
2011-04-23_0_test:
- Small bug fixes
- Item drop multiplication fixed
diff --git a/minetest.conf.example b/minetest.conf.example
index 770677da1..48f326229 100644
--- a/minetest.conf.example
+++ b/minetest.conf.example
@@ -27,6 +27,8 @@
#new_style_water = true
# Enable nice leaves; disable for speed
#new_style_leaves = true
+# Enable smooth lighting with simple ambient occlusion; disable for speed
+#smooth_lighting = true
# Whether to draw a frametime graph
#frametime_graph = false
# Enable combining mainly used textures to a bigger one
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index d1e9d45cd..fc63856ba 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -41,6 +41,7 @@ void set_default_settings()
g_settings.setDefault("enable_fog", "true");
g_settings.setDefault("new_style_water", "false");
g_settings.setDefault("new_style_leaves", "true");
+ g_settings.setDefault("smooth_lighting", "true");
g_settings.setDefault("frametime_graph", "false");
g_settings.setDefault("enable_texture_atlas", "true");
g_settings.setDefault("texture_path", "");
diff --git a/src/mapblock.cpp b/src/mapblock.cpp
index 69834b56a..824f7dc8a 100644
--- a/src/mapblock.cpp
+++ b/src/mapblock.cpp
@@ -400,7 +400,8 @@ void updateFastFaceRow(
core::array<FastFace> &dest,
NodeModMap &temp_mods,
VoxelManipulator &vmanip,
- v3s16 blockpos_nodes)
+ v3s16 blockpos_nodes,
+ bool smooth_lighting)
{
v3s16 p = startpos;
@@ -508,50 +509,53 @@ void updateFastFaceRow(
scale.Z = continuous_tiles_count;
}
- //u8 li = decode_light(light);
+ if(smooth_lighting == false)
+ li0 = li1 = li2 = li3 = decode_light(light);
// If node at sp (tile0) is more solid
if(mf == 1)
{
- if(face_dir == v3s16(0,0,1))
+ if(smooth_lighting)
{
- // Going along X+, faces in Z+
- li0 = getSmoothLight(p_map_first+v3s16(0,0,1),
- vmanip, daynight_ratio);
- li1 = getSmoothLight(p_map+v3s16(1,0,1),
- vmanip, daynight_ratio);
- li2 = getSmoothLight(p_map+v3s16(1,1,1),
- vmanip, daynight_ratio);
- li3 = getSmoothLight(p_map_first+v3s16(0,1,1),
- vmanip, daynight_ratio);
- }
- else if(face_dir == v3s16(0,1,0))
- {
- // Going along X+, faces in Y+
- li0 = getSmoothLight(p_map_first+v3s16(0,1,1),
- vmanip, daynight_ratio);
- li1 = getSmoothLight(p_map+v3s16(1,1,1),
- vmanip, daynight_ratio);
- li2 = getSmoothLight(p_map+v3s16(1,1,0),
- vmanip, daynight_ratio);
- li3 = getSmoothLight(p_map_first+v3s16(0,1,0),
- vmanip, daynight_ratio);
- }
- else if(face_dir == v3s16(1,0,0))
- {
- // Going along Z+, faces in X+
- li0 = getSmoothLight(p_map_first+v3s16(1,0,1),
- vmanip, daynight_ratio);
- li1 = getSmoothLight(p_map+v3s16(1,0,0),
- vmanip, daynight_ratio);
- li2 = getSmoothLight(p_map+v3s16(1,1,0),
- vmanip, daynight_ratio);
- li3 = getSmoothLight(p_map_first+v3s16(1,1,1),
- vmanip, daynight_ratio);
+ if(face_dir == v3s16(0,0,1))
+ {
+ // Going along X+, faces in Z+
+ li0 = getSmoothLight(p_map_first+v3s16(0,0,1),
+ vmanip, daynight_ratio);
+ li1 = getSmoothLight(p_map+v3s16(1,0,1),
+ vmanip, daynight_ratio);
+ li2 = getSmoothLight(p_map+v3s16(1,1,1),
+ vmanip, daynight_ratio);
+ li3 = getSmoothLight(p_map_first+v3s16(0,1,1),
+ vmanip, daynight_ratio);
+ }
+ else if(face_dir == v3s16(0,1,0))
+ {
+ // Going along X+, faces in Y+
+ li0 = getSmoothLight(p_map_first+v3s16(0,1,1),
+ vmanip, daynight_ratio);
+ li1 = getSmoothLight(p_map+v3s16(1,1,1),
+ vmanip, daynight_ratio);
+ li2 = getSmoothLight(p_map+v3s16(1,1,0),
+ vmanip, daynight_ratio);
+ li3 = getSmoothLight(p_map_first+v3s16(0,1,0),
+ vmanip, daynight_ratio);
+ }
+ else if(face_dir == v3s16(1,0,0))
+ {
+ // Going along Z+, faces in X+
+ li0 = getSmoothLight(p_map_first+v3s16(1,0,1),
+ vmanip, daynight_ratio);
+ li1 = getSmoothLight(p_map+v3s16(1,0,0),
+ vmanip, daynight_ratio);
+ li2 = getSmoothLight(p_map+v3s16(1,1,0),
+ vmanip, daynight_ratio);
+ li3 = getSmoothLight(p_map_first+v3s16(1,1,1),
+ vmanip, daynight_ratio);
+ }
+ else assert(0);
}
- else assert(0);
- //makeFastFace(tile0, li, li, li, li,
makeFastFace(tile0, li0, li1, li2, li3,
sp, face_dir, scale,
posRelative_f, dest);
@@ -559,49 +563,51 @@ void updateFastFaceRow(
// If node at sp is less solid (mf == 2)
else
{
- // Offset to the actual solid block
- p_map += face_dir;
- p_map_first += face_dir;
-
- if(face_dir == v3s16(0,0,1))
+ if(smooth_lighting)
{
- // Going along X+, faces in Z-
- li0 = getSmoothLight(p_map+v3s16(1,0,0),
- vmanip, daynight_ratio);
- li1 = getSmoothLight(p_map_first+v3s16(0,0,0),
- vmanip, daynight_ratio);
- li2 = getSmoothLight(p_map_first+v3s16(0,1,0),
- vmanip, daynight_ratio);
- li3 = getSmoothLight(p_map+v3s16(1,1,0),
- vmanip, daynight_ratio);
- }
- else if(face_dir == v3s16(0,1,0))
- {
- // Going along X+, faces in Y-
- li0 = getSmoothLight(p_map_first+v3s16(0,0,0),
- vmanip, daynight_ratio);
- li1 = getSmoothLight(p_map+v3s16(1,0,0),
- vmanip, daynight_ratio);
- li2 = getSmoothLight(p_map+v3s16(1,0,1),
- vmanip, daynight_ratio);
- li3 = getSmoothLight(p_map_first+v3s16(0,0,1),
- vmanip, daynight_ratio);
- }
- else if(face_dir == v3s16(1,0,0))
- {
- // Going along Z+, faces in X-
- li0 = getSmoothLight(p_map_first+v3s16(0,0,0),
- vmanip, daynight_ratio);
- li1 = getSmoothLight(p_map+v3s16(0,0,1),
- vmanip, daynight_ratio);
- li2 = getSmoothLight(p_map+v3s16(0,1,1),
- vmanip, daynight_ratio);
- li3 = getSmoothLight(p_map_first+v3s16(0,1,0),
- vmanip, daynight_ratio);
+ // Offset to the actual solid block
+ p_map += face_dir;
+ p_map_first += face_dir;
+
+ if(face_dir == v3s16(0,0,1))
+ {
+ // Going along X+, faces in Z-
+ li0 = getSmoothLight(p_map+v3s16(1,0,0),
+ vmanip, daynight_ratio);
+ li1 = getSmoothLight(p_map_first+v3s16(0,0,0),
+ vmanip, daynight_ratio);
+ li2 = getSmoothLight(p_map_first+v3s16(0,1,0),
+ vmanip, daynight_ratio);
+ li3 = getSmoothLight(p_map+v3s16(1,1,0),
+ vmanip, daynight_ratio);
+ }
+ else if(face_dir == v3s16(0,1,0))
+ {
+ // Going along X+, faces in Y-
+ li0 = getSmoothLight(p_map_first+v3s16(0,0,0),
+ vmanip, daynight_ratio);
+ li1 = getSmoothLight(p_map+v3s16(1,0,0),
+ vmanip, daynight_ratio);
+ li2 = getSmoothLight(p_map+v3s16(1,0,1),
+ vmanip, daynight_ratio);
+ li3 = getSmoothLight(p_map_first+v3s16(0,0,1),
+ vmanip, daynight_ratio);
+ }
+ else if(face_dir == v3s16(1,0,0))
+ {
+ // Going along Z+, faces in X-
+ li0 = getSmoothLight(p_map_first+v3s16(0,0,0),
+ vmanip, daynight_ratio);
+ li1 = getSmoothLight(p_map+v3s16(0,0,1),
+ vmanip, daynight_ratio);
+ li2 = getSmoothLight(p_map+v3s16(0,1,1),
+ vmanip, daynight_ratio);
+ li3 = getSmoothLight(p_map_first+v3s16(0,1,0),
+ vmanip, daynight_ratio);
+ }
+ else assert(0);
}
- else assert(0);
- //makeFastFace(tile1, li, li, li, li,
makeFastFace(tile1, li0, li1, li2, li3,
sp+face_dir_f, -face_dir, scale,
posRelative_f, dest);
@@ -731,6 +737,7 @@ scene::SMesh* makeMapBlockMesh(MeshMakeData *data)
*/
bool new_style_water = g_settings.getBool("new_style_water");
bool new_style_leaves = g_settings.getBool("new_style_leaves");
+ bool smooth_lighting = g_settings.getBool("smooth_lighting");
float node_water_level = 1.0;
if(new_style_water)
@@ -762,7 +769,8 @@ scene::SMesh* makeMapBlockMesh(MeshMakeData *data)
fastfaces_new,
data->m_temp_mods,
data->m_vmanip,
- blockpos_nodes);
+ blockpos_nodes,
+ smooth_lighting);
}
}
/*
@@ -779,7 +787,8 @@ scene::SMesh* makeMapBlockMesh(MeshMakeData *data)
fastfaces_new,
data->m_temp_mods,
data->m_vmanip,
- blockpos_nodes);
+ blockpos_nodes,
+ smooth_lighting);
}
}
/*
@@ -796,7 +805,8 @@ scene::SMesh* makeMapBlockMesh(MeshMakeData *data)
fastfaces_new,
data->m_temp_mods,
data->m_vmanip,
- blockpos_nodes);
+ blockpos_nodes,
+ smooth_lighting);
}
}
}