diff options
author | Perttu Ahola <celeron55@gmail.com> | 2012-09-04 09:48:26 +0300 |
---|---|---|
committer | Perttu Ahola <celeron55@gmail.com> | 2012-09-04 22:41:03 +0300 |
commit | ee2d9d973a0397ce244f05d49083250956578780 (patch) | |
tree | d3626b0eb5f995ede95f929f721d9cd52a7c5072 /src/game.cpp | |
parent | 0e6f7a21c60d162b3b7134882dc22dbd8acd014f (diff) | |
download | minetest-ee2d9d973a0397ce244f05d49083250956578780.tar.gz minetest-ee2d9d973a0397ce244f05d49083250956578780.tar.bz2 minetest-ee2d9d973a0397ce244f05d49083250956578780.zip |
Reorganize ClientMap rendering code for a bit more performance
- Don't select blocks for drawing in every frame
- Sort meshbuffers by material before drawing
Diffstat (limited to 'src/game.cpp')
-rw-r--r-- | src/game.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/game.cpp b/src/game.cpp index 7d93e3db2..a1a197219 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1235,6 +1235,9 @@ void the_game( float object_hit_delay_timer = 0.0; float time_from_last_punch = 10; + float update_draw_list_timer = 0.0; + v3f update_draw_list_last_cam_dir; + bool invert_mouse = g_settings->getBool("invert_mouse"); bool respawn_menu_active = false; @@ -2697,7 +2700,19 @@ void the_game( item = mlist->getItem(client.getPlayerItem()); camera.wield(item); } - + + /* + Update block draw list every 200ms or when camera direction has + changed much + */ + update_draw_list_timer += dtime; + if(update_draw_list_timer >= 0.2 || + update_draw_list_last_cam_dir.getDistanceFrom(camera_direction) > 0.2){ + update_draw_list_timer = 0; + client.getEnv().getClientMap().updateDrawList(driver); + update_draw_list_last_cam_dir = camera_direction; + } + /* Drawing begins */ |