mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-21 17:09:19 +02:00
build 191208. minor gfx renderer optimizations, minor bug fixes
This commit is contained in:
@@ -448,16 +448,18 @@ bool opengl33_renderer::Render()
|
|||||||
|
|
||||||
m_drawcount = m_cellqueue.size();
|
m_drawcount = m_cellqueue.size();
|
||||||
m_debugtimestext.clear();
|
m_debugtimestext.clear();
|
||||||
|
/*
|
||||||
m_debugtimestext += "cpu: " + to_string(Timer::subsystem.gfx_color.average(), 2) + " ms (" + std::to_string(m_cellqueue.size()) + " sectors)\n" +=
|
m_debugtimestext += "cpu: " + to_string(Timer::subsystem.gfx_color.average(), 2) + " ms (" + std::to_string(m_cellqueue.size()) + " sectors)\n" +=
|
||||||
"cpu swap: " + to_string(Timer::subsystem.gfx_swap.average(), 2) + " ms\n" += "uilayer: " + to_string(Timer::subsystem.gfx_gui.average(), 2) + "ms\n" +=
|
"cpu swap: " + to_string(Timer::subsystem.gfx_swap.average(), 2) + " ms\n" += "uilayer: " + to_string(Timer::subsystem.gfx_gui.average(), 2) + "ms\n" +=
|
||||||
"mainloop total: " + to_string(Timer::subsystem.mainloop_total.average(), 2) + "ms\n";
|
"mainloop total: " + to_string(Timer::subsystem.mainloop_total.average(), 2) + "ms\n";
|
||||||
|
*/
|
||||||
if (!Global.gfx_usegles)
|
if (!Global.gfx_usegles)
|
||||||
{
|
{
|
||||||
m_timequery->end();
|
m_timequery->end();
|
||||||
|
/*
|
||||||
if (m_gllasttime)
|
if (m_gllasttime)
|
||||||
m_debugtimestext += "gpu: " + to_string((double)(m_gllasttime / 1000ULL) / 1000.0, 3) + "ms";
|
m_debugtimestext += "gpu: " + to_string((double)(m_gllasttime / 1000ULL) / 1000.0, 3) + "ms";
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_stats shadowstats;
|
debug_stats shadowstats;
|
||||||
@@ -481,15 +483,28 @@ bool opengl33_renderer::Render()
|
|||||||
+ " lines: " + to_string( m_colorpass.draw_stats.lines, 7 ) + "\n"
|
+ " lines: " + to_string( m_colorpass.draw_stats.lines, 7 ) + "\n"
|
||||||
+ "particles: " + to_string( m_colorpass.draw_stats.particles, 7 );
|
+ "particles: " + to_string( m_colorpass.draw_stats.particles, 7 );
|
||||||
|
|
||||||
if (DebugModeFlag)
|
|
||||||
m_debugtimestext += m_textures.info();
|
|
||||||
|
|
||||||
++m_framestamp;
|
++m_framestamp;
|
||||||
|
|
||||||
SwapBuffers();
|
SwapBuffers();
|
||||||
|
|
||||||
Timer::subsystem.gfx_total.stop();
|
Timer::subsystem.gfx_total.stop();
|
||||||
|
|
||||||
|
m_debugtimestext +=
|
||||||
|
"cpu frame total: " + to_string( Timer::subsystem.gfx_color.average() + Timer::subsystem.gfx_shadows.average() + Timer::subsystem.gfx_swap.average(), 2 ) + " ms\n"
|
||||||
|
+ " color: " + to_string( Timer::subsystem.gfx_color.average(), 2 ) + " ms (" + std::to_string( m_cellqueue.size() ) + " sectors)\n";
|
||||||
|
if( Global.gfx_shadowmap_enabled ) {
|
||||||
|
m_debugtimestext +=
|
||||||
|
" shadows: " + to_string( Timer::subsystem.gfx_shadows.average(), 2 ) + " ms\n";
|
||||||
|
}
|
||||||
|
m_debugtimestext += " swap: " + to_string( Timer::subsystem.gfx_swap.average(), 2 ) + " ms\n";
|
||||||
|
if( !Global.gfx_usegles ) {
|
||||||
|
if (m_gllasttime)
|
||||||
|
m_debugtimestext += "gpu frame total: " + to_string((double)(m_gllasttime / 1000ULL) / 1000.0, 3) + " ms\n";
|
||||||
|
}
|
||||||
|
m_debugtimestext += "uilayer: " + to_string( Timer::subsystem.gfx_gui.average(), 2 ) + " ms\n";
|
||||||
|
if( DebugModeFlag )
|
||||||
|
m_debugtimestext += m_textures.info();
|
||||||
|
|
||||||
return true; // for now always succeed
|
return true; // for now always succeed
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -591,7 +606,7 @@ void opengl33_renderer::Render_pass(viewport_config &vp, rendermode const Mode)
|
|||||||
|
|
||||||
Timer::subsystem.gfx_shadows.stop();
|
Timer::subsystem.gfx_shadows.stop();
|
||||||
glDebug("render shadowmap end");
|
glDebug("render shadowmap end");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Global.gfx_envmap_enabled && vp.main)
|
if (Global.gfx_envmap_enabled && vp.main)
|
||||||
{
|
{
|
||||||
@@ -1319,6 +1334,8 @@ void opengl33_renderer::setup_shadow_unbind_map()
|
|||||||
// binds shadow map and updates shadow map uniform data
|
// binds shadow map and updates shadow map uniform data
|
||||||
void opengl33_renderer::setup_shadow_bind_map()
|
void opengl33_renderer::setup_shadow_bind_map()
|
||||||
{
|
{
|
||||||
|
if( false == Global.gfx_shadowmap_enabled ) { return; }
|
||||||
|
|
||||||
m_shadow_tex->bind(gl::MAX_TEXTURES + 0);
|
m_shadow_tex->bind(gl::MAX_TEXTURES + 0);
|
||||||
|
|
||||||
glm::mat4 coordmove;
|
glm::mat4 coordmove;
|
||||||
@@ -2236,6 +2253,16 @@ void opengl33_renderer::Render(TAnimModel *Instance)
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// crude way to reject early items too far to affect the output (mostly relevant for shadow passes)
|
||||||
|
auto const drawdistancethreshold{ m_renderpass.draw_range + 250 };
|
||||||
|
if( distancesquared > drawdistancethreshold * drawdistancethreshold ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// second stage visibility cull, reject modelstoo far away to be noticeable
|
||||||
|
auto const radiussquared { Instance->radius() * Instance->radius() };
|
||||||
|
if( radiussquared * Global.ZoomFactor / distancesquared < 0.003 * 0.003 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (m_renderpass.draw_mode)
|
switch (m_renderpass.draw_mode)
|
||||||
{
|
{
|
||||||
@@ -2300,7 +2327,8 @@ bool opengl33_renderer::Render(TDynamicObject *Dynamic)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// second stage visibility cull, reject vehicles too far away to be noticeable
|
// second stage visibility cull, reject vehicles too far away to be noticeable
|
||||||
Dynamic->renderme = ( Dynamic->radius() * Global.ZoomFactor / std::sqrt( squaredistance ) > 0.003 );
|
auto const squareradius{ Dynamic->radius() * Dynamic->radius() };
|
||||||
|
Dynamic->renderme = ( squareradius * Global.ZoomFactor / squaredistance > 0.003 * 0.003 );
|
||||||
if( false == Dynamic->renderme ) {
|
if( false == Dynamic->renderme ) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -3154,6 +3182,16 @@ void opengl33_renderer::Render_Alpha(TAnimModel *Instance)
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// crude way to reject early items too far to affect the output (mostly relevant for shadow passes)
|
||||||
|
auto const drawdistancethreshold{ m_renderpass.draw_range + 250 };
|
||||||
|
if( distancesquared > drawdistancethreshold * drawdistancethreshold ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// second stage visibility cull, reject modelstoo far away to be noticeable
|
||||||
|
auto const radiussquared { Instance->radius() * Instance->radius() };
|
||||||
|
if( radiussquared * Global.ZoomFactor / distancesquared < 0.003 * 0.003 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Instance->RaAnimate( m_framestamp ); // jednorazowe przeliczenie animacji
|
Instance->RaAnimate( m_framestamp ); // jednorazowe przeliczenie animacji
|
||||||
Instance->RaPrepare();
|
Instance->RaPrepare();
|
||||||
@@ -3826,7 +3864,7 @@ void opengl33_renderer::Update(double const Deltatime)
|
|||||||
// TODO: it doesn't make much sense with vsync
|
// TODO: it doesn't make much sense with vsync
|
||||||
if( Global.targetfps == 0.0f ) {
|
if( Global.targetfps == 0.0f ) {
|
||||||
// automatic adjustment
|
// automatic adjustment
|
||||||
auto const framerate = 0.5f * ( m_framerate + 1000.f / Timer::subsystem.gfx_color.average() );
|
auto const framerate = interpolate( 1000.f / Timer::subsystem.gfx_color.average(), m_framerate, 0.25f );
|
||||||
float targetfactor;
|
float targetfactor;
|
||||||
if( framerate > 120.0 ) { targetfactor = 3.00f; }
|
if( framerate > 120.0 ) { targetfactor = 3.00f; }
|
||||||
else if( framerate > 90.0 ) { targetfactor = 1.50f; }
|
else if( framerate > 90.0 ) { targetfactor = 1.50f; }
|
||||||
|
|||||||
@@ -353,9 +353,14 @@ opengl_renderer::Render() {
|
|||||||
|
|
||||||
m_drawcount = m_cellqueue.size();
|
m_drawcount = m_cellqueue.size();
|
||||||
m_debugtimestext +=
|
m_debugtimestext +=
|
||||||
"color: " + to_string( Timer::subsystem.gfx_color.average(), 2 ) + " msec (" + std::to_string( m_cellqueue.size() ) + " sectors)\n"
|
"cpu frame total: " + to_string( Timer::subsystem.gfx_color.average() + Timer::subsystem.gfx_shadows.average() + Timer::subsystem.gfx_swap.average(), 2 ) + " ms\n"
|
||||||
+ "gpu side: " + to_string( Timer::subsystem.gfx_swap.average(), 2 ) + " msec\n"
|
+ " color: " + to_string( Timer::subsystem.gfx_color.average(), 2 ) + " ms (" + std::to_string( m_cellqueue.size() ) + " sectors)\n";
|
||||||
+ "frame total: " + to_string( Timer::subsystem.gfx_color.average() + Timer::subsystem.gfx_swap.average(), 2 ) + " msec";
|
if( Global.RenderShadows ) {
|
||||||
|
m_debugtimestext +=
|
||||||
|
" shadows: " + to_string( Timer::subsystem.gfx_shadows.average(), 2 ) + " ms\n";
|
||||||
|
}
|
||||||
|
m_debugtimestext += " swap: " + to_string( Timer::subsystem.gfx_swap.average(), 2 ) + " ms\n";
|
||||||
|
m_debugtimestext += "uilayer: " + to_string( Timer::subsystem.gfx_gui.average(), 2 ) + " ms\n";
|
||||||
|
|
||||||
m_debugstatstext =
|
m_debugstatstext =
|
||||||
"vehicles: " + to_string( m_colorpass.draw_stats.dynamics, 7 ) + " +" + to_string( m_shadowpass.draw_stats.dynamics, 7 )
|
"vehicles: " + to_string( m_colorpass.draw_stats.dynamics, 7 ) + " +" + to_string( m_shadowpass.draw_stats.dynamics, 7 )
|
||||||
@@ -411,7 +416,6 @@ opengl_renderer::Render_pass( rendermode const Mode ) {
|
|||||||
}
|
}
|
||||||
Render_pass( rendermode::shadows );
|
Render_pass( rendermode::shadows );
|
||||||
Timer::subsystem.gfx_shadows.stop();
|
Timer::subsystem.gfx_shadows.stop();
|
||||||
m_debugtimestext += "shadows: " + to_string( Timer::subsystem.gfx_shadows.average(), 2 ) + " msec (" + std::to_string( m_cellqueue.size() ) + " sectors)\n";
|
|
||||||
#ifdef EU07_USE_DEBUG_SHADOWMAP
|
#ifdef EU07_USE_DEBUG_SHADOWMAP
|
||||||
UILayer.set_texture( m_shadowdebugtexture );
|
UILayer.set_texture( m_shadowdebugtexture );
|
||||||
#endif
|
#endif
|
||||||
@@ -2199,6 +2203,11 @@ opengl_renderer::Render( TAnimModel *Instance ) {
|
|||||||
if( distancesquared > drawdistancethreshold * drawdistancethreshold ) {
|
if( distancesquared > drawdistancethreshold * drawdistancethreshold ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// second stage visibility cull, reject modelstoo far away to be noticeable
|
||||||
|
auto const radiussquared { Instance->radius() * Instance->radius() };
|
||||||
|
if( radiussquared * Global.ZoomFactor / distancesquared < 0.003 * 0.003 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch( m_renderpass.draw_mode ) {
|
switch( m_renderpass.draw_mode ) {
|
||||||
case rendermode::pickscenery: {
|
case rendermode::pickscenery: {
|
||||||
@@ -3277,6 +3286,16 @@ opengl_renderer::Render_Alpha( TAnimModel *Instance ) {
|
|||||||
|| ( distancesquared >= Instance->m_rangesquaredmax ) ) {
|
|| ( distancesquared >= Instance->m_rangesquaredmax ) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// crude way to reject early items too far to affect the output (mostly relevant for shadow passes)
|
||||||
|
auto const drawdistancethreshold{ m_renderpass.draw_range + 250 };
|
||||||
|
if( distancesquared > drawdistancethreshold * drawdistancethreshold ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// second stage visibility cull, reject modelstoo far away to be noticeable
|
||||||
|
auto const radiussquared { Instance->radius() * Instance->radius() };
|
||||||
|
if( radiussquared * Global.ZoomFactor / distancesquared < 0.003 * 0.003 ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Instance->RaAnimate( m_framestamp ); // jednorazowe przeliczenie animacji
|
Instance->RaAnimate( m_framestamp ); // jednorazowe przeliczenie animacji
|
||||||
Instance->RaPrepare();
|
Instance->RaPrepare();
|
||||||
|
|||||||
Reference in New Issue
Block a user