diff options
author | x2048 <codeforsmile@gmail.com> | 2022-08-13 22:33:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-13 22:33:26 +0200 |
commit | d1cbb4bd8a3fea147032fde63fdc4f5298f20217 (patch) | |
tree | eab23e9a249b59fd742c8fd4bd313f7d14f0af43 /src | |
parent | 0e439b2fa3f0ba4f3352273519c32ebc9c3a680e (diff) | |
download | minetest-d1cbb4bd8a3fea147032fde63fdc4f5298f20217.tar.xz |
Reduce the use of porting::getTimeMs() when rendering frames (#12679)
* Avoid calling TimeTaker too frequently in renderMapXXX
* Calculate animation timer once per frame
* Remove code that breaks rendering frame at 2000ms
Co-authored-by: sfan5 <sfan5@live.de>
Co-authored-by: sfan5 <sfan5@live.de>
Diffstat (limited to 'src')
-rw-r--r-- | src/client/clientenvironment.cpp | 6 | ||||
-rw-r--r-- | src/client/clientenvironment.h | 5 | ||||
-rw-r--r-- | src/client/clientmap.cpp | 14 | ||||
-rw-r--r-- | src/client/game.cpp | 10 |
4 files changed, 19 insertions, 16 deletions
diff --git a/src/client/clientenvironment.cpp b/src/client/clientenvironment.cpp index 5dc10f48f..d7b3c4950 100644 --- a/src/client/clientenvironment.cpp +++ b/src/client/clientenvironment.cpp @@ -34,6 +34,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include "shader.h" #include "content_cao.h" +#include "porting.h" #include <algorithm> #include "client/renderingengine.h" @@ -513,3 +514,8 @@ void ClientEnvironment::getSelectedActiveObjects( } } } + +void ClientEnvironment::updateFrameTime() +{ + m_frame_time = porting::getTimeMs(); +} diff --git a/src/client/clientenvironment.h b/src/client/clientenvironment.h index 864496a41..f737f33b4 100644 --- a/src/client/clientenvironment.h +++ b/src/client/clientenvironment.h @@ -141,6 +141,10 @@ public: void updateCameraOffset(const v3s16 &camera_offset) { m_camera_offset = camera_offset; } v3s16 getCameraOffset() const { return m_camera_offset; } + + void updateFrameTime(); + u64 getFrameTime() const { return m_frame_time; } + private: ClientMap *m_map; LocalPlayer *m_local_player = nullptr; @@ -153,4 +157,5 @@ private: IntervalLimiter m_active_object_light_update_interval; std::list<std::string> m_player_names; v3s16 m_camera_offset; + u64 m_frame_time; }; diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp index c5ba98ff6..6764cf3ed 100644 --- a/src/client/clientmap.cpp +++ b/src/client/clientmap.cpp @@ -449,13 +449,6 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass) for (auto &descriptor : draw_order) { scene::IMeshBuffer *buf = descriptor.getBuffer(); - // Check and abort if the machine is swapping a lot - if (draw.getTimerTime() > 2000) { - infostream << "ClientMap::renderMap(): Rendering took >2s, " << - "returning." << std::endl; - return; - } - if (!descriptor.m_reuse_material) { auto &material = buf->getMaterial(); @@ -803,13 +796,6 @@ void ClientMap::renderMapShadows(video::IVideoDriver *driver, for (auto &descriptor : draw_order) { scene::IMeshBuffer *buf = descriptor.getBuffer(); - // Check and abort if the machine is swapping a lot - if (draw.getTimerTime() > 1000) { - infostream << "ClientMap::renderMapShadows(): Rendering " - "took >1s, returning." << std::endl; - break; - } - if (!descriptor.m_reuse_material) { // override some material properties video::SMaterial local_material = buf->getMaterial(); diff --git a/src/client/game.cpp b/src/client/game.cpp index c34e3a415..0e86de496 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -502,7 +502,7 @@ public: float clr[4] = {star_color.r, star_color.g, star_color.b, star_color.a}; m_star_color.set(clr, services); - u32 animation_timer = porting::getTimeMs() % 1000000; + u32 animation_timer = m_client->getEnv().getFrameTime() % 1000000; float animation_timer_f = (float)animation_timer / 100000.f; m_animation_timer_vertex.set(&animation_timer_f, services); m_animation_timer_pixel.set(&animation_timer_f, services); @@ -3275,7 +3275,7 @@ PointedThing Game::updatePointedThing( final_color_blend(&c, light_level, daynight_ratio); // Modify final color a bit with time - u32 timer = porting::getTimeMs() % 5000; + u32 timer = client->getEnv().getFrameTime() % 5000; float timerf = (float) (irr::core::PI * ((timer / 2500.0) - 0.5)); float sin_r = 0.08f * std::sin(timerf); float sin_g = 0.08f * std::sin(timerf + irr::core::PI * 0.5f); @@ -3748,6 +3748,12 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, LocalPlayer *player = client->getEnv().getLocalPlayer(); /* + Frame time + */ + + client->getEnv().updateFrameTime(); + + /* Fog range */ |