<?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>
