forked from Mirrorlandia_minetest/minetest
Extract Game::drawScene from Game::updateFrame
This commit is contained in:
parent
ca1a723890
commit
7162b536eb
@ -821,6 +821,7 @@ protected:
|
|||||||
const CameraOrientation &cam);
|
const CameraOrientation &cam);
|
||||||
void updateClouds(float dtime);
|
void updateClouds(float dtime);
|
||||||
void updateShadows();
|
void updateShadows();
|
||||||
|
void drawScene(ProfilerGraph *graph, RunStats *stats);
|
||||||
|
|
||||||
// Misc
|
// Misc
|
||||||
void showOverlayMessage(const char *msg, float dtime, int percent,
|
void showOverlayMessage(const char *msg, float dtime, int percent,
|
||||||
@ -4133,52 +4134,17 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime,
|
|||||||
/*
|
/*
|
||||||
==================== Drawing begins ====================
|
==================== Drawing begins ====================
|
||||||
*/
|
*/
|
||||||
const video::SColor skycolor = sky->getSkyColor();
|
drawScene(graph, stats);
|
||||||
|
|
||||||
TimeTaker tt_draw("Draw scene", nullptr, PRECISION_MICRO);
|
|
||||||
driver->beginScene(true, true, skycolor);
|
|
||||||
|
|
||||||
bool draw_wield_tool = (m_game_ui->m_flags.show_hud &&
|
|
||||||
(player->hud_flags & HUD_FLAG_WIELDITEM_VISIBLE) &&
|
|
||||||
(camera->getCameraMode() == CAMERA_MODE_FIRST));
|
|
||||||
bool draw_crosshair = (
|
|
||||||
(player->hud_flags & HUD_FLAG_CROSSHAIR_VISIBLE) &&
|
|
||||||
(camera->getCameraMode() != CAMERA_MODE_THIRD_FRONT));
|
|
||||||
#ifdef HAVE_TOUCHSCREENGUI
|
|
||||||
if (isNoCrosshairAllowed())
|
|
||||||
draw_crosshair = false;
|
|
||||||
#endif
|
|
||||||
m_rendering_engine->draw_scene(skycolor, m_game_ui->m_flags.show_hud,
|
|
||||||
m_game_ui->m_flags.show_minimap, draw_wield_tool, draw_crosshair);
|
|
||||||
|
|
||||||
/*
|
|
||||||
Profiler graph
|
|
||||||
*/
|
|
||||||
v2u32 screensize = driver->getScreenSize();
|
|
||||||
|
|
||||||
if (m_game_ui->m_flags.show_profiler_graph)
|
|
||||||
graph->draw(10, screensize.Y - 10, driver, g_fontengine->getFont());
|
|
||||||
|
|
||||||
/*
|
|
||||||
Damage flash
|
|
||||||
*/
|
|
||||||
if (runData.damage_flash > 0.0f) {
|
|
||||||
video::SColor color(runData.damage_flash, 180, 0, 0);
|
|
||||||
driver->draw2DRectangle(color,
|
|
||||||
core::rect<s32>(0, 0, screensize.X, screensize.Y),
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
runData.damage_flash -= 384.0f * dtime;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==================== End scene ====================
|
==================== End scene ====================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
driver->endScene();
|
// Damage flash is drawn in drawScene, but the timing update is done here to
|
||||||
|
// keep dtime out of the drawing code.
|
||||||
|
if (runData.damage_flash > 0.0f) {
|
||||||
|
runData.damage_flash -= 384.0f * dtime;
|
||||||
|
}
|
||||||
|
|
||||||
stats->drawtime = tt_draw.stop(true);
|
|
||||||
g_profiler->graphAdd("Draw scene [us]", stats->drawtime);
|
|
||||||
g_profiler->avg("Game::updateFrame(): update frame [ms]", tt_update.stop(true));
|
g_profiler->avg("Game::updateFrame(): update frame [ms]", tt_update.stop(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4246,6 +4212,52 @@ void Game::updateShadows()
|
|||||||
shadow->getDirectionalLight().update_frustum(camera, client, m_camera_offset_changed);
|
shadow->getDirectionalLight().update_frustum(camera, client, m_camera_offset_changed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Game::drawScene(ProfilerGraph *graph, RunStats *stats)
|
||||||
|
{
|
||||||
|
const video::SColor skycolor = this->sky->getSkyColor();
|
||||||
|
|
||||||
|
TimeTaker tt_draw("Draw scene", nullptr, PRECISION_MICRO);
|
||||||
|
this->driver->beginScene(true, true, skycolor);
|
||||||
|
|
||||||
|
const LocalPlayer *player = this->client->getEnv().getLocalPlayer();
|
||||||
|
bool draw_wield_tool = (this->m_game_ui->m_flags.show_hud &&
|
||||||
|
(player->hud_flags & HUD_FLAG_WIELDITEM_VISIBLE) &&
|
||||||
|
(this->camera->getCameraMode() == CAMERA_MODE_FIRST));
|
||||||
|
bool draw_crosshair = (
|
||||||
|
(player->hud_flags & HUD_FLAG_CROSSHAIR_VISIBLE) &&
|
||||||
|
(this->camera->getCameraMode() != CAMERA_MODE_THIRD_FRONT));
|
||||||
|
#ifdef HAVE_TOUCHSCREENGUI
|
||||||
|
if (this->isNoCrosshairAllowed())
|
||||||
|
draw_crosshair = false;
|
||||||
|
#endif
|
||||||
|
this->m_rendering_engine->draw_scene(skycolor, this->m_game_ui->m_flags.show_hud,
|
||||||
|
this->m_game_ui->m_flags.show_minimap, draw_wield_tool, draw_crosshair);
|
||||||
|
|
||||||
|
/*
|
||||||
|
Profiler graph
|
||||||
|
*/
|
||||||
|
v2u32 screensize = this->driver->getScreenSize();
|
||||||
|
|
||||||
|
if (this->m_game_ui->m_flags.show_profiler_graph)
|
||||||
|
graph->draw(10, screensize.Y - 10, driver, g_fontengine->getFont());
|
||||||
|
|
||||||
|
/*
|
||||||
|
Damage flash
|
||||||
|
*/
|
||||||
|
if (this->runData.damage_flash > 0.0f) {
|
||||||
|
video::SColor color(this->runData.damage_flash, 180, 0, 0);
|
||||||
|
this->driver->draw2DRectangle(color,
|
||||||
|
core::rect<s32>(0, 0, screensize.X, screensize.Y),
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->driver->endScene();
|
||||||
|
|
||||||
|
stats->drawtime = tt_draw.stop(true);
|
||||||
|
g_profiler->graphAdd("Draw scene [us]", stats->drawtime);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
Misc
|
Misc
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
Loading…
Reference in New Issue
Block a user