#version 450 core //! type fragment layout( location = 0 ) uniform sampler2D u_InputTexture; layout( location = 1 ) uniform vec2 u_OutputSize; layout( location = 2 ) uniform int u_SourceLOD; layout( location = 0 ) out vec3 color; void main( void ) { const vec2 c = gl_FragCoord.xy; color = ( .25 * ( textureLod( u_InputTexture , ( c + vec2( .5 , .5 ) ) / u_OutputSize , u_SourceLOD ) + textureLod( u_InputTexture , ( c + vec2(-.5 , .5 ) ) / u_OutputSize , u_SourceLOD ) + textureLod( u_InputTexture , ( c + vec2( .5 ,-.5 ) ) / u_OutputSize , u_SourceLOD ) + textureLod( u_InputTexture , ( c + vec2(-.5 ,-.5 ) ) / u_OutputSize , u_SourceLOD ) ) ).rgb; }