mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 15:09:19 +02:00
translucent submodels animation fix, minor rendering optimizations
This commit is contained in:
58
renderer.cpp
58
renderer.cpp
@@ -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 );
|
||||||
@@ -1948,7 +1948,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;
|
||||||
@@ -2251,7 +2251,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
|
||||||
@@ -2267,7 +2267,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 ) {
|
||||||
@@ -2378,7 +2378,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();
|
||||||
@@ -2876,7 +2876,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;
|
||||||
@@ -3015,8 +3015,11 @@ 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
|
||||||
@@ -3033,6 +3036,7 @@ opengl_renderer::Render_Alpha( TSubModel *Submodel ) {
|
|||||||
::glEnable( GL_NORMALIZE );
|
::glEnable( GL_NORMALIZE );
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
// material configuration:
|
||||||
// textures...
|
// textures...
|
||||||
if( Submodel->m_material < 0 ) { // zmienialne skóry
|
if( Submodel->m_material < 0 ) { // zmienialne skóry
|
||||||
Bind_Material( Submodel->ReplacableSkinId[ -Submodel->m_material ] );
|
Bind_Material( Submodel->ReplacableSkinId[ -Submodel->m_material ] );
|
||||||
@@ -3055,7 +3059,7 @@ opengl_renderer::Render_Alpha( 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
|
||||||
@@ -3071,7 +3075,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 );
|
||||||
}
|
}
|
||||||
#ifdef EU07_USE_OPTIMIZED_NORMALIZATION
|
#ifdef EU07_USE_OPTIMIZED_NORMALIZATION
|
||||||
switch( Submodel->m_normalizenormals ) {
|
switch( Submodel->m_normalizenormals ) {
|
||||||
@@ -3087,6 +3091,28 @@ opengl_renderer::Render_Alpha( TSubModel *Submodel ) {
|
|||||||
::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 ) {
|
||||||
@@ -3128,7 +3154,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 );
|
||||||
@@ -3144,7 +3170,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();
|
||||||
@@ -3182,10 +3208,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 );
|
||||||
@@ -3309,8 +3335,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 ) {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user