aboutsummaryrefslogtreecommitdiff
path: root/src/backend/gl
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/gl')
-rw-r--r--src/backend/gl/gl_common.c6
-rw-r--r--src/backend/gl/gl_common.h1
-rw-r--r--src/backend/gl/shaders.c6
3 files changed, 9 insertions, 4 deletions
diff --git a/src/backend/gl/gl_common.c b/src/backend/gl/gl_common.c
index a7d2aab..a9ded56 100644
--- a/src/backend/gl/gl_common.c
+++ b/src/backend/gl/gl_common.c
@@ -382,8 +382,9 @@ static void _gl_compose(backend_t *base, struct backend_image *img, GLuint targe
if (win_shader->uniform_invert_color >= 0) {
glUniform1i(win_shader->uniform_invert_color, img->color_inverted);
}
- if (win_shader->uniform_tex >= 0) {
- glUniform1i(win_shader->uniform_tex, 0);
+ if (win_shader->uniform_effective_size >= 0) {
+ glUniform2f(win_shader->uniform_effective_size, (float)img->ewidth,
+ (float)img->eheight);
}
if (win_shader->uniform_dim >= 0) {
glUniform1f(win_shader->uniform_dim, (float)img->dim);
@@ -596,6 +597,7 @@ static bool gl_win_shader_from_stringv(const char **vshader_strv,
bind_uniform(ret, opacity);
bind_uniform(ret, invert_color);
bind_uniform(ret, tex);
+ bind_uniform(ret, effective_size);
bind_uniform(ret, dim);
bind_uniform(ret, brightness);
bind_uniform(ret, max_brightness);
diff --git a/src/backend/gl/gl_common.h b/src/backend/gl/gl_common.h
index 3a78865..f4eee29 100644
--- a/src/backend/gl/gl_common.h
+++ b/src/backend/gl/gl_common.h
@@ -35,6 +35,7 @@ typedef struct {
GLint uniform_opacity;
GLint uniform_invert_color;
GLint uniform_tex;
+ GLint uniform_effective_size;
GLint uniform_dim;
GLint uniform_brightness;
GLint uniform_max_brightness;
diff --git a/src/backend/gl/shaders.c b/src/backend/gl/shaders.c
index 4a18e62..7cee752 100644
--- a/src/backend/gl/shaders.c
+++ b/src/backend/gl/shaders.c
@@ -88,6 +88,7 @@ const char win_shader_glsl[] = GLSL(330,
uniform bool invert_color;
in vec2 texcoord;
uniform sampler2D tex;
+ uniform vec2 effective_size;
uniform sampler2D brightness;
uniform float max_brightness;
// Signed distance field for rectangle center at (0, 0), with size of
@@ -121,7 +122,7 @@ const char win_shader_glsl[] = GLSL(330,
// Using mix() to avoid a branch here.
vec4 rim_color = mix(c, border_color, clamp(border_width, 0.0f, 1.0f));
- vec2 outer_size = vec2(textureSize(tex, 0));
+ vec2 outer_size = effective_size;
vec2 inner_size = outer_size - vec2(corner_radius) * 2.0f;
float rect_distance = rectangle_sdf(texcoord - outer_size / 2.0f,
inner_size / 2.0f) - corner_radius;
@@ -148,7 +149,8 @@ const char win_shader_default[] = GLSL(330,
uniform sampler2D tex;
vec4 default_post_processing(vec4 c);
vec4 window_shader() {
- vec4 c = texelFetch(tex, ivec2(texcoord), 0);
+ vec2 texsize = textureSize(tex, 0);
+ vec4 c = texture2D(tex, texcoord / texsize, 0);
return default_post_processing(c);
}
);