#include "Uniforms.glsl" #include "Samplers.glsl" #include "Transform.glsl" #include "ScreenPos.glsl" varying vec2 vTexCoord; varying vec2 vScreenPos; #ifdef COMPILEPS uniform float cBloomThreshold; uniform vec2 cBloomMix; uniform vec2 cHBlurInvSize; #endif void VS() { mat4 modelMatrix = iModelMatrix; vec3 worldPos = GetWorldPos(modelMatrix); gl_Position = GetClipPos(worldPos); vTexCoord = GetQuadTexCoord(gl_Position); vScreenPos = GetScreenPosPreDiv(gl_Position); } void PS() { #ifdef BRIGHT vec3 rgb = texture2D(sDiffMap, vScreenPos).rgb; gl_FragColor = vec4((rgb - vec3(cBloomThreshold, cBloomThreshold, cBloomThreshold)) / (1.0 - cBloomThreshold), 1.0); #endif #ifdef HBLUR vec3 rgb = texture2D(sDiffMap, vTexCoord + vec2(-2.0, 0.0) * cHBlurInvSize).rgb * 0.1; rgb += texture2D(sDiffMap, vTexCoord + vec2(-1.0, 0.0) * cHBlurInvSize).rgb * 0.25; rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, 0.0) * cHBlurInvSize).rgb * 0.3; rgb += texture2D(sDiffMap, vTexCoord + vec2(1.0, 0.0) * cHBlurInvSize).rgb * 0.25; rgb += texture2D(sDiffMap, vTexCoord + vec2(2.0, 0.0) * cHBlurInvSize).rgb * 0.1; gl_FragColor = vec4(rgb, 1.0); #endif #ifdef VBLUR vec3 rgb = texture2D(sDiffMap, vTexCoord + vec2(0.0, -2.0) * cHBlurInvSize).rgb * 0.1; rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, -1.0) * cHBlurInvSize).rgb * 0.25; rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, 0.0) * cHBlurInvSize).rgb * 0.3; rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, 1.0) * cHBlurInvSize).rgb * 0.25; rgb += texture2D(sDiffMap, vTexCoord + vec2(0.0, 2.0) * cHBlurInvSize).rgb * 0.1; gl_FragColor = vec4(rgb, 1.0); #endif #ifdef COMBINE vec3 original = texture2D(sDiffMap, vScreenPos).rgb * cBloomMix.x; vec3 bloom = texture2D(sNormalMap, vTexCoord).rgb * cBloomMix.y; // Prevent oversaturation original *= max(vec3(1.0) - bloom, vec3(0.0)); gl_FragColor = vec4(original + bloom, 1.0); #endif }