@@ -374,7 +374,7 @@ void renderEffect(Material material)
374
374
{
375
375
frame . AddPrimitive ( material , slp , RenderPrimitiveGroup . Lights , ref xnaMatrix , ShapeFlags . None , state ) ;
376
376
}
377
- renderEffect ( SignalTypeData . Material ) ;
377
+ renderEffect ( slp . Material ) ;
378
378
if ( Viewer . Settings . SignalLightGlow )
379
379
renderEffect ( SignalTypeData . GlowMaterial ) ;
380
380
}
@@ -465,7 +465,6 @@ public class SignalTypeData
465
465
{
466
466
readonly Viewer Viewer ;
467
467
468
- public readonly Material Material ;
469
468
public readonly Material GlowMaterial ;
470
469
#if DEBUG_SIGNAL_SHAPES
471
470
public readonly SignalTypeDataType Type ;
@@ -488,7 +487,6 @@ public SignalTypeData(Viewer viewer, SignalType mstsSignalType)
488
487
if ( ! viewer . SIGCFG . LightTextures . ContainsKey ( mstsSignalType . LightTextureName ) )
489
488
{
490
489
Trace . TraceWarning ( "Skipped invalid light texture {1} for signal type {0}" , mstsSignalType . Name , mstsSignalType . LightTextureName ) ;
491
- Material = viewer . MaterialManager . Load ( "missing-signal-light" ) ;
492
490
#if DEBUG_SIGNAL_SHAPES
493
491
Type = SignalTypeDataType . Normal ;
494
492
#endif
@@ -498,7 +496,7 @@ public SignalTypeData(Viewer viewer, SignalType mstsSignalType)
498
496
else
499
497
{
500
498
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 ) ) ;
502
500
GlowMaterial = viewer . MaterialManager . Load ( "SignalLightGlow" ) ;
503
501
#if DEBUG_SIGNAL_SHAPES
504
502
Type = ( SignalTypeDataType ) mstsSignalType . FnType ;
@@ -535,7 +533,20 @@ public SignalTypeData(Viewer viewer, SignalType mstsSignalType)
535
533
continue ;
536
534
}
537
535
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 ) ) ;
539
550
LightsSemaphoreChange . Add ( mstsSignalLight . SemaphoreChange ) ;
540
551
}
541
552
}
@@ -555,7 +566,10 @@ public SignalTypeData(Viewer viewer, SignalType mstsSignalType)
555
566
public void Mark ( )
556
567
{
557
568
Viewer . SignalTypeDataManager . Mark ( this ) ;
558
- Material . Mark ( ) ;
569
+ foreach ( var light in Lights )
570
+ {
571
+ light . Mark ( ) ;
572
+ }
559
573
GlowMaterial ? . Mark ( ) ;
560
574
}
561
575
}
@@ -647,8 +661,9 @@ public class SignalLightPrimitive : RenderPrimitive
647
661
internal readonly float GlowIntensityDay ;
648
662
internal readonly float GlowIntensityNight ;
649
663
readonly VertexBuffer VertexBuffer ;
664
+ public readonly Material Material ;
650
665
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 )
652
667
{
653
668
Position = position ;
654
669
GlowIntensityDay = glowDay ;
@@ -663,13 +678,20 @@ public SignalLightPrimitive(Viewer viewer, Vector3 position, float radius, Color
663
678
664
679
VertexBuffer = new VertexBuffer ( viewer . GraphicsDevice , typeof ( VertexPositionColorTexture ) , verticies . Length , BufferUsage . WriteOnly ) ;
665
680
VertexBuffer . SetData ( verticies ) ;
681
+
682
+ Material = material ;
666
683
}
667
684
668
685
public override void Draw ( GraphicsDevice graphicsDevice )
669
686
{
670
687
graphicsDevice . SetVertexBuffer ( VertexBuffer ) ;
671
688
graphicsDevice . DrawPrimitives ( PrimitiveType . TriangleStrip , 0 , 2 ) ;
672
689
}
690
+
691
+ public void Mark ( )
692
+ {
693
+ Material . Mark ( ) ;
694
+ }
673
695
}
674
696
675
697
public class SignalLightMaterial : Material
0 commit comments