2019-10-31 22:58:41 +01:00
|
|
|
include "pipelines/common.glsl"
|
|
|
|
|
2018-10-13 00:09:34 +02:00
|
|
|
vertex_shader [[
|
2019-08-02 19:23:55 +02:00
|
|
|
layout (binding=0) uniform sampler2D u_source;
|
2018-10-13 00:09:34 +02:00
|
|
|
|
2019-10-31 22:58:41 +01:00
|
|
|
layout(location=0) out vec2 v_uv0;
|
|
|
|
layout(location=1) out vec4 v_uv1;
|
|
|
|
layout(location=2) out vec4 v_uv2;
|
2018-10-13 00:09:34 +02:00
|
|
|
void main() {
|
|
|
|
vec2 ts = 1.0/textureSize(u_source, 0);
|
2020-09-20 14:03:06 +02:00
|
|
|
vec4 pos = fullscreenQuad(gl_VertexID, v_uv0);
|
2018-10-13 00:09:34 +02:00
|
|
|
#ifdef HBLUR
|
|
|
|
v_uv1 = vec4(
|
|
|
|
v_uv0.x + 1.3846153846 * ts.x, v_uv0.y,
|
|
|
|
v_uv0.x + 3.2307692308 * ts.x, v_uv0.y
|
|
|
|
);
|
|
|
|
v_uv2 = vec4(
|
|
|
|
v_uv0.x - 1.3846153846 * ts.x, v_uv0.y,
|
|
|
|
v_uv0.x - 3.2307692308 * ts.x, v_uv0.y
|
|
|
|
);
|
|
|
|
#else
|
|
|
|
v_uv1 = vec4(
|
|
|
|
v_uv0.x, v_uv0.y + 1.3846153846 * ts.y,
|
|
|
|
v_uv0.x, v_uv0.y + 3.2307692308 * ts.y
|
|
|
|
);
|
|
|
|
v_uv2 = vec4(
|
|
|
|
v_uv0.x, v_uv0.y - 1.3846153846 * ts.y,
|
|
|
|
v_uv0.x, v_uv0.y - 3.2307692308 * ts.y
|
|
|
|
);
|
|
|
|
#endif
|
|
|
|
gl_Position = pos;
|
|
|
|
}
|
|
|
|
]]
|
|
|
|
|
|
|
|
|
|
|
|
fragment_shader [[
|
2019-09-25 23:27:58 +02:00
|
|
|
#define DOF_NEAR_BLUR u_blur_args.x
|
|
|
|
#define DOF_NEAR_SHARP u_blur_args.y
|
|
|
|
#define DOF_FAR_SHARP u_blur_args.z
|
|
|
|
#define DOF_FAR_BLUR u_blur_args.w
|
|
|
|
layout(std140, binding = 4) uniform Drawcall {
|
|
|
|
uniform vec4 u_blur_args;
|
|
|
|
};
|
2018-10-13 00:09:34 +02:00
|
|
|
|
2019-08-02 19:23:55 +02:00
|
|
|
layout (binding=0) uniform sampler2D u_source;
|
|
|
|
layout (binding=1) uniform sampler2D u_depth;
|
2018-10-13 00:09:34 +02:00
|
|
|
|
2019-10-31 22:58:41 +01:00
|
|
|
layout(location=0) in vec2 v_uv0;
|
|
|
|
layout(location=1) in vec4 v_uv1;
|
|
|
|
layout(location=2) in vec4 v_uv2;
|
|
|
|
layout(location=0) out vec4 o_color;
|
2018-10-13 00:09:34 +02:00
|
|
|
|
|
|
|
void main() {
|
2019-10-31 22:58:41 +01:00
|
|
|
vec4 color = texture(u_source, v_uv0.xy) * 0.2270270270
|
|
|
|
+ texture(u_source, v_uv1.xy) * 0.3162162162
|
|
|
|
+ texture(u_source, v_uv1.zw) * 0.0702702703
|
|
|
|
+ texture(u_source, v_uv2.xy) * 0.3162162162
|
|
|
|
+ texture(u_source, v_uv2.zw) * 0.0702702703;
|
2018-10-13 00:09:34 +02:00
|
|
|
|
2019-10-31 22:58:41 +01:00
|
|
|
float depth = texture(u_depth, v_uv0.xy).r;
|
2020-10-28 21:33:02 +01:00
|
|
|
float linear_depth = toLinearDepth(Global.inv_projection, depth);
|
2018-10-13 00:09:34 +02:00
|
|
|
#ifdef NEAR
|
|
|
|
color.a = 1 - smoothstep(DOF_NEAR_BLUR, DOF_NEAR_SHARP, linear_depth);
|
|
|
|
#else
|
|
|
|
color.a = smoothstep(DOF_FAR_SHARP, DOF_FAR_BLUR, linear_depth);
|
|
|
|
#endif
|
|
|
|
o_color = color;
|
|
|
|
}
|
|
|
|
]]
|