diff --git a/src/client/client.h b/src/client/client.h index b2ff9a0da..7918e6d90 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -37,6 +37,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "gameparams.h" #include "clientdynamicinfo.h" #include "util/numeric.h" +#include "clouds.h" #ifdef SERVER #error Do not include in server builds @@ -373,6 +374,9 @@ public: Camera* getCamera () { return m_camera; } scene::ISceneManager *getSceneManager(); + Clouds* getClouds() { return m_clouds; } + void setClouds(Clouds* clouds) { m_clouds = clouds; } + // IGameDef interface IItemDefManager* getItemDefManager() override; const NodeDefManager* getNodeDefManager() override; @@ -498,6 +502,7 @@ private: ELoginRegister m_allow_login_or_register = ELoginRegister::Any; Camera *m_camera = nullptr; Minimap *m_minimap = nullptr; + Clouds *m_clouds = nullptr; // Server serialization version u8 m_server_ser_ver; diff --git a/src/client/clouds.cpp b/src/client/clouds.cpp index 3ab504371..adfdbf842 100644 --- a/src/client/clouds.cpp +++ b/src/client/clouds.cpp @@ -396,6 +396,13 @@ void Clouds::render() fog_pixelfog, fog_rangefog); } +void Clouds::renderVolumetrics() { + video::IVideoDriver* driver = SceneManager->getVideoDriver(); + v2u32 ss = driver->getScreenSize(); + core::rect rect(0, 0, ss.X, ss.Y); + driver->draw2DRectangle(video::SColor(255, 255, 255, 255), rect); +} + void Clouds::step(float dtime) { m_origin = m_origin + dtime * BS * m_params.speed; diff --git a/src/client/clouds.h b/src/client/clouds.h index 23273a3c9..7676136b2 100644 --- a/src/client/clouds.h +++ b/src/client/clouds.h @@ -52,6 +52,8 @@ public: virtual void render(); + void renderVolumetrics(); + virtual const aabb3f &getBoundingBox() const { return m_box; @@ -145,6 +147,8 @@ private: bool gridFilled(int x, int y) const; + video::SMaterial m_volume_material; + video::SMaterial m_material; irr_ptr m_meshbuffer; // Value of m_origin at the time the mesh was last updated diff --git a/src/client/game.cpp b/src/client/game.cpp index c38a92483..9ebe7b3f1 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1516,6 +1516,7 @@ bool Game::createClient(const GameStartData &start_data) */ if (m_cache_enable_clouds) clouds = new Clouds(smgr, shader_src, -1, rand()); + client->setClouds(clouds); /* Skybox */ diff --git a/src/client/render/plain.cpp b/src/client/render/plain.cpp index 60a732415..fb8bcec70 100644 --- a/src/client/render/plain.cpp +++ b/src/client/render/plain.cpp @@ -66,6 +66,11 @@ void DrawHUD::run(PipelineContext &context) context.client->getCamera()->drawNametags(); } context.device->getGUIEnvironment()->drawAll(); + + // TODO: proper settings + if (true && context.client->getClouds()) { + context.client->getClouds()->renderVolumetrics(); + } }