All pastes #552804 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-06-09 13:25 UTC
rendered paste body
//#include "common.h"
//#include "lmodel.h"
//#include "shadow.h"


#define _pp_( n ) half##n pp( float##n v ) { return v; }
_pp_(1); _pp_(2); _pp_(3); _pp_(4);
#undef _pp_

#define chx( v, n, a, b ) (v[n]>=0)?a[n]:b[n]
#define chx4( v, a, b ) chx(v,0,a,b),chx(v,1,a,b),chx(v,2,a,b),chx(v,3,a,b)
half4  cmp_pp( half4  v, half4 a, half4 b )
    { return half4( chx4( v, a, b ) ); }
float4 cmp( float4  v, float4 a, float4 b )
    { return float4( chx4( v, a, b ) ); }
#undef chx
#undef chx4

float2 col( float2x4 m, const int c )
    { return float2( m[0][c], m[1][c] ); }
float3 col( float3x4 m, const int c )
    { return float3( m[0][c], m[1][c], m[2][c] ); }
float4 col( float4x4 m, const int c )
    { return float4( m[0][c], m[1][c], m[2][c], m[3][c] ); }

#define sc( n ) m[n][c] = v[n]
float2 col( float2x4 m, const int c, float2 v )
    { sc(0);sc(1); return v; }
float3 col( float3x4 m, const int c, float3 v )
    { sc(0);sc(1);sc(2); return v; }
float4 col( float4x4 m, const int c, float4 v )
    { sc(0);sc(1);sc(2);sc(3); return v; }
#undef sc

float2x4 cols( float4 x, float4 y ) {
    return float2x4(
        float2(x.x,y.x),
        float2(x.y,y.y),
        float2(x.z,y.z),
        float2(x.w,y.w)
    );
}
float3x4 cols( float4 x, float4 y, float4 z ) {
    return float3x4(
        float3(x.x,y.x,z.x),
        float3(x.y,y.y,z.y),
        float3(x.z,y.z,z.z),
        float3(x.w,y.w,z.w)
    );
}
float4x4 cols( float4 x, float4 y, float4 z, float4 w ) {
    return float4x4(
        float4(x.x,y.x,z.x,w.x),
        float4(x.y,y.y,z.y,w.y),
        float4(x.z,y.z,z.z,w.z),
        float4(x.w,y.w,z.w,w.w)
    );
}
const float4 z = {0,0,0,0};

float4 Ldynamic_color;
float4 Ldynamic_dir;
float3 T;
float4x4 m_shadow;
float3x4 m_sunmask;
uniform sampler2D s_accumulator;
uniform sampler2D s_lmap;
uniform sampler2D s_normal;
uniform sampler2D s_position;
uniform sampler2D s_smap;

