#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; return sum; return tex2D(Texture, uv); } 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); } sum /= samplesU * samplesV; return sum; //return texCUBE(Texture, float3(uv, 1)) + face * 0.0000001; }