16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-21 15:59:18 +02:00

Merge branch 'tmj-dev'

This commit is contained in:
milek7
2017-12-29 17:32:04 +01:00

View File

@@ -621,7 +621,7 @@ opengl_renderer::Render_pass( rendermode const Mode ) {
#ifdef EU07_USE_DEBUG_CABSHADOWMAP #ifdef EU07_USE_DEBUG_CABSHADOWMAP
setup_units( true, false, false ); setup_units( true, false, false );
#else #else
setup_units( true, false, false ); setup_units( false, false, false );
#endif #endif
Render_cab( World.Train->Dynamic(), false ); Render_cab( World.Train->Dynamic(), false );
Render_cab( World.Train->Dynamic(), true ); Render_cab( World.Train->Dynamic(), true );
@@ -1946,7 +1946,7 @@ opengl_renderer::Render( TDynamicObject *Dynamic ) {
++m_debugstats.dynamics; ++m_debugstats.dynamics;
// setup // setup
TSubModel::iInstance = ( size_t )this; //żeby nie robić cudzych animacji TSubModel::iInstance = ( size_t )Dynamic; //żeby nie robić cudzych animacji
glm::dvec3 const originoffset = Dynamic->vPosition - m_renderpass.camera.position(); glm::dvec3 const originoffset = Dynamic->vPosition - m_renderpass.camera.position();
// lod visibility ranges are defined for base (x 1.0) viewing distance. for render we adjust them for actual range multiplier and zoom // lod visibility ranges are defined for base (x 1.0) viewing distance. for render we adjust them for actual range multiplier and zoom
float squaredistance; float squaredistance;
@@ -2249,7 +2249,7 @@ opengl_renderer::Render( TSubModel *Submodel ) {
/* /*
setup_shadow_color( colors::white ); setup_shadow_color( colors::white );
*/ */
switch_units( m_unitstate.diffuse, false, false ); switch_units( unitstate.diffuse, false, false );
} }
// main draw call // main draw call
@@ -2265,7 +2265,7 @@ opengl_renderer::Render( TSubModel *Submodel ) {
/* /*
setup_shadow_color( m_shadowcolor ); setup_shadow_color( m_shadowcolor );
*/ */
switch_units( m_unitstate.diffuse, unitstate.shadows, unitstate.reflections ); switch_units( unitstate.diffuse, unitstate.shadows, unitstate.reflections );
} }
#ifdef EU07_USE_OPTIMIZED_NORMALIZATION #ifdef EU07_USE_OPTIMIZED_NORMALIZATION
switch( Submodel->m_normalizenormals ) { switch( Submodel->m_normalizenormals ) {
@@ -2376,7 +2376,7 @@ opengl_renderer::Render( TSubModel *Submodel ) {
/* /*
setup_shadow_color( m_shadowcolor ); setup_shadow_color( m_shadowcolor );
*/ */
switch_units( m_unitstate.diffuse, unitstate.shadows, unitstate.reflections ); switch_units( unitstate.diffuse, unitstate.shadows, unitstate.reflections );
::glPopMatrix(); ::glPopMatrix();
::glPopAttrib(); ::glPopAttrib();
@@ -2874,7 +2874,7 @@ opengl_renderer::Render_Alpha( TDynamicObject *Dynamic ) {
if( false == Dynamic->renderme ) { return false; } if( false == Dynamic->renderme ) { return false; }
// setup // setup
TSubModel::iInstance = ( size_t )this; //żeby nie robić cudzych animacji TSubModel::iInstance = ( size_t )Dynamic; //żeby nie robić cudzych animacji
glm::dvec3 const originoffset = Dynamic->vPosition - m_renderpass.camera.position(); glm::dvec3 const originoffset = Dynamic->vPosition - m_renderpass.camera.position();
// lod visibility ranges are defined for base (x 1.0) viewing distance. for render we adjust them for actual range multiplier and zoom // lod visibility ranges are defined for base (x 1.0) viewing distance. for render we adjust them for actual range multiplier and zoom
float squaredistance; float squaredistance;
@@ -3013,78 +3013,104 @@ opengl_renderer::Render_Alpha( TSubModel *Submodel ) {
if( Submodel->eType < TP_ROTATOR ) { if( Submodel->eType < TP_ROTATOR ) {
// renderowanie obiektów OpenGL // renderowanie obiektów OpenGL
if( Submodel->iAlpha & Submodel->iFlags & 0x2F ) // rysuj gdy element przezroczysty if( Submodel->iAlpha & Submodel->iFlags & 0x2F ) {
{ // rysuj gdy element przezroczysty
switch( m_renderpass.draw_mode ) {
case rendermode::color: {
// NOTE: code disabled as normalization marking doesn't take into account scaling propagation down hierarchy chains // NOTE: code disabled as normalization marking doesn't take into account scaling propagation down hierarchy chains
// for the time being we'll do with enforced worst-case scaling method, when speculars are enabled // for the time being we'll do with enforced worst-case scaling method, when speculars are enabled
#ifdef EU07_USE_OPTIMIZED_NORMALIZATION #ifdef EU07_USE_OPTIMIZED_NORMALIZATION
switch( Submodel->m_normalizenormals ) { switch( Submodel->m_normalizenormals ) {
case TSubModel::normalize: { case TSubModel::normalize: {
::glEnable( GL_NORMALIZE ); break; } ::glEnable( GL_NORMALIZE ); break; }
case TSubModel::rescale: { case TSubModel::rescale: {
::glEnable( GL_RESCALE_NORMAL ); break; } ::glEnable( GL_RESCALE_NORMAL ); break; }
default: { default: {
break; } break; }
} }
#else #else
if( true == m_renderspecular ) { if( true == m_renderspecular ) {
::glEnable( GL_NORMALIZE ); ::glEnable( GL_NORMALIZE );
} }
#endif #endif
// textures... // material configuration:
if( Submodel->m_material < 0 ) { // zmienialne skóry // textures...
Bind_Material( Submodel->ReplacableSkinId[ -Submodel->m_material ] ); if( Submodel->m_material < 0 ) { // zmienialne skóry
} Bind_Material( Submodel->ReplacableSkinId[ -Submodel->m_material ] );
else { }
// również 0 else {
Bind_Material( Submodel->m_material ); // również 0
} Bind_Material( Submodel->m_material );
// ...colors... }
::glColor3fv( glm::value_ptr(Submodel->f4Diffuse) ); // McZapkie-240702: zamiast ub // ...colors...
if( ( true == m_renderspecular ) && ( Global::DayLight.specular.a > 0.01f ) ) { ::glColor3fv( glm::value_ptr( Submodel->f4Diffuse ) ); // McZapkie-240702: zamiast ub
::glMaterialfv( GL_FRONT, GL_SPECULAR, glm::value_ptr( Submodel->f4Specular * Global::DayLight.specular.a * m_speculartranslucentscalefactor ) ); if( ( true == m_renderspecular ) && ( Global::DayLight.specular.a > 0.01f ) ) {
} ::glMaterialfv( GL_FRONT, GL_SPECULAR, glm::value_ptr( Submodel->f4Specular * Global::DayLight.specular.a * m_speculartranslucentscalefactor ) );
// ...luminance }
auto const unitstate = m_unitstate; // ...luminance
if( Global::fLuminance < Submodel->fLight ) { auto const unitstate = m_unitstate;
// zeby swiecilo na kolorowo if( Global::fLuminance < Submodel->fLight ) {
::glMaterialfv( GL_FRONT, GL_EMISSION, glm::value_ptr( Submodel->f4Diffuse * Submodel->f4Emision.a ) ); // zeby swiecilo na kolorowo
// disable shadows so they don't obstruct self-lit items ::glMaterialfv( GL_FRONT, GL_EMISSION, glm::value_ptr( Submodel->f4Diffuse * Submodel->f4Emision.a ) );
// disable shadows so they don't obstruct self-lit items
/* /*
setup_shadow_color( colors::white ); setup_shadow_color( colors::white );
*/ */
switch_units( m_unitstate.diffuse, false, false ); switch_units( unitstate.diffuse, false, false );
} }
// main draw call // main draw call
m_geometry.draw( Submodel->m_geometry ); m_geometry.draw( Submodel->m_geometry );
// post-draw reset // post-draw reset
if( ( true == m_renderspecular ) && ( Global::DayLight.specular.a > 0.01f ) ) { if( ( true == m_renderspecular ) && ( Global::DayLight.specular.a > 0.01f ) ) {
::glMaterialfv( GL_FRONT, GL_SPECULAR, glm::value_ptr( colors::none ) ); ::glMaterialfv( GL_FRONT, GL_SPECULAR, glm::value_ptr( colors::none ) );
} }
if( Global::fLuminance < Submodel->fLight ) { if( Global::fLuminance < Submodel->fLight ) {
// restore default (lack of) brightness // restore default (lack of) brightness
::glMaterialfv( GL_FRONT, GL_EMISSION, glm::value_ptr( colors::none ) ); ::glMaterialfv( GL_FRONT, GL_EMISSION, glm::value_ptr( colors::none ) );
/* /*
setup_shadow_color( m_shadowcolor ); setup_shadow_color( m_shadowcolor );
*/ */
switch_units( m_unitstate.diffuse, unitstate.shadows, unitstate.reflections ); switch_units( unitstate.diffuse, unitstate.shadows, unitstate.reflections );
} }
#ifdef EU07_USE_OPTIMIZED_NORMALIZATION #ifdef EU07_USE_OPTIMIZED_NORMALIZATION
switch( Submodel->m_normalizenormals ) { switch( Submodel->m_normalizenormals ) {
case TSubModel::normalize: { case TSubModel::normalize: {
::glDisable( GL_NORMALIZE ); break; } ::glDisable( GL_NORMALIZE ); break; }
case TSubModel::rescale: { case TSubModel::rescale: {
::glDisable( GL_RESCALE_NORMAL ); break; } ::glDisable( GL_RESCALE_NORMAL ); break; }
default: { default: {
break; } break; }
} }
#else #else
if( true == m_renderspecular ) { if( true == m_renderspecular ) {
::glDisable( GL_NORMALIZE ); ::glDisable( GL_NORMALIZE );
} }
#endif #endif
break;
}
case rendermode::cabshadows: {
// scenery picking and shadow both use enforced colour and no frills
// material configuration:
// textures...
if( Submodel->m_material < 0 ) { // zmienialne skóry
Bind_Material( Submodel->ReplacableSkinId[ -Submodel->m_material ] );
}
else {
// również 0
Bind_Material( Submodel->m_material );
}
// main draw call
m_geometry.draw( Submodel->m_geometry );
// post-draw reset
break;
}
default: {
break;
}
}
} }
} }
else if( Submodel->eType == TP_FREESPOTLIGHT ) { else if( Submodel->eType == TP_FREESPOTLIGHT ) {
@@ -3126,7 +3152,7 @@ opengl_renderer::Render_Alpha( TSubModel *Submodel ) {
setup_shadow_color( colors::white ); setup_shadow_color( colors::white );
*/ */
auto const unitstate = m_unitstate; auto const unitstate = m_unitstate;
switch_units( m_unitstate.diffuse, false, false ); switch_units( unitstate.diffuse, false, false );
// main draw call // main draw call
m_geometry.draw( m_billboardgeometry ); m_geometry.draw( m_billboardgeometry );
@@ -3142,7 +3168,7 @@ opengl_renderer::Render_Alpha( TSubModel *Submodel ) {
/* /*
setup_shadow_color( m_shadowcolor ); setup_shadow_color( m_shadowcolor );
*/ */
switch_units( m_unitstate.diffuse, unitstate.shadows, unitstate.reflections ); switch_units( unitstate.diffuse, unitstate.shadows, unitstate.reflections );
::glPopMatrix(); ::glPopMatrix();
::glPopAttrib(); ::glPopAttrib();
@@ -3180,10 +3206,10 @@ opengl_renderer::Render_Alpha( TSubModel *Submodel ) {
if( Submodel->iFlags & 0xC000 ) if( Submodel->iFlags & 0xC000 )
::glPopMatrix(); ::glPopMatrix();
} }
/*
if( Submodel->b_aAnim < at_SecondsJump ) if( Submodel->b_aAnim < at_SecondsJump )
Submodel->b_aAnim = at_None; // wyłączenie animacji dla kolejnego użycia submodelu Submodel->b_aAnim = at_None; // wyłączenie animacji dla kolejnego użycia submodelu
*/
if( Submodel->Next != nullptr ) if( Submodel->Next != nullptr )
if( Submodel->iAlpha & Submodel->iFlags & 0x2F000000 ) if( Submodel->iAlpha & Submodel->iFlags & 0x2F000000 )
Render_Alpha( Submodel->Next ); Render_Alpha( Submodel->Next );
@@ -3307,8 +3333,8 @@ opengl_renderer::Update( double const Deltatime ) {
float targetfactor; float targetfactor;
if( framerate > 90.0 ) { targetfactor = 3.0f; } if( framerate > 90.0 ) { targetfactor = 3.0f; }
else if( framerate > 60.0 ) { targetfactor = 1.5f; } else if( framerate > 60.0 ) { targetfactor = 1.5f; }
else if( framerate > 30.0 ) { targetfactor = Global::iWindowHeight / 768.0f; } else if( framerate > 30.0 ) { targetfactor = 1.25; }
else { targetfactor = Global::iWindowHeight / 768.0f * 0.75f; } else { targetfactor = std::max( Global::iWindowHeight / 768.f, 1.f ); }
if( targetfactor > Global::fDistanceFactor ) { if( targetfactor > Global::fDistanceFactor ) {