private GLTexture pass_neighborhood(GLTexture albedo_tex, GLTexture blend_tex)
{
if (neighborhood_shader == null)
{
neighborhood_shader = GLShaderFilter.Create(Width, Height, new GLShader(
VertexHeader + @"
out vec2 texcoord;
out vec4 offset[2];
out vec4 dummy2;
void main()
{
texcoord = a_texcoords.xy;
vec4 dummy1 = vec4(0);
SMAANeighborhoodBlendingVS(dummy1, dummy2, texcoord, offset);
gl_Position = a_position;
}
",
FragmentHeader + @"
uniform sampler2D albedo_tex;
uniform sampler2D blend_tex;
in vec2 texcoord;
in vec4 offset[2];
in vec4 dummy2;
void main()
{
gl_FragColor = SMAANeighborhoodBlendingPS(texcoord, offset, albedo_tex, blend_tex);
}
"
));
}
return neighborhood_shader.Process((Shader) =>
{
Shader.GetUniform("albedo_tex").Set(GLTextureUnit.CreateAtIndex(0).SetWrap(GLWrap.ClampToEdge).SetFiltering(GLScaleFilter.Linear).SetTexture(albedo_tex));
Shader.GetUniform("blend_tex").Set(GLTextureUnit.CreateAtIndex(1).SetWrap(GLWrap.ClampToEdge).SetFiltering(GLScaleFilter.Linear).SetTexture(blend_tex));
});
}