<?xml version="1.0" encoding="utf-8"?>
<CustomShader version="3">
    <Variations>
        <Variation name = "STATIC_LIGHT">
<![CDATA[
    #define STATIC_LIGHT 
]]>
        </Variation>
        <Variation name = "STATIC_TURNLIGHT">
<![CDATA[
    #define STATIC_TURNLIGHT 
]]>
        </Variation>
        <Variation name = "BILLBOARD">
<![CDATA[
    #define BILLBOARD
]]>
        </Variation>
        <Variation name = "BILLBOARD_TURNLIGHT">
<![CDATA[
    #define BILLBOARD_TURNLIGHT
]]>
        </Variation>
        <Variation name = "BILLBOARD_BEACON">
<![CDATA[
    #define BILLBOARD_BEACON
]]>
        </Variation>
        <Variation name = "BILLBOARD_360">
<![CDATA[
    #define BILLBOARD_360
]]>
        </Variation>
    </Variations>
    <LodLevel startDistance="0">
        <CodeInjections>
            <CodeInjection position="VS_OUTPUT">
<![CDATA[
float mFlickering : TEXCOORDn;
]]>
            </CodeInjection>
            <CodeInjection position="VS_END">
<![CDATA[
#if defined( BILLBOARD_TURNLIGHT ) || defined( STATIC_TURNLIGHT )
    //Out.mFlickering = 0.5 * ( cos( 12.0 * cTime_s ) + 1 );
    // slower blinking + variation to achieve different ratio between on and off state
    Out.mFlickering = clamp( cos( 7.0 * cTime_s ) + 0.2, 0, 1 );
#endif
]]>
            </CodeInjection>
            <CodeInjection position="GET_POSITION_VS">
<![CDATA[
#if defined( BILLBOARD ) || defined( BILLBOARD_TURNLIGHT ) || defined( BILLBOARD_BEACON ) || defined( BILLBOARD_360 )
    float3x3 billboardMat = modelViewMatrix;
    float3   mPosition = In.position.xyz;
    #if defined( BILLBOARD_BEACON )
        float3 d = normalize( modelCameraPosition.xyz );
        mPosition *= saturate( d.z );  // scale based on cameraVector
    #endif
    return float4( mul( mPosition.xyz, billboardMat ), 1 );
#endif
]]>
            </CodeInjection>
            <CodeInjection position="VS_END">
<![CDATA[
#if defined( BILLBOARD ) || defined( BILLBOARD_TURNLIGHT ) || defined( BILLBOARD_BEACON ) || defined( BILLBOARD_360 )
    // TODO
    //Out.position.z -= 0.05;
#endif
]]>
            </CodeInjection>
            <CodeInjection position="POST_GLOSS_COLOR_FS">
<![CDATA[
#if defined( SPECULAR ) && defined( ALPHA_BLENDED )
    #undef SPECULAR // Disable specular color for alphaBlended billboards
#endif
]]>
            </CodeInjection>
            <CodeInjection position="EMISSIVE_FS">
<![CDATA[
#if defined( ALPHA_BLENDED ) && defined( VERTEX_COLOR )
    #if defined( STATIC_LIGHT ) || defined( STATIC_TURNLIGHT )
        emissiveColor.rgb = 0.50 * In.vs.vertexColor.rgb;
    #endif
    #if defined( STATIC_TURNLIGHT )
        emissiveColor.rgb  *= In.vs.mFlickering;
    #endif
#endif
]]>
            </CodeInjection>
            <CodeInjection position="ALPHA_FS">
<![CDATA[
#if defined( ALPHA_BLENDED ) 
    #if defined( BILLBOARD ) || defined( BILLBOARD_TURNLIGHT ) || defined( BILLBOARD_BEACON )
        float3 d = normalize( modelCameraPosition.xyz );
        float fadeFactor = saturate( d.z * 6 );
        #if defined( BILLBOARD_BEACON )
            fadeFactor = saturate( d.z );
        #endif
        oColor.a *= fadeFactor;
    #endif
    #if defined( BILLBOARD_TURNLIGHT )
        oColor.a *= In.vs.mFlickering;
    #endif
#endif
]]>
            </CodeInjection>
            <CodeInjection position="FINAL_POS_FS">
<![CDATA[
#if defined(ALPHA_BLENDED)
    oColor.a = 0.0f; // additive blending
#endif
]]>
            </CodeInjection>
        </CodeInjections>
    </LodLevel>
</CustomShader>
