mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 22:09:19 +02:00
build 210509. configurable max draw range factor, moon visualization enhancement, night lighting tweak, minor bug fixes
This commit is contained in:
10
Globals.cpp
10
Globals.cpp
@@ -86,8 +86,7 @@ global_settings::ConfigParse(cParser &Parser) {
|
|||||||
{
|
{
|
||||||
Parser.getTokens(1);
|
Parser.getTokens(1);
|
||||||
Parser >> BaseDrawRange;
|
Parser >> BaseDrawRange;
|
||||||
BaseDrawRange = clamp(BaseDrawRange, 500.f,
|
BaseDrawRange = clamp(BaseDrawRange, 500.f, 5000.f); // arbitrary limits to keep users from hurting themselves
|
||||||
5000.f); // arbitrary limits to keep users from hurting themselves
|
|
||||||
}
|
}
|
||||||
else if (token == "fullscreen")
|
else if (token == "fullscreen")
|
||||||
{
|
{
|
||||||
@@ -1009,6 +1008,12 @@ global_settings::ConfigParse_gfx( cParser &Parser, std::string_view const Token
|
|||||||
Parser.getTokens(1);
|
Parser.getTokens(1);
|
||||||
Parser >> gfx_shadergamma;
|
Parser >> gfx_shadergamma;
|
||||||
}
|
}
|
||||||
|
else if (Token == "gfx.drawrange.factor.max")
|
||||||
|
{
|
||||||
|
Parser.getTokens(1);
|
||||||
|
Parser >> gfx_distance_factor_max;
|
||||||
|
gfx_distance_factor_max = clamp(gfx_distance_factor_max, 1.f, 3.f);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tokenparsed = false;
|
tokenparsed = false;
|
||||||
@@ -1230,6 +1235,7 @@ global_settings::export_as_text( std::ostream &Output ) const {
|
|||||||
export_as_text( Output, "gfx.skippipeline", gfx_skippipeline );
|
export_as_text( Output, "gfx.skippipeline", gfx_skippipeline );
|
||||||
export_as_text( Output, "gfx.extraeffects", gfx_extraeffects );
|
export_as_text( Output, "gfx.extraeffects", gfx_extraeffects );
|
||||||
export_as_text( Output, "gfx.shadergamma", gfx_shadergamma );
|
export_as_text( Output, "gfx.shadergamma", gfx_shadergamma );
|
||||||
|
export_as_text( Output, "gfx.drawrange.factor.max", gfx_distance_factor_max );
|
||||||
export_as_text( Output, "python.enabled", python_enabled );
|
export_as_text( Output, "python.enabled", python_enabled );
|
||||||
export_as_text( Output, "python.threadedupload", python_threadedupload );
|
export_as_text( Output, "python.threadedupload", python_threadedupload );
|
||||||
export_as_text( Output, "python.uploadmain", python_uploadmain );
|
export_as_text( Output, "python.uploadmain", python_uploadmain );
|
||||||
|
|||||||
@@ -148,8 +148,8 @@ struct global_settings {
|
|||||||
bool ResourceMove{ false }; // gfx resources are moved between cpu and gpu side instead of sending a copy
|
bool ResourceMove{ false }; // gfx resources are moved between cpu and gpu side instead of sending a copy
|
||||||
bool compress_tex{ true }; // all textures are compressed on gpu side
|
bool compress_tex{ true }; // all textures are compressed on gpu side
|
||||||
std::string asSky{ "1" };
|
std::string asSky{ "1" };
|
||||||
double fFpsAverage{ 20.0 }; // oczekiwana wartosć FPS
|
float fFpsAverage{ 0.f }; // oczekiwana wartosć FPS
|
||||||
double fFpsDeviation{ 5.0 }; // odchylenie standardowe FPS
|
float fFpsDeviation{ 5.f }; // odchylenie standardowe FPS
|
||||||
double fFpsMin{ 30.0 }; // dolna granica FPS, przy której promień scenerii będzie zmniejszany
|
double fFpsMin{ 30.0 }; // dolna granica FPS, przy której promień scenerii będzie zmniejszany
|
||||||
double fFpsMax{ 65.0 }; // górna granica FPS, przy której promień scenerii będzie zwiększany
|
double fFpsMax{ 65.0 }; // górna granica FPS, przy której promień scenerii będzie zwiększany
|
||||||
// audio
|
// audio
|
||||||
@@ -228,6 +228,7 @@ struct global_settings {
|
|||||||
bool gfx_extraeffects = true;
|
bool gfx_extraeffects = true;
|
||||||
bool gfx_shadergamma = false;
|
bool gfx_shadergamma = false;
|
||||||
bool gfx_usegles = false;
|
bool gfx_usegles = false;
|
||||||
|
float gfx_distance_factor_max { 3.f };
|
||||||
|
|
||||||
std::string exec_on_exit;
|
std::string exec_on_exit;
|
||||||
|
|
||||||
|
|||||||
9
gl/ubo.h
9
gl/ubo.h
@@ -44,10 +44,10 @@ namespace gl
|
|||||||
glm::mat4 inv_view;
|
glm::mat4 inv_view;
|
||||||
glm::mat4 lightview[MAX_CASCADES];
|
glm::mat4 lightview[MAX_CASCADES];
|
||||||
glm::vec4 cascade_end;
|
glm::vec4 cascade_end;
|
||||||
float time;
|
float time; UBS_PAD( 12 );
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(sizeof(scene_ubs) == 340, "bad size of ubs");
|
static_assert(sizeof(scene_ubs) == 352, "bad size of ubs");
|
||||||
|
|
||||||
const size_t MAX_PARAMS = 3;
|
const size_t MAX_PARAMS = 3;
|
||||||
|
|
||||||
@@ -62,8 +62,7 @@ namespace gl
|
|||||||
float emission;
|
float emission;
|
||||||
float fog_density;
|
float fog_density;
|
||||||
float alpha_mult;
|
float alpha_mult;
|
||||||
float shadow_tone;
|
float shadow_tone; UBS_PAD(12);
|
||||||
UBS_PAD(4);
|
|
||||||
|
|
||||||
void set_modelview(const glm::mat4 &mv)
|
void set_modelview(const glm::mat4 &mv)
|
||||||
{
|
{
|
||||||
@@ -72,7 +71,7 @@ namespace gl
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(sizeof(model_ubs) == 200 + 16 * MAX_PARAMS, "bad size of ubs");
|
static_assert(sizeof(model_ubs) == 208 + 16 * MAX_PARAMS, "bad size of ubs");
|
||||||
|
|
||||||
struct light_element_ubs
|
struct light_element_ubs
|
||||||
{
|
{
|
||||||
|
|||||||
3
moon.cpp
3
moon.cpp
@@ -31,11 +31,12 @@ cMoon::init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
cMoon::update() {
|
cMoon::update( bool const Includephase ) {
|
||||||
|
|
||||||
m_observer.temp = Global.AirTemperature;
|
m_observer.temp = Global.AirTemperature;
|
||||||
|
|
||||||
move();
|
move();
|
||||||
|
if( Includephase ) { phase(); }
|
||||||
glm::vec3 position( 0.f, 0.f, -1.f );
|
glm::vec3 position( 0.f, 0.f, -1.f );
|
||||||
position = glm::rotateX( position, glm::radians( static_cast<float>( m_body.elevref ) ) );
|
position = glm::rotateX( position, glm::radians( static_cast<float>( m_body.elevref ) ) );
|
||||||
position = glm::rotateY( position, glm::radians( static_cast<float>( -m_body.hrang ) ) );
|
position = glm::rotateY( position, glm::radians( static_cast<float>( -m_body.hrang ) ) );
|
||||||
|
|||||||
2
moon.h
2
moon.h
@@ -12,7 +12,7 @@ public:
|
|||||||
|
|
||||||
// methods:
|
// methods:
|
||||||
void init();
|
void init();
|
||||||
void update();
|
void update( bool const Includephase = false );
|
||||||
void render();
|
void render();
|
||||||
// returns vector pointing at the sun
|
// returns vector pointing at the sun
|
||||||
glm::vec3 getDirection();
|
glm::vec3 getDirection();
|
||||||
|
|||||||
@@ -702,7 +702,7 @@ void opengl33_renderer::Render_pass(viewport_config &vp, rendermode const Mode)
|
|||||||
|
|
||||||
scene_ubs.projection = OpenGLMatrices.data(GL_PROJECTION);
|
scene_ubs.projection = OpenGLMatrices.data(GL_PROJECTION);
|
||||||
scene_ubo->update(scene_ubs);
|
scene_ubo->update(scene_ubs);
|
||||||
Render(&simulation::Environment);
|
Render(&simulation::Environment, false);
|
||||||
|
|
||||||
if( Global.gfx_shadowmap_enabled )
|
if( Global.gfx_shadowmap_enabled )
|
||||||
setup_shadow_bind_map();
|
setup_shadow_bind_map();
|
||||||
@@ -916,7 +916,7 @@ void opengl33_renderer::Render_pass(viewport_config &vp, rendermode const Mode)
|
|||||||
setup_shadow_unbind_map();
|
setup_shadow_unbind_map();
|
||||||
scene_ubs.projection = OpenGLMatrices.data(GL_PROJECTION);
|
scene_ubs.projection = OpenGLMatrices.data(GL_PROJECTION);
|
||||||
scene_ubo->update(scene_ubs);
|
scene_ubo->update(scene_ubs);
|
||||||
Render(&simulation::Environment);
|
Render(&simulation::Environment, Global.gfx_skippipeline); // HACK: sun/moon drawing messes up rendering with skippipeline on TODO: investigate and fix
|
||||||
// opaque parts...
|
// opaque parts...
|
||||||
setup_drawing(false);
|
setup_drawing(false);
|
||||||
setup_shadow_bind_map();
|
setup_shadow_bind_map();
|
||||||
@@ -1521,7 +1521,7 @@ void opengl33_renderer::setup_sunlight_intensity( float const Factor ) {
|
|||||||
light_ubo->update( light_ubs );
|
light_ubo->update( light_ubs );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool opengl33_renderer::Render(world_environment *Environment)
|
bool opengl33_renderer::Render(world_environment *Environment, bool const Skipcelestialbodies )
|
||||||
{
|
{
|
||||||
m_shadowcolor = colors::white; // prevent shadow from affecting sky
|
m_shadowcolor = colors::white; // prevent shadow from affecting sky
|
||||||
setup_shadow_color( m_shadowcolor );
|
setup_shadow_color( m_shadowcolor );
|
||||||
@@ -1534,6 +1534,7 @@ bool opengl33_renderer::Render(world_environment *Environment)
|
|||||||
|
|
||||||
Bind_Material(null_handle);
|
Bind_Material(null_handle);
|
||||||
::glDisable(GL_DEPTH_TEST);
|
::glDisable(GL_DEPTH_TEST);
|
||||||
|
::glDepthMask(GL_FALSE);
|
||||||
::glPushMatrix();
|
::glPushMatrix();
|
||||||
|
|
||||||
// skydome
|
// skydome
|
||||||
@@ -1554,7 +1555,7 @@ bool opengl33_renderer::Render(world_environment *Environment)
|
|||||||
::glBlendFunc( GL_SRC_ALPHA, GL_ONE );
|
::glBlendFunc( GL_SRC_ALPHA, GL_ONE );
|
||||||
|
|
||||||
// stars
|
// stars
|
||||||
if (Environment->m_stars.m_stars != nullptr)
|
if (Environment->m_stars.m_stars != nullptr && !Skipcelestialbodies )
|
||||||
{
|
{
|
||||||
// setup
|
// setup
|
||||||
::glPushMatrix();
|
::glPushMatrix();
|
||||||
@@ -1581,6 +1582,7 @@ bool opengl33_renderer::Render(world_environment *Environment)
|
|||||||
glm::vec3 suncolor = interpolate(glm::vec3(255.0f / 255.0f, 242.0f / 255.0f, 231.0f / 255.0f), glm::vec3(235.0f / 255.0f, 140.0f / 255.0f, 36.0f / 255.0f), duskfactor);
|
glm::vec3 suncolor = interpolate(glm::vec3(255.0f / 255.0f, 242.0f / 255.0f, 231.0f / 255.0f), glm::vec3(235.0f / 255.0f, 140.0f / 255.0f, 36.0f / 255.0f), duskfactor);
|
||||||
|
|
||||||
// sun
|
// sun
|
||||||
|
// if( !Skipcelestialbodies )
|
||||||
{
|
{
|
||||||
Bind_Texture(0, m_suntexture);
|
Bind_Texture(0, m_suntexture);
|
||||||
glm::vec4 color(suncolor.x, suncolor.y, suncolor.z, clamp(1.5f - Global.Overcast, 0.f, 1.f) * fogfactor);
|
glm::vec4 color(suncolor.x, suncolor.y, suncolor.z, clamp(1.5f - Global.Overcast, 0.f, 1.f) * fogfactor);
|
||||||
@@ -1597,6 +1599,7 @@ bool opengl33_renderer::Render(world_environment *Environment)
|
|||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
}
|
}
|
||||||
// moon
|
// moon
|
||||||
|
if( !Skipcelestialbodies )
|
||||||
{
|
{
|
||||||
Bind_Texture(0, m_moontexture);
|
Bind_Texture(0, m_moontexture);
|
||||||
glm::vec3 mooncolor(255.0f / 255.0f, 242.0f / 255.0f, 231.0f / 255.0f);
|
glm::vec3 mooncolor(255.0f / 255.0f, 242.0f / 255.0f, 231.0f / 255.0f);
|
||||||
@@ -1668,7 +1671,8 @@ bool opengl33_renderer::Render(world_environment *Environment)
|
|||||||
clamp( Environment->m_moon.getAngle(), 0.f, 90.f ) / 90.f );
|
clamp( Environment->m_moon.getAngle(), 0.f, 90.f ) / 90.f );
|
||||||
|
|
||||||
model_ubs.param[0] = color;
|
model_ubs.param[0] = color;
|
||||||
model_ubs.param[1] = glm::vec4(glm::vec3(modelview * glm::vec4(moonvector, 1.0f)), /*0.00451f*/ size);
|
// model_ubs.param[1] = glm::vec4(glm::vec3(modelview * glm::vec4(moonvector, 1.0f)), 0.00451f);
|
||||||
|
model_ubs.param[1] = glm::vec4(glm::vec3(modelview * glm::vec4(moonvector, 1.0f)), size);
|
||||||
model_ubs.param[2] = glm::vec4(moonu, moonv, 0.333f, 0.0f);
|
model_ubs.param[2] = glm::vec4(moonu, moonv, 0.333f, 0.0f);
|
||||||
model_ubo->update(model_ubs);
|
model_ubo->update(model_ubs);
|
||||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
@@ -1711,6 +1715,7 @@ bool opengl33_renderer::Render(world_environment *Environment)
|
|||||||
gl::program::unbind();
|
gl::program::unbind();
|
||||||
gl::vao::unbind();
|
gl::vao::unbind();
|
||||||
::glPopMatrix();
|
::glPopMatrix();
|
||||||
|
::glDepthMask(GL_TRUE);
|
||||||
::glEnable(GL_DEPTH_TEST);
|
::glEnable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
m_sunlight.apply_angle();
|
m_sunlight.apply_angle();
|
||||||
@@ -4135,13 +4140,32 @@ void opengl33_renderer::Update(double const Deltatime)
|
|||||||
|
|
||||||
// adjust draw ranges etc, based on recent performance
|
// adjust draw ranges etc, based on recent performance
|
||||||
// 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.f ) {
|
||||||
|
auto const fps_diff = m_framerate - Global.targetfps;
|
||||||
|
if( fps_diff < -0.5f ) {
|
||||||
|
Global.fDistanceFactor = std::min( std::max( 1.0f, Global.fDistanceFactor - 0.05f ), Global.gfx_distance_factor_max );
|
||||||
|
}
|
||||||
|
else if( fps_diff > 0.5f ) {
|
||||||
|
Global.fDistanceFactor = std::min( std::min( 3.0f, Global.fDistanceFactor + 0.05f ), Global.gfx_distance_factor_max );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// legacy framerate parameters
|
||||||
|
else if( Global.fFpsAverage != 0.f ) {
|
||||||
|
auto const fps_diff = m_framerate - Global.fFpsAverage;
|
||||||
|
if( fps_diff < -Global.fFpsDeviation ) {
|
||||||
|
Global.fDistanceFactor = std::min( std::max( 1.0f, Global.fDistanceFactor - 0.05f ), Global.gfx_distance_factor_max );
|
||||||
|
}
|
||||||
|
else if( fps_diff > Global.fFpsDeviation ) {
|
||||||
|
Global.fDistanceFactor = std::min( std::min( 3.0f, Global.fDistanceFactor + 0.05f ), Global.gfx_distance_factor_max );
|
||||||
|
}
|
||||||
|
}
|
||||||
// automatic adjustment
|
// automatic adjustment
|
||||||
|
else {
|
||||||
auto const framerate = interpolate( 1000.f / Timer::subsystem.gfx_color.average(), m_framerate, 0.75f );
|
auto const framerate = interpolate( 1000.f / Timer::subsystem.gfx_color.average(), m_framerate, 0.75f );
|
||||||
float targetfactor;
|
float targetfactor;
|
||||||
if( framerate > 120.0 ) { targetfactor = 3.00f; }
|
if( framerate > 120.f ) { targetfactor = std::min( Global.gfx_distance_factor_max, 3.00f ); }
|
||||||
else if( framerate > 90.0 ) { targetfactor = 1.50f; }
|
else if( framerate > 90.f ) { targetfactor = std::min( Global.gfx_distance_factor_max, 1.50f ); }
|
||||||
else if( framerate > 60.0 ) { targetfactor = 1.25f; }
|
else if( framerate > 60.f ) { targetfactor = std::min( Global.gfx_distance_factor_max, 1.25f ); }
|
||||||
else { targetfactor = 1.00f; }
|
else { targetfactor = 1.00f; }
|
||||||
if( targetfactor > Global.fDistanceFactor ) {
|
if( targetfactor > Global.fDistanceFactor ) {
|
||||||
Global.fDistanceFactor = std::min( targetfactor, Global.fDistanceFactor + 0.05f );
|
Global.fDistanceFactor = std::min( targetfactor, Global.fDistanceFactor + 0.05f );
|
||||||
@@ -4150,15 +4174,6 @@ void opengl33_renderer::Update(double const Deltatime)
|
|||||||
Global.fDistanceFactor = std::max( targetfactor, Global.fDistanceFactor - 0.05f );
|
Global.fDistanceFactor = std::max( targetfactor, Global.fDistanceFactor - 0.05f );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
auto const fps_diff = Global.targetfps - m_framerate;
|
|
||||||
if( fps_diff > 0.5f ) {
|
|
||||||
Global.fDistanceFactor = std::max( 1.0f, Global.fDistanceFactor - 0.05f );
|
|
||||||
}
|
|
||||||
else if( fps_diff < 1.0f ) {
|
|
||||||
Global.fDistanceFactor = std::min( 3.0f, Global.fDistanceFactor + 0.05f );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( Global.UpdateMaterials ) {
|
if( Global.UpdateMaterials ) {
|
||||||
// update resources if there was environmental change
|
// update resources if there was environmental change
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ class opengl33_renderer : public gfx_renderer {
|
|||||||
void Render_pass(viewport_config &vp, rendermode const Mode);
|
void Render_pass(viewport_config &vp, rendermode const Mode);
|
||||||
// creates dynamic environment cubemap
|
// creates dynamic environment cubemap
|
||||||
bool Render_reflections(viewport_config &vp);
|
bool Render_reflections(viewport_config &vp);
|
||||||
bool Render(world_environment *Environment);
|
bool Render(world_environment *Environment, bool const Skipcelestialbodies );
|
||||||
void Render(scene::basic_region *Region);
|
void Render(scene::basic_region *Region);
|
||||||
void Render(section_sequence::iterator First, section_sequence::iterator Last);
|
void Render(section_sequence::iterator First, section_sequence::iterator Last);
|
||||||
void Render(cell_sequence::iterator First, cell_sequence::iterator Last);
|
void Render(cell_sequence::iterator First, cell_sequence::iterator Last);
|
||||||
|
|||||||
@@ -4186,13 +4186,33 @@ opengl_renderer::Update( double const Deltatime ) {
|
|||||||
m_framerate = 1000.f / ( Timer::subsystem.gfx_total.average() );
|
m_framerate = 1000.f / ( Timer::subsystem.gfx_total.average() );
|
||||||
|
|
||||||
// adjust draw ranges etc, based on recent performance
|
// adjust draw ranges etc, based on recent performance
|
||||||
if( Global.targetfps == 0.0f ) {
|
// TODO: it doesn't make much sense with vsync
|
||||||
|
if( Global.targetfps != 0.f ) {
|
||||||
|
auto const fps_diff = m_framerate - Global.targetfps;
|
||||||
|
if( fps_diff < -0.5f ) {
|
||||||
|
Global.fDistanceFactor = std::min( std::max( 1.0f, Global.fDistanceFactor - 0.05f ), Global.gfx_distance_factor_max );
|
||||||
|
}
|
||||||
|
else if( fps_diff > 0.5f ) {
|
||||||
|
Global.fDistanceFactor = std::min( std::min( 3.0f, Global.fDistanceFactor + 0.05f ), Global.gfx_distance_factor_max );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// legacy framerate parameters
|
||||||
|
else if( Global.fFpsAverage != 0.f ) {
|
||||||
|
auto const fps_diff = m_framerate - Global.fFpsAverage;
|
||||||
|
if( fps_diff < -Global.fFpsDeviation ) {
|
||||||
|
Global.fDistanceFactor = std::min( std::max( 1.0f, Global.fDistanceFactor - 0.05f ), Global.gfx_distance_factor_max );
|
||||||
|
}
|
||||||
|
else if( fps_diff > Global.fFpsDeviation ) {
|
||||||
|
Global.fDistanceFactor = std::min( std::min( 3.0f, Global.fDistanceFactor + 0.05f ), Global.gfx_distance_factor_max );
|
||||||
|
}
|
||||||
|
}
|
||||||
// automatic adjustment
|
// automatic adjustment
|
||||||
|
else {
|
||||||
auto const framerate = interpolate( 1000.f / Timer::subsystem.gfx_color.average(), m_framerate, 0.75f );
|
auto const framerate = interpolate( 1000.f / Timer::subsystem.gfx_color.average(), m_framerate, 0.75f );
|
||||||
float targetfactor;
|
float targetfactor;
|
||||||
if( framerate > 120.0 ) { targetfactor = 3.00f; }
|
if( framerate > 120.f ) { targetfactor = std::min( Global.gfx_distance_factor_max, 3.00f ); }
|
||||||
else if( framerate > 90.0 ) { targetfactor = 1.50f; }
|
else if( framerate > 90.f ) { targetfactor = std::min( Global.gfx_distance_factor_max, 1.50f ); }
|
||||||
else if( framerate > 60.0 ) { targetfactor = 1.25f; }
|
else if( framerate > 60.f ) { targetfactor = std::min( Global.gfx_distance_factor_max, 1.25f ); }
|
||||||
else { targetfactor = 1.00f; }
|
else { targetfactor = 1.00f; }
|
||||||
if( targetfactor > Global.fDistanceFactor ) {
|
if( targetfactor > Global.fDistanceFactor ) {
|
||||||
Global.fDistanceFactor = std::min( targetfactor, Global.fDistanceFactor + 0.05f );
|
Global.fDistanceFactor = std::min( targetfactor, Global.fDistanceFactor + 0.05f );
|
||||||
@@ -4201,15 +4221,6 @@ opengl_renderer::Update( double const Deltatime ) {
|
|||||||
Global.fDistanceFactor = std::max( targetfactor, Global.fDistanceFactor - 0.05f );
|
Global.fDistanceFactor = std::max( targetfactor, Global.fDistanceFactor - 0.05f );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
auto const fps_diff = Global.targetfps - m_framerate;
|
|
||||||
if( fps_diff > 0.5f ) {
|
|
||||||
Global.fDistanceFactor = std::max( 1.0f, Global.fDistanceFactor - 0.05f );
|
|
||||||
}
|
|
||||||
else if( fps_diff < 1.0f ) {
|
|
||||||
Global.fDistanceFactor = std::min( 3.0f, Global.fDistanceFactor + 0.05f );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( Global.UpdateMaterials ) {
|
if( Global.UpdateMaterials ) {
|
||||||
// update resources if there was environmental change
|
// update resources if there was environmental change
|
||||||
|
|||||||
@@ -314,6 +314,8 @@ void state_manager::process_commands() {
|
|||||||
// HACK: force re-calculation of precipitation
|
// HACK: force re-calculation of precipitation
|
||||||
Global.Overcast = clamp( Global.Overcast - 0.0001f, 0.0f, 2.0f );
|
Global.Overcast = clamp( Global.Overcast - 0.0001f, 0.0f, 2.0f );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
simulation::Environment.update_moon();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (commanddata.command == user_command::setweather) {
|
if (commanddata.command == user_command::setweather) {
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ world_environment::update() {
|
|||||||
Global.DayLight.position = m_moon.getDirection();
|
Global.DayLight.position = m_moon.getDirection();
|
||||||
Global.DayLight.direction = -1.0f * m_moon.getDirection();
|
Global.DayLight.direction = -1.0f * m_moon.getDirection();
|
||||||
keylightintensity = moonlightlevel;
|
keylightintensity = moonlightlevel;
|
||||||
m_lightintensity = 0.35f;
|
m_lightintensity = moonlightlevel;
|
||||||
// if the moon is up, it overrides the twilight
|
// if the moon is up, it overrides the twilight
|
||||||
twilightfactor = 0.0f;
|
twilightfactor = 0.0f;
|
||||||
keylightcolor = glm::vec3( 255.0f / 255.0f, 242.0f / 255.0f, 202.0f / 255.0f );
|
keylightcolor = glm::vec3( 255.0f / 255.0f, 242.0f / 255.0f, 202.0f / 255.0f );
|
||||||
@@ -165,9 +165,10 @@ world_environment::update() {
|
|||||||
// tonal impact of skydome color is inversely proportional to how high the sun is above the horizon
|
// tonal impact of skydome color is inversely proportional to how high the sun is above the horizon
|
||||||
// (this is pure conjecture, aimed more to 'look right' than be accurate)
|
// (this is pure conjecture, aimed more to 'look right' than be accurate)
|
||||||
float const ambienttone = clamp( 1.0f - ( Global.SunAngle / 90.0f ), 0.0f, 1.0f );
|
float const ambienttone = clamp( 1.0f - ( Global.SunAngle / 90.0f ), 0.0f, 1.0f );
|
||||||
Global.DayLight.ambient[ 0 ] = interpolate( skydomehsv.z, skydomecolour.r, ambienttone );
|
float const ambientintensitynightfactor = 1.f - 0.75f * clamp( -m_sun.getAngle(), 0.0f, 18.0f ) / 18.0f;
|
||||||
Global.DayLight.ambient[ 1 ] = interpolate( skydomehsv.z, skydomecolour.g, ambienttone );
|
Global.DayLight.ambient[ 0 ] = interpolate( skydomehsv.z, skydomecolour.r, ambienttone ) * ambientintensitynightfactor;
|
||||||
Global.DayLight.ambient[ 2 ] = interpolate( skydomehsv.z, skydomecolour.b, ambienttone );
|
Global.DayLight.ambient[ 1 ] = interpolate( skydomehsv.z, skydomecolour.g, ambienttone ) * ambientintensitynightfactor;
|
||||||
|
Global.DayLight.ambient[ 2 ] = interpolate( skydomehsv.z, skydomecolour.b, ambienttone ) * ambientintensitynightfactor;
|
||||||
|
|
||||||
Global.fLuminance = intensity;
|
Global.fLuminance = intensity;
|
||||||
|
|
||||||
@@ -210,6 +211,12 @@ world_environment::update_precipitation() {
|
|||||||
m_precipitation.update();
|
m_precipitation.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
world_environment::update_moon() {
|
||||||
|
|
||||||
|
m_moon.update( true );
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
world_environment::update_wind() {
|
world_environment::update_wind() {
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ public:
|
|||||||
void init();
|
void init();
|
||||||
void update();
|
void update();
|
||||||
void update_precipitation();
|
void update_precipitation();
|
||||||
|
void update_moon();
|
||||||
void time( int const Hour = -1, int const Minute = -1, int const Second = -1 );
|
void time( int const Hour = -1, int const Minute = -1, int const Second = -1 );
|
||||||
// switches between static and dynamic daylight calculation
|
// switches between static and dynamic daylight calculation
|
||||||
void on_daylight_change();
|
void on_daylight_change();
|
||||||
|
|||||||
2
uart.cpp
2
uart.cpp
@@ -199,7 +199,7 @@ void uart_input::poll()
|
|||||||
if (!sync) {
|
if (!sync) {
|
||||||
int sync_cnt = 0;
|
int sync_cnt = 0;
|
||||||
int sync_fail = 0;
|
int sync_fail = 0;
|
||||||
char sc = 0;
|
unsigned char sc = 0;
|
||||||
while ((ret = sp_blocking_read(port, &sc, 1, 10)) >= 0) {
|
while ((ret = sp_blocking_read(port, &sc, 1, 10)) >= 0) {
|
||||||
if (conf.debug)
|
if (conf.debug)
|
||||||
WriteLog("uart: read byte: " + std::to_string((int)sc));
|
WriteLog("uart: read byte: " + std::to_string((int)sc));
|
||||||
|
|||||||
Reference in New Issue
Block a user