private GLTexture edge_pass(GLTexture albedo_tex, GLTexture depthTex)
{
if (edge_shader == null)
{
edge_shader = GLShaderFilter.Create(Width, Height, new GLShader(
VertexHeader + @"
out vec2 texcoord;
out vec4 offset[3];
out vec4 dummy2;
void main()
{
texcoord = a_texcoords.xy;
vec4 dummy1 = vec4(0);
SMAAEdgeDetectionVS(dummy1, dummy2, texcoord, offset);
gl_Position = a_position;
}
",
FragmentHeader + @"
uniform sampler2D albedo_tex;
uniform sampler2D depthTex;
in vec2 texcoord;
in vec4 offset[3];
in vec4 dummy2;
void main()
{
#if SMAA_PREDICATION == 1
gl_FragColor = SMAAColorEdgeDetectionPS(texcoord, offset, albedo_tex, depthTex);
#else
gl_FragColor = SMAAColorEdgeDetectionPS(texcoord, offset, albedo_tex);
#endif
}
"
));
}
return edge_shader.Process((Shader) =>
{
Shader.GetUniform("albedo_tex").Set(GLTextureUnit.CreateAtIndex(0).SetWrap(GLWrap.ClampToEdge).SetFiltering(GLScaleFilter.Linear).SetTexture(albedo_tex));
Shader.GetUniform("depthTex").NoWarning().Set(GLTextureUnit.CreateAtIndex(1).SetWrap(GLWrap.ClampToEdge).SetFiltering(GLScaleFilter.Linear).SetTexture(depthTex));
});
}