Revision control

Copy as Markdown

// 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;
}