mirror of
https://github.com/luanti-org/luanti.git
synced 2025-09-15 18:57:08 +00:00
Avoid cloud jump when switching between mainmenu and loading screen (#15163)
... by using the same Clouds object for both. The mainmenu clouds already used shaders before. I had to choose between both or neither, so now both the mainmenu clouds and the loading screen clouds use shaders if available.
This commit is contained in:
parent
4aec4fbe6f
commit
47f199e6cb
5 changed files with 12 additions and 52 deletions
|
@ -142,10 +142,6 @@ GUIEngine::GUIEngine(JoystickController *joystick,
|
|||
// create texture source
|
||||
m_texture_source = std::make_unique<MenuTextureSource>(rendering_engine->get_video_driver());
|
||||
|
||||
// create shader source
|
||||
// (currently only used by clouds)
|
||||
m_shader_source.reset(createShaderSource());
|
||||
|
||||
// create soundmanager
|
||||
#if USE_SOUND
|
||||
if (g_settings->getBool("enable_sound") && g_sound_manager_singleton.get()) {
|
||||
|
@ -296,10 +292,6 @@ void GUIEngine::run()
|
|||
IrrlichtDevice *device = m_rendering_engine->get_raw_device();
|
||||
video::IVideoDriver *driver = device->getVideoDriver();
|
||||
|
||||
// Always create clouds because they may or may not be
|
||||
// needed based on the game selected
|
||||
cloudInit();
|
||||
|
||||
unsigned int text_height = g_fontengine->getTextHeight();
|
||||
|
||||
// Reset fog color
|
||||
|
@ -395,8 +387,6 @@ GUIEngine::~GUIEngine()
|
|||
|
||||
m_irr_toplefttext->remove();
|
||||
|
||||
m_cloud.clouds.reset();
|
||||
|
||||
// delete textures
|
||||
for (image_definition &texture : m_textures) {
|
||||
if (texture.texture)
|
||||
|
@ -404,26 +394,11 @@ GUIEngine::~GUIEngine()
|
|||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void GUIEngine::cloudInit()
|
||||
{
|
||||
m_shader_source->addShaderConstantSetterFactory(
|
||||
new FogShaderConstantSetterFactory());
|
||||
|
||||
m_cloud.clouds = make_irr<Clouds>(m_smgr, m_shader_source.get(), -1, rand());
|
||||
m_cloud.clouds->setHeight(100.0f);
|
||||
m_cloud.clouds->update(v3f(0, 0, 0), video::SColor(255,240,240,255));
|
||||
|
||||
m_cloud.camera = m_smgr->addCameraSceneNode(0,
|
||||
v3f(0,0,0), v3f(0, 60, 100));
|
||||
m_cloud.camera->setFarValue(10000);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void GUIEngine::drawClouds(float dtime)
|
||||
{
|
||||
m_cloud.clouds->step(dtime*3);
|
||||
m_smgr->drawAll();
|
||||
g_menuclouds->step(dtime * 3);
|
||||
g_menucloudsmgr->drawAll();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
|
|
@ -203,8 +203,6 @@ private:
|
|||
MainMenuData *m_data = nullptr;
|
||||
/** texture source */
|
||||
std::unique_ptr<ISimpleTextureSource> m_texture_source;
|
||||
/** shader source */
|
||||
std::unique_ptr<IWritableShaderSource> m_shader_source;
|
||||
/** sound manager */
|
||||
std::unique_ptr<ISoundManager> m_sound_manager;
|
||||
|
||||
|
@ -279,23 +277,11 @@ private:
|
|||
/** and text that is in it */
|
||||
EnrichedString m_toplefttext;
|
||||
|
||||
/** initialize cloud subsystem */
|
||||
void cloudInit();
|
||||
/** do preprocessing for cloud subsystem */
|
||||
void drawClouds(float dtime);
|
||||
|
||||
/** internam data required for drawing clouds */
|
||||
struct clouddata {
|
||||
/** pointer to cloud class */
|
||||
irr_ptr<Clouds> clouds;
|
||||
/** camera required for drawing clouds */
|
||||
scene::ICameraSceneNode *camera = nullptr;
|
||||
};
|
||||
|
||||
/** is drawing of clouds enabled atm */
|
||||
bool m_clouds_enabled = true;
|
||||
/** data used to draw clouds */
|
||||
clouddata m_cloud;
|
||||
bool m_clouds_enabled = true;
|
||||
|
||||
static void fullscreenChangedCallback(const std::string &name, void *data);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue