Skip to content

Commit 519cde2

Browse files
committed
Fix scanlines with some OGL drivers
1 parent 95aff8f commit 519cde2

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

platforms/shared/desktop/ogl_renderer.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ static uint32_t quad_vbo = 0;
5252
static int quad_uniform_texture = -1;
5353
static int quad_uniform_color = -1;
5454
static 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

Comments
 (0)