// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include "texturesample.glsllib" void MAIN() { //glow uses larger sigma for a more rounded blur effect //vec2 pix_size = INPUT_SIZE; vec2 pix_size = vec2(1.0 / INPUT_SIZE.x, 1.0 / INPUT_SIZE.y); //pix_size *= 0.5; //reading from larger buffer, so use more samples vec4 color; if (glowQualityHigh) { color = SAMPLE_LOD(INPUT, INPUT_UV + vec2(0.0, 0.0) * pix_size, 0.0) * 0.152781; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(1.0, 0.0) * pix_size, 0.0) * 0.144599; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(2.0, 0.0) * pix_size, 0.0) * 0.122589; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(3.0, 0.0) * pix_size, 0.0) * 0.093095; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(4.0, 0.0) * pix_size, 0.0) * 0.063327; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(-1.0, 0.0) * pix_size, 0.0) * 0.144599; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(-2.0, 0.0) * pix_size, 0.0) * 0.122589; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(-3.0, 0.0) * pix_size, 0.0) * 0.093095; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(-4.0, 0.0) * pix_size, 0.0) * 0.063327; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(0.0, 1.0) * pix_size, 0.0) * 0.152781; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(1.0, 1.0) * pix_size, 0.0) * 0.144599; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(2.0, 1.0) * pix_size, 0.0) * 0.122589; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(3.0, 1.0) * pix_size, 0.0) * 0.093095; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(4.0, 1.0) * pix_size, 0.0) * 0.063327; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(-1.0, 1.0) * pix_size, 0.0) * 0.144599; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(-2.0, 1.0) * pix_size, 0.0) * 0.122589; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(-3.0, 1.0) * pix_size, 0.0) * 0.093095; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(-4.0, 1.0) * pix_size, 0.0) * 0.063327; color *= 0.5; } else { color = SAMPLE_LOD(INPUT, INPUT_UV + vec2(0.0, 0.0) * pix_size, 0.0) * 0.174938; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(1.0, 0.0) * pix_size, 0.0) * 0.165569; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(2.0, 0.0) * pix_size, 0.0) * 0.140367; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(3.0, 0.0) * pix_size, 0.0) * 0.106595; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(-1.0, 0.0) * pix_size, 0.0) * 0.165569; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(-2.0, 0.0) * pix_size, 0.0) * 0.140367; color += SAMPLE_LOD(INPUT, INPUT_UV + vec2(-3.0, 0.0) * pix_size, 0.0) * 0.106595; } color *= glowStrength; if (isFirstPass) { color *= exposure; float luminance = max(color.r, max(color.g, color.b)); float feedback = max(smoothstep(glowHDRMinimumValue, glowHDRMinimumValue + glowHDRScale, luminance), glowBloom); color = min(color * feedback, vec4(glowHDRMaximumValue)); } FRAGCOLOR = color; }