@@ -52,6 +52,8 @@ static uint32_t quad_vbo = 0;
5252static int quad_uniform_texture = -1 ;
5353static int quad_uniform_color = -1 ;
5454static int quad_uniform_tex_scale = -1 ;
55+ static int quad_uniform_viewport_size = -1 ;
56+ static int quad_uniform_use_fragcoord = -1 ;
5557
5658
5759
@@ -325,6 +327,8 @@ static void render_emu_mix(void)
325327
326328 glUseProgram (quad_shader_program);
327329 glUniform2f (quad_uniform_tex_scale, tex_h, tex_v);
330+ glUniform2f (quad_uniform_viewport_size, (float )viewportWidth, (float )viewportHeight);
331+ glUniform1i (quad_uniform_use_fragcoord, 0 );
328332 glUniform4f (quad_uniform_color, round_color, round_color, round_color, alpha);
329333
330334 glViewport (0 , 0 , viewportWidth, viewportHeight);
@@ -424,6 +428,8 @@ static void render_quad(float tex_h, float tex_v)
424428
425429 glUseProgram (quad_shader_program);
426430 glUniform2f (quad_uniform_tex_scale, tex_h, tex_v);
431+ glUniform2f (quad_uniform_viewport_size, (float )viewportWidth, (float )viewportHeight);
432+ glUniform1i (quad_uniform_use_fragcoord, 0 );
427433 glUniform4f (quad_uniform_color, 1 .0f , 1 .0f , 1 .0f , 1 .0f );
428434
429435 glViewport (0 , 0 , viewportWidth, viewportHeight);
@@ -450,6 +456,8 @@ static void render_scanlines(void)
450456
451457 glUseProgram (quad_shader_program);
452458 glUniform2f (quad_uniform_tex_scale, tex_h, tex_v);
459+ glUniform2f (quad_uniform_viewport_size, (float )viewportWidth, (float )viewportHeight);
460+ glUniform1i (quad_uniform_use_fragcoord, 1 );
453461 glUniform4f (quad_uniform_color, 1 .0f , 1 .0f , 1 .0f , config_video.scanlines_intensity );
454462
455463 glViewport (0 , 0 , viewportWidth, viewportHeight);
@@ -487,8 +495,14 @@ static void init_shaders(void)
487495 " out vec4 FragColor;\n "
488496 " uniform sampler2D uTexture;\n "
489497 " uniform vec4 uColor;\n "
498+ " uniform vec2 uTexScale;\n "
499+ " uniform vec2 uViewportSize;\n "
500+ " uniform int uUseFragCoord;\n "
490501 " void main() {\n "
491- " FragColor = texture(uTexture, vTexCoord) * uColor;\n "
502+ " vec2 texCoord = vTexCoord;\n "
503+ " if (uUseFragCoord != 0)\n "
504+ " texCoord = (gl_FragCoord.xy / uViewportSize) * uTexScale;\n "
505+ " FragColor = texture(uTexture, texCoord) * uColor;\n "
492506 " }\n " ;
493507
494508 const char * vs_sources[2 ] = { version, vs_body };
@@ -539,9 +553,12 @@ static void init_shaders(void)
539553 quad_uniform_tex_scale = glGetUniformLocation (quad_shader_program, " uTexScale" );
540554 quad_uniform_texture = glGetUniformLocation (quad_shader_program, " uTexture" );
541555 quad_uniform_color = glGetUniformLocation (quad_shader_program, " uColor" );
556+ quad_uniform_viewport_size = glGetUniformLocation (quad_shader_program, " uViewportSize" );
557+ quad_uniform_use_fragcoord = glGetUniformLocation (quad_shader_program, " uUseFragCoord" );
542558
543559 glUseProgram (quad_shader_program);
544560 glUniform1i (quad_uniform_texture, 0 );
561+ glUniform1i (quad_uniform_use_fragcoord, 0 );
545562 glUseProgram (0 );
546563
547564 float quad_vertices[] = {
0 commit comments