float4 main( float2 tc : TEXCOORD0 ) : COLOR {
    float4x4 c = float4x4(
        float4( 1, 3.33333325, 1.53846157, -1 ),
        float4( -0.000585937523, 0, 1, 1024 ),
        float4( 1.44269502, 0.625, 0.400000006, 0.600000024 ),
        float4( 0.000585937523, -0.000585937523, 0.25, 0 )
    );
/*
#pragma def( ps_3_0, c11, 1, 3.33333325, 1.53846157, -1 )
#pragma def( ps_3_0, c12, -0.000585937523, 0, 1, 1024 )
#pragma def( ps_3_0, c13, 1.44269502, 0.625, 0.400000006, 0.600000024 )
#pragma def( ps_3_0, c14, 0.000585937523, -0.000585937523, 0.25, 0 )
*/
    float4 r0=z, r1=z, r2=z, r3=z, r4=z, rs;
    
    r0 = tex2D( s_position, tc );
    r1 = (r0.y) * (col( m_shadow, 1 ));
    r1 = ((col( m_shadow, 0 )) * (r0.x)) + (r1);
    r1 = ((col( m_shadow, 2 )) * (r0.z)) + (r1);
    r1 = (r1) + (col( m_shadow, 3 ));
    r0.w = 1/( r1.w );
    r2.xy = ((r1) * (r0.w)) + (c[1].x);
    r3 = tex2D( s_smap, r2 );
    r2.xy = (r2) * (c[1].w);
    r3 = ((r1.z) * (r0.w)) + (-r3);
    r3 = cmp( r3, c[1].y, c[1].z );
    r2.xy = frac( r2 );
    r2.zw = pp((-r2.xyxy) + (c[0].x));
    r4 = pp((r2.xyyw) * (r2.wzxz));
    r1.w = pp(dot( (float4) r3, r4 ));
    r2.xy = ((r1) * (r0.w)) + (c[3]);
    r3 = tex2D( s_smap, r2 );
    r2.xy = (r2) * (c[1].w);
    r3 = ((r1.z) * (r0.w)) + (-r3);
    r3 = cmp( r3, c[1].y, c[1].z );
    r2.xy = frac( r2 );
    r2.zw = pp((-r2.xyxy) + (c[0].x));
    r4 = pp((r2.xyyw) * (r2.wzxz));
    r2.x = pp(dot( (float4) r3, r4 ));
    r1.w = pp((r1.w) + (r2.x));
    r2.xy = ((r1) * (r0.w)) + (c[3].yxzw);
    r3 = tex2D( s_smap, r2 );
    r2.xy = (r2) * (c[1].w);
    r3 = ((r1.z) * (r0.w)) + (-r3);
    r3 = cmp( r3, c[1].y, c[1].z );
    r2.xy = frac( r2 );
    r2.zw = pp((-r2.xyxy) + (c[0].x));
    r4 = pp((r2.xyyw) * (r2.wzxz));
    r2.x = pp(dot( (float4) r3, r4 ));
    r1.w = pp((r1.w) + (r2.x));
    r1.xy = ((r1) * (r0.w)) + (-c[1].x);
    r2 = tex2D( s_smap, r1 );
    r1.xy = (r1) * (c[1].w);
    r2 = ((r1.z) * (r0.w)) + (-r2);
    r2 = cmp( r2, c[1].y, c[1].z );
    r1.xy = frac( r1 );
    r3.xy = pp((-r1) + (c[0].x));
    r4.xy = pp((r1) * (r3.yxzw));
    r4.z = pp((r1.y) * (r1.x));
    r4.w = pp((r3.y) * (r3.x));
    r0.w = pp(dot( (float4) r2, r4 ));
    r0.w = pp((r1.w) + (r0.w));
    r1.xy = (r0.y) * (col( m_sunmask, 1 ));
    r1.xy = ((col( m_sunmask, 0 )) * (r0.x)) + (r1);
    r1.xy = ((col( m_sunmask, 2 )) * (r0.z)) + (r1);
    r1.xy = (r1) + (col( m_sunmask, 3 ));
    r1 = pp(tex2D( s_normal, r1 ));
    r0.w = pp((r0.w) * (r1.w));
    r0.w = pp((r0.w) * (c[3].z));
    r1.x = pp(dot( (float3) r0, r0 ));
    r1.x = pp( 1/sqrt( r1.x ) );
    r0.xyz = pp( ((r0) * (-r1.x)) + (-Ldynamic_dir) );
    r1.x = pp(dot( (float3) r0, r0 ));
    r1.x = pp( 1/sqrt( r1.x ) );
    r2 = pp(tex2D( s_normal, tc ));
    r3.xyz = pp(normalize(r2));
    r1.y = pp(saturate( dot( (float3) r3, -Ldynamic_dir ) ));
    r2.xyz = (r3) * (r1.y);
    r0.xyz = ((r0) * (r1.x)) + (-r2);
    r2.xyz = normalize(r0);
    r0.x = dot( (float3) T, r2 );
    r0.y = (-r0.x) + (c[0].x);
    r0.y = (r0.y) * (c[0].y);
    r0.x = ((r0.x) * (c[0].z)) + (r0.y);
    r0.y = (r1.y) + (c[0].w);
    r0.x = (r0.x) * (r0.y);
    r0.y = 1/( r1.y );
    r0.x = (r0.x) * (r0.y);
    r0.x = (r0.x) * (c[2].x);
    r0.x = pow( 2, r0.x );
    r0.x = (r1.y) * (r0.x);
    r0.y = (r1.y) * (r1.y);
    r0.x = ((r0.x) * (c[2].y)) + (r0.y);
    r0.y = saturate( ( (r1.y) * (c[2].z) ) + (c[2].w) );
    r0.y = (r1.y) * (r0.y);
    r0.x = pp( ((r0.y) * (-Ldynamic_dir.w)) + (r0.x) );
    r1 = (r0.x) * (Ldynamic_color);
    r2 = pp(tex2D( s_accumulator, tc ));
    rs = pp( ((r1) * (r0.w)) + (r2) );
    return rs;
}