#define samplesU 3 #define samplesV 3 struct VS_INPUT { float4 Position : POSITION; }; struct VS_OUTPUT { float4 hPosition : POSITION; float2 Position : TEXCOORD0; }; VS_OUTPUT BlurVS(VS_INPUT IN) { VS_OUTPUT OUT; OUT.hPosition = IN.Position; OUT.Position =(IN.Position.xy + 1.0) / 2.0; OUT.Position.y = 1.0 - OUT.Position.y; return OUT; } float4 BlurPS(VS_OUTPUT IN, uniform sampler2D Texture : register(s0), uniform float width, uniform float height ) : COLOR { /* float2 pixel = float2(1.0 / width, 1.0 / height); float2 uv = IN.Position + pixel * 0.5; float4 sum = float4(0,0,0,0); for(int i = 0; i < samplesU; i++) for(int j = 0; j < samplesU; j++) sum += tex2D(Texture, uv + float2(i - samplesU * 0.5,j - samplesV * 0.5) * pixel); sum /= samplesU * samplesV; */ float du = 2.0 / width; float dv = 2.0 / height; float2 uv = IN.Position; float4 sum = float4(0,0,0,0); sum += tex2D(Texture,uv); sum += tex2D(Texture,uv + float2(du,0)); sum += tex2D(Texture,uv + float2(du,dv)); sum += tex2D(Texture,uv + float2(0,dv)); return sum / 4.0; } float4 CopyPS(VS_OUTPUT IN, uniform sampler2D Texture : register(s0), uniform float alpha, uniform float width, uniform float height ) : COLOR { float2 pixel = float2(1.0 / width, 1.0 / height); float2 uv = IN.Position + pixel * 0.5; float4 Color = tex2D(Texture, uv); Color.a = alpha; // Color = float4(0,0,0,1); return Color; } VS_OUTPUT BlurCubeFaceVS(VS_INPUT IN) { VS_OUTPUT OUT; OUT.hPosition = IN.Position; OUT.Position = OUT.hPosition; return OUT; } float4 BlurCubeFacePS(VS_OUTPUT IN, uniform samplerCUBE Texture : register(s0), uniform float width, uniform float height, uniform float face ) : COLOR { /* float2 pixel = float2(2.0 / width, 2.0 / height); float2 uv = IN.Position + pixel * 0.5; float4 sum = float4(0,0,0,0); for(int i = 0; i < samplesU; i++) for(int j = 0; j < samplesV; j++) { float3 dir; float2 pos = uv + float2(i - samplesU * 0.5,j - samplesV * 0.5) * pixel; if (face == 0) dir = float3(1, pos.y, -pos.x); if (face == 1) dir = float3(-1, pos.y, pos.x); if (face == 2) dir = float3(pos.x, 1, -pos.y); if (face == 3) dir = float3(pos.x, -1, pos.y); if (face == 4) dir = float3(pos.x, pos.y, 1); if (face == 5) dir = float3(-pos.x, pos.y,-1); sum += texCUBE(Texture, dir); } */ float pixel = 2.0 / width; float2 uv = IN.Position; float3 u; float3 v; float3 pos; if (face == 0){u = float3(0,0,-1); v = float3(0,1,0); pos = float3(1,uv.y,-uv.x);} if (face == 1){u = float3(0,0,1); v = float3(0,1,0); pos = float3(-1,uv.y,uv.x);} if (face == 2){u = float3(1,0,0); v = float3(0,0,-1); pos = float3(uv.x,1,-uv.y);} if (face == 3){u = float3(1,0,0); v = float3(0,0,1); pos = float3(uv.x,-1,uv.y);} if (face == 4){u = float3(1,0,0); v = float3(0,1,0); pos = float3(uv.x,uv.y,1);} if (face == 5){u = float3(-1,0,0); v = float3(0,1,0); pos = float3(-uv.x,uv.y,-1);} u *= pixel; v *= pixel; float4 sum = float4(0,0,0,0); sum += texCUBE(Texture, pos); sum += texCUBE(Texture, pos + u); sum += texCUBE(Texture, pos + v); sum += texCUBE(Texture, pos + u + v); sum /= 4.0; return sum; //return texCUBE(Texture, float3(uv, 1)) + face * 0.0000001; }