aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlhofhansl <lhofhansl@yahoo.com>2016-10-30 20:35:55 -0700
committerkwolekr <kwolekr@minetest.net>2016-10-30 23:35:55 -0400
commite1842ed370f7cab23e460979a08886b5df38e1b3 (patch)
treea16653ec6e2f9be8411dd1aa3ae629dd301de687
parent595932a8602292f28333ce14e20cee4b6d8820c1 (diff)
downloadminetest-e1842ed370f7cab23e460979a08886b5df38e1b3.tar.gz
minetest-e1842ed370f7cab23e460979a08886b5df38e1b3.tar.bz2
minetest-e1842ed370f7cab23e460979a08886b5df38e1b3.zip
Optionally disable optimization that causes underwater and cave rendering glitches. (#4686)
-rw-r--r--builtin/settingtypes.txt7
-rw-r--r--src/clientiface.cpp4
-rw-r--r--src/defaultsettings.cpp1
3 files changed, 11 insertions, 1 deletions
diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt
index 492d7c79d..e48fc9bc5 100644
--- a/builtin/settingtypes.txt
+++ b/builtin/settingtypes.txt
@@ -849,6 +849,13 @@ liquid_queue_purge_time (Liquid queue purge time) int 0
# Liquid update interval in seconds.
liquid_update (Liquid update tick) float 1.0
+# At this distance the server will aggressively optimize which blocks are sent to clients.
+# Small values potentially improve performance a lot, at the expense of visible rendering glitches.
+# (some blocks will not be rendered under water and in caves, as well as sometimes on land)
+# Setting this to a value greater than max_block_send_distance disables this optimization.
+# Stated in mapblocks (16 nodes)
+block_send_optimize_distance (block send optimize distance) int 4 2
+
[*Mapgen]
# Name of map generator to be used when creating a new world.
diff --git a/src/clientiface.cpp b/src/clientiface.cpp
index d2e3a6da0..7dce77cd7 100644
--- a/src/clientiface.cpp
+++ b/src/clientiface.cpp
@@ -174,6 +174,8 @@ void RemoteClient::GetNextBlocks (
s32 new_nearest_unsent_d = -1;
const s16 full_d_max = g_settings->getS16("max_block_send_distance");
+ const s16 d_opt = g_settings->getS16("block_send_optimize_distance");
+
s16 d_max = full_d_max;
s16 d_max_gen = g_settings->getS16("max_block_generate_distance");
@@ -300,7 +302,7 @@ void RemoteClient::GetNextBlocks (
Block is near ground level if night-time mesh
differs from day-time mesh.
*/
- if(d >= 4)
+ if(d >= d_opt)
{
if(block->getDayNightDiff() == false)
continue;
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index a64840a8f..2cb57532d 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -279,6 +279,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("max_simultaneous_block_sends_server_total", "40");
settings->setDefault("max_block_send_distance", "9");
settings->setDefault("max_block_generate_distance", "7");
+ settings->setDefault("block_send_optimize_distance", "4");
settings->setDefault("max_clearobjects_extra_loaded_blocks", "4096");
settings->setDefault("time_send_interval", "5");
settings->setDefault("time_speed", "72");