@@ -374,7 +374,7 @@ void renderEffect(Material material)
374374 {
375375 frame . AddPrimitive ( material , slp , RenderPrimitiveGroup . Lights , ref xnaMatrix , ShapeFlags . None , state ) ;
376376 }
377- renderEffect ( SignalTypeData . Material ) ;
377+ renderEffect ( slp . Material ) ;
378378 if ( Viewer . Settings . SignalLightGlow )
379379 renderEffect ( SignalTypeData . GlowMaterial ) ;
380380 }
@@ -465,7 +465,6 @@ public class SignalTypeData
465465 {
466466 readonly Viewer Viewer ;
467467
468- public readonly Material Material ;
469468 public readonly Material GlowMaterial ;
470469#if DEBUG_SIGNAL_SHAPES
471470 public readonly SignalTypeDataType Type ;
@@ -488,7 +487,6 @@ public SignalTypeData(Viewer viewer, SignalType mstsSignalType)
488487 if ( ! viewer . SIGCFG . LightTextures . ContainsKey ( mstsSignalType . LightTextureName ) )
489488 {
490489 Trace . TraceWarning ( "Skipped invalid light texture {1} for signal type {0}" , mstsSignalType . Name , mstsSignalType . LightTextureName ) ;
491- Material = viewer . MaterialManager . Load ( "missing-signal-light" ) ;
492490#if DEBUG_SIGNAL_SHAPES
493491 Type = SignalTypeDataType . Normal ;
494492#endif
@@ -498,7 +496,7 @@ public SignalTypeData(Viewer viewer, SignalType mstsSignalType)
498496 else
499497 {
500498 var mstsLightTexture = viewer . SIGCFG . LightTextures [ mstsSignalType . LightTextureName ] ;
501- Material = viewer . MaterialManager . Load ( "SignalLight" , Helpers . GetRouteTextureFile ( viewer . Simulator , Helpers . TextureFlags . None , mstsLightTexture . TextureFile ) ) ;
499+ var defaultMaterial = viewer . MaterialManager . Load ( "SignalLight" , Helpers . GetRouteTextureFile ( viewer . Simulator , Helpers . TextureFlags . None , mstsLightTexture . TextureFile ) ) ;
502500 GlowMaterial = viewer . MaterialManager . Load ( "SignalLightGlow" ) ;
503501#if DEBUG_SIGNAL_SHAPES
504502 Type = ( SignalTypeDataType ) mstsSignalType . FnType ;
@@ -535,7 +533,20 @@ public SignalTypeData(Viewer viewer, SignalType mstsSignalType)
535533 continue ;
536534 }
537535 var mstsLight = viewer . SIGCFG . LightsTable [ mstsSignalLight . Name ] ;
538- Lights . Add ( new SignalLightPrimitive ( viewer , new Vector3 ( - mstsSignalLight . X , mstsSignalLight . Y , mstsSignalLight . Z ) , mstsSignalLight . Radius , new Color ( mstsLight . r , mstsLight . g , mstsLight . b , mstsLight . a ) , glowDay , glowNight , mstsLightTexture . u0 , mstsLightTexture . v0 , mstsLightTexture . u1 , mstsLightTexture . v1 ) ) ;
536+ var material = defaultMaterial ;
537+ if ( ! string . IsNullOrEmpty ( mstsSignalLight . LightTextureName ) )
538+ {
539+ if ( ! viewer . SIGCFG . LightTextures . ContainsKey ( mstsSignalLight . LightTextureName ) )
540+ {
541+ Trace . TraceWarning ( "Skipped invalid light texture {0} for signal light {1} in signal type {2}" , mstsSignalLight . LightTextureName , mstsSignalLight . Name , mstsSignalType . Name ) ;
542+ }
543+ else
544+ {
545+ var texture = viewer . SIGCFG . LightTextures [ mstsSignalLight . LightTextureName ] ;
546+ material = viewer . MaterialManager . Load ( "SignalLight" , Helpers . GetRouteTextureFile ( viewer . Simulator , Helpers . TextureFlags . None , texture . TextureFile ) ) ;
547+ }
548+ }
549+ Lights . Add ( new SignalLightPrimitive ( viewer , new Vector3 ( - mstsSignalLight . X , mstsSignalLight . Y , mstsSignalLight . Z ) , mstsSignalLight . Radius , new Color ( mstsLight . r , mstsLight . g , mstsLight . b , mstsLight . a ) , glowDay , glowNight , mstsLightTexture . u0 , mstsLightTexture . v0 , mstsLightTexture . u1 , mstsLightTexture . v1 , material ) ) ;
539550 LightsSemaphoreChange . Add ( mstsSignalLight . SemaphoreChange ) ;
540551 }
541552 }
@@ -555,7 +566,10 @@ public SignalTypeData(Viewer viewer, SignalType mstsSignalType)
555566 public void Mark ( )
556567 {
557568 Viewer . SignalTypeDataManager . Mark ( this ) ;
558- Material . Mark ( ) ;
569+ foreach ( var light in Lights )
570+ {
571+ light . Mark ( ) ;
572+ }
559573 GlowMaterial ? . Mark ( ) ;
560574 }
561575 }
@@ -647,8 +661,9 @@ public class SignalLightPrimitive : RenderPrimitive
647661 internal readonly float GlowIntensityDay ;
648662 internal readonly float GlowIntensityNight ;
649663 readonly VertexBuffer VertexBuffer ;
664+ public readonly Material Material ;
650665
651- public SignalLightPrimitive ( Viewer viewer , Vector3 position , float radius , Color color , float glowDay , float glowNight , float u0 , float v0 , float u1 , float v1 )
666+ public SignalLightPrimitive ( Viewer viewer , Vector3 position , float radius , Color color , float glowDay , float glowNight , float u0 , float v0 , float u1 , float v1 , Material material )
652667 {
653668 Position = position ;
654669 GlowIntensityDay = glowDay ;
@@ -663,13 +678,20 @@ public SignalLightPrimitive(Viewer viewer, Vector3 position, float radius, Color
663678
664679 VertexBuffer = new VertexBuffer ( viewer . GraphicsDevice , typeof ( VertexPositionColorTexture ) , verticies . Length , BufferUsage . WriteOnly ) ;
665680 VertexBuffer . SetData ( verticies ) ;
681+
682+ Material = material ;
666683 }
667684
668685 public override void Draw ( GraphicsDevice graphicsDevice )
669686 {
670687 graphicsDevice . SetVertexBuffer ( VertexBuffer ) ;
671688 graphicsDevice . DrawPrimitives ( PrimitiveType . TriangleStrip , 0 , 2 ) ;
672689 }
690+
691+ public void Mark ( )
692+ {
693+ Material . Mark ( ) ;
694+ }
673695 }
674696
675697 public class SignalLightMaterial : Material
0 commit comments