summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/render/fx_renderer/shaders.h1
-rw-r--r--render/fx_renderer/fx_pass.c1
-rw-r--r--render/fx_renderer/gles2/shaders/box_shadow.frag6
-rw-r--r--render/fx_renderer/shaders.c1
4 files changed, 8 insertions, 1 deletions
diff --git a/include/render/fx_renderer/shaders.h b/include/render/fx_renderer/shaders.h
index 946f02c..6c19744 100644
--- a/include/render/fx_renderer/shaders.h
+++ b/include/render/fx_renderer/shaders.h
@@ -91,6 +91,7 @@ struct box_shadow_shader {
GLint pos_attrib;
GLint position;
GLint size;
+ GLint offset;
GLint blur_sigma;
GLint corner_radius;
};
diff --git a/render/fx_renderer/fx_pass.c b/render/fx_renderer/fx_pass.c
index f26f5e9..f0af02b 100644
--- a/render/fx_renderer/fx_pass.c
+++ b/render/fx_renderer/fx_pass.c
@@ -487,6 +487,7 @@ void fx_render_pass_add_box_shadow(struct fx_gles_render_pass *pass,
glUniform1f(renderer->shaders.box_shadow.blur_sigma, shadow_data->blur_sigma);
glUniform1f(renderer->shaders.box_shadow.corner_radius, options->corner_radius);
glUniform2f(renderer->shaders.box_shadow.size, shadow_box.width, shadow_box.height);
+ glUniform2f(renderer->shaders.box_shadow.offset, options->shadow_data->offset_x, options->shadow_data->offset_y);
glUniform2f(renderer->shaders.box_shadow.position, shadow_box.x, shadow_box.y);
// TODO: also account for options->clip
diff --git a/render/fx_renderer/gles2/shaders/box_shadow.frag b/render/fx_renderer/gles2/shaders/box_shadow.frag
index e98cf92..d318c93 100644
--- a/render/fx_renderer/gles2/shaders/box_shadow.frag
+++ b/render/fx_renderer/gles2/shaders/box_shadow.frag
@@ -11,6 +11,7 @@ varying vec2 v_texcoord;
uniform vec2 position;
uniform vec2 size;
+uniform vec2 offset;
uniform float blur_sigma;
uniform float corner_radius;
@@ -80,7 +81,10 @@ void main() {
shadow_alpha += (random() - 0.5) / 128.0;
// get the window alpha so we can render around the window
- float window_alpha = 1.0 - smoothstep(-1.0, 1.0, roundRectSDF((size * 0.5) - blur_sigma, position + blur_sigma, corner_radius));
+ float window_alpha = 1.0 - smoothstep(-1.0, 1.0,
+ roundRectSDF((size * 0.5) - blur_sigma,
+ vec2(position.x + blur_sigma - offset.x, position.y + blur_sigma - offset.y),
+ corner_radius));
gl_FragColor = vec4(v_color.rgb, shadow_alpha) * (1.0 - window_alpha);
}
diff --git a/render/fx_renderer/shaders.c b/render/fx_renderer/shaders.c
index 064136d..2c2aa7e 100644
--- a/render/fx_renderer/shaders.c
+++ b/render/fx_renderer/shaders.c
@@ -196,6 +196,7 @@ bool link_box_shadow_program(struct box_shadow_shader *shader) {
shader->pos_attrib = glGetAttribLocation(prog, "pos");
shader->position = glGetUniformLocation(prog, "position");
shader->size = glGetUniformLocation(prog, "size");
+ shader->offset = glGetUniformLocation(prog, "offset");
shader->blur_sigma = glGetUniformLocation(prog, "blur_sigma");
shader->corner_radius = glGetUniformLocation(prog, "corner_radius");