This was the particular Gaussian Blur Shader I was trying to use.
Code: Select all
sampler2D Src;
float4 gaussFilter[7] =
{
-3.0, 0.0, 0.0, 1.0/64.0,
-2.0, 0.0, 0.0, 6.0/64.0,
-1.0, 0.0, 0.0, 15.0/64.0,
0.0, 0.0, 0.0, 20.0/64.0,
1.0, 0.0, 0.0, 15.0/64.0,
2.0, 0.0, 0.0, 6.0/64.0,
3.0, 0.0, 0.0, 1.0/64.0
};
float texScaler = 1.0/128.0;
float texOffset = 0.0;
struct PS_INPUT
{
float2 TexCoord : TEXCOORD0;
};
struct PS_OUTPUT
{
float4 Color : COLOR;
};
PS_OUTPUT ps_main( PS_INPUT In )
{
PS_OUTPUT Out;
float4 color = 0.0;
int i;
for (i=0;i<7;i++)
{
color += tex2D(Src,float2(In.TexCoord.x + gaussFilter[i].x * texScaler + texOffset,
In.TexCoord.y + gaussFilter[i].y * texScaler + texOffset)) *
gaussFilter[i].w;
} // End for
Out.Color = color * 4.0;
return Out;
}
CALLBACK
Code: Select all
class Blur_ShaderH : public video::IShaderConstantSetCallBack
{
public:
Blur_ShaderH() : FirstUpdate(true)
{
}
virtual void OnSetConstants(video::IMaterialRendererServices* services,
s32 userData)
{
video::IVideoDriver* driver = services->getVideoDriver();
if (FirstUpdate)
{
WorldViewProjID = services->getVertexShaderConstantID("matViewProjection");
}
core::matrix4 worldViewProj;
worldViewProj = driver->getTransform(video::ETS_PROJECTION);
worldViewProj *= driver->getTransform(video::ETS_VIEW);
worldViewProj *= driver->getTransform(video::ETS_WORLD);
core::matrix4 matWorldViewProj = worldViewProj;
services->setVertexShaderConstant(WorldViewProjID, worldViewProj.pointer(), 16);
}
private:
s32 WorldViewProjID;
bool FirstUpdate;
};