[777] | 1 | float CauSpriteSize;
|
---|
| 2 | float CauSpriteIntens;
|
---|
| 3 |
|
---|
| 4 | struct VS_OUT
|
---|
| 5 | {
|
---|
| 6 | float4 hPosition : POSITION;
|
---|
| 7 | float4 texCoord : TEXCOORD0;
|
---|
| 8 | float4 color : COLOR0;
|
---|
| 9 | float2 r : TEXCOORD1;
|
---|
| 10 | float2 center : TEXCOORD2;
|
---|
| 11 | float4 position : TEXCOORD3;
|
---|
[1094] | 12 | float pSize : PSIZE;
|
---|
| 13 | float dist : TEXCOORD4;
|
---|
[777] | 14 | };
|
---|
| 15 |
|
---|
| 16 | VS_OUT CauVS(float4 position : POSITION,
|
---|
| 17 | float4 texCoord : TEXCOORD0,
|
---|
| 18 | float4 color : COLOR0,
|
---|
| 19 | uniform float4x4 worldView,
|
---|
| 20 | uniform float4x4 Proj,
|
---|
| 21 | uniform float4x4 worldViewProj,
|
---|
| 22 | uniform float resolution,
|
---|
| 23 | uniform sampler2D PhotonHitMap : register(s0))
|
---|
| 24 | {
|
---|
| 25 | VS_OUT OUT;
|
---|
| 26 |
|
---|
| 27 | float radius = CauSpriteSize;
|
---|
[1094] | 28 | OUT.pSize = radius;
|
---|
[777] | 29 | float4 cPosition;
|
---|
| 30 |
|
---|
[1094] | 31 | float4 pos = tex2Dlod(PhotonHitMap, float4(position.x, 1.0 - position.y,0,0)).rgba;
|
---|
| 32 | // float4 pos = float4(0,0,-0.5,1);
|
---|
[1487] | 33 |
|
---|
[807] | 34 | if(pos.a == 0)//no photon hit
|
---|
[777] | 35 | {
|
---|
| 36 | OUT.center = 1000.0f;
|
---|
| 37 | OUT.position = OUT.hPosition = 1000.0f; //transform out of view
|
---|
| 38 | }
|
---|
| 39 | else
|
---|
| 40 | {
|
---|
| 41 | float4 wPosition = float4(normalize(pos.xyz),1);
|
---|
| 42 |
|
---|
| 43 | cPosition = mul(worldView, wPosition);
|
---|
| 44 | OUT.center = cPosition.xy;
|
---|
| 45 | OUT.position = cPosition;
|
---|
[1094] | 46 | OUT.hPosition = mul(Proj, cPosition);
|
---|
[777] | 47 | }
|
---|
| 48 |
|
---|
[1094] | 49 | OUT.r.x = radius;
|
---|
[777] | 50 | OUT.r.y = radius;
|
---|
| 51 | OUT.texCoord = texCoord;
|
---|
[1094] | 52 | OUT.color = 1;
|
---|
| 53 | OUT.color = float4(pos);
|
---|
| 54 | OUT.dist = length(pos.xyz);
|
---|
[777] | 55 |
|
---|
| 56 | return OUT;
|
---|
| 57 | }
|
---|
| 58 |
|
---|
| 59 |
|
---|
| 60 | float4 CauPS(VS_OUT IN,
|
---|
[1094] | 61 | uniform float3 color,
|
---|
[777] | 62 | uniform sampler2D intensityTex : register(s1)
|
---|
| 63 | ):COLOR
|
---|
| 64 | {
|
---|
| 65 |
|
---|
[1094] | 66 | // float2 texcoord = (IN.center - IN.position.xy) / IN.r.x;
|
---|
| 67 | // texcoord = (texcoord + 1.0) * 0.5;
|
---|
| 68 | IN.color.rgb = color;
|
---|
| 69 | float intens = tex2D(intensityTex, IN.texCoord).r;
|
---|
| 70 | IN.color.a = intens * CauSpriteIntens;
|
---|
| 71 | return IN.color;
|
---|
[777] | 72 | }
|
---|
| 73 |
|
---|
| 74 |
|
---|