1#version 460 core
2#extension GL_ARB_separate_shader_objects : enable
3#extension GL_ARB_shading_language_420pack : enable
4
5// includes
6
7#include "common/bloom_common.h"
8
9// sets
10
11#include "render/shaders/common/render_post_process_layout_common.h"
12
13layout(set = 1, binding = 0) uniform texture2D uTex;
14layout(set = 1, binding = 1) uniform texture2D uTexBloom;
15layout(set = 1, binding = 2) uniform sampler uSampler;
16
17// in / out
18
19layout (location = 0) in vec2 inUv;
20
21layout (location = 0) out vec4 outColor;
22
23///////////////////////////////////////////////////////////////////////////////
24// bloom combine
25// bloom parameters:
26// .x is thresholdHard, .y is thresholdSoft, .z is amountCoefficient, .w is dirtMaskCoefficient
27
28void main()
29{
30    const vec2 uv = inUv;
31    const vec3 baseColor = textureLod(sampler2D(uTex, uSampler), uv, 0).xyz;
32    // NOTE: more samples (lower resolution)
33    const vec3 bloomColor = textureLod(sampler2D(uTexBloom, uSampler), uv, 0).xyz;
34
35    vec3 finalColor = min(bloomCombine(baseColor, bloomColor, uPc.factor), CORE_BLOOM_CLAMP_MAX_VALUE);
36    outColor = vec4(finalColor, 1.0);
37}
38