mirror of
				https://github.com/RetroDECK/ES-DE.git
				synced 2025-04-10 19:15:13 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			93 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
| //  SPDX-License-Identifier: MIT
 | |
| //
 | |
| //  ES-DE
 | |
| //  blur_vertical.glsl
 | |
| //
 | |
| //  Vertical gaussian blur.
 | |
| //
 | |
| 
 | |
| // Vertex section of code:
 | |
| #if defined(VERTEX)
 | |
| 
 | |
| uniform mat4 MVPMatrix;
 | |
| in vec2 positionVertex;
 | |
| in vec2 texCoordVertex;
 | |
| out vec2 texCoord;
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     gl_Position = MVPMatrix * vec4(positionVertex, 0.0, 1.0);
 | |
|     texCoord = texCoordVertex;
 | |
| }
 | |
| 
 | |
| // Fragment section of code:
 | |
| #elif defined(FRAGMENT)
 | |
| 
 | |
| #ifdef GL_ES
 | |
| precision highp float;
 | |
| #endif
 | |
| 
 | |
| uniform uint shaderFlags;
 | |
| uniform sampler2D textureSampler0;
 | |
| uniform float blurStrength;
 | |
| in vec2 texCoord;
 | |
| out vec4 FragColor;
 | |
| 
 | |
| // shaderFlags:
 | |
| // 0x00000001 - Premultiplied alpha (BGRA)
 | |
| // 0x00000002 - Font texture
 | |
| // 0x00000004 - Post processing
 | |
| // 0x00000008 - Clipping
 | |
| // 0x00000010 - Screen rotated 90 or 270 degrees
 | |
| // 0x00000020 - Rounded corners
 | |
| // 0x00000040 - Rounded corners with no anti-aliasing
 | |
| // 0x00000080 - Convert pixel format
 | |
| 
 | |
| void main()
 | |
| {
 | |
|     vec4 color = vec4(0.0);
 | |
|     float hstep = 0.0f;
 | |
|     float vstep = 1.0f;
 | |
|     vec2 tc;
 | |
| 
 | |
|     if (0x0u != (shaderFlags & 0x10u)) {
 | |
|         // Screen rotated 90 or 270 degrees.
 | |
|         tc = texCoord.yx;
 | |
|     }
 | |
|     else {
 | |
|         tc = texCoord.xy;
 | |
|     }
 | |
| 
 | |
|     // 9-tap filter.
 | |
|     color += texture(textureSampler0,
 | |
|                      vec2(tc.x - 4.0 * blurStrength * hstep, tc.y - 4.0 * blurStrength * vstep)) *
 | |
|              0.0162162162;
 | |
|     color += texture(textureSampler0,
 | |
|                      vec2(tc.x - 3.0 * blurStrength * hstep, tc.y - 3.0 * blurStrength * vstep)) *
 | |
|              0.0540540541;
 | |
|     color += texture(textureSampler0,
 | |
|                      vec2(tc.x - 2.0 * blurStrength * hstep, tc.y - 2.0 * blurStrength * vstep)) *
 | |
|              0.1216216216;
 | |
|     color += texture(textureSampler0,
 | |
|                      vec2(tc.x - 1.0 * blurStrength * hstep, tc.y - 1.0 * blurStrength * vstep)) *
 | |
|              0.1945945946;
 | |
| 
 | |
|     color += texture(textureSampler0, vec2(tc.x, tc.y)) * 0.2270270270;
 | |
| 
 | |
|     color += texture(textureSampler0,
 | |
|                      vec2(tc.x + 1.0 * blurStrength * hstep, tc.y + 1.0 * blurStrength * vstep)) *
 | |
|              0.1945945946;
 | |
|     color += texture(textureSampler0,
 | |
|                      vec2(tc.x + 2.0 * blurStrength * hstep, tc.y + 2.0 * blurStrength * vstep)) *
 | |
|              0.1216216216;
 | |
|     color += texture(textureSampler0,
 | |
|                      vec2(tc.x + 3.0 * blurStrength * hstep, tc.y + 3.0 * blurStrength * vstep)) *
 | |
|              0.0540540541;
 | |
|     color += texture(textureSampler0,
 | |
|                      vec2(tc.x + 4.0 * blurStrength * hstep, tc.y + 4.0 * blurStrength * vstep)) *
 | |
|              0.0162162162;
 | |
| 
 | |
|     FragColor = vec4(color.rgb, 1.0);
 | |
| }
 | |
| #endif
 | 
