[gtk: 1/3] gl: fix compilation errors for legacy context shaders
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk: 1/3] gl: fix compilation errors for legacy context shaders
- Date: Tue, 17 Jul 2018 11:11:32 +0000 (UTC)
commit 05ca6bc189a952fde12eb3e2f25edde538a5552e
Author: Elias Aebi <eyelash users noreply github com>
Date: Sat Jul 14 14:20:30 2018 +0200
gl: fix compilation errors for legacy context shaders
gsk/resources/glsl/gl_common.fs.glsl | 79 ++++++++++++++++++++++++++++++++++--
gsk/resources/glsl/gl_common.vs.glsl | 3 +-
2 files changed, 77 insertions(+), 5 deletions(-)
---
diff --git a/gsk/resources/glsl/gl_common.fs.glsl b/gsk/resources/glsl/gl_common.fs.glsl
index 2ed6c75d23..a0b32d11ef 100644
--- a/gsk/resources/glsl/gl_common.fs.glsl
+++ b/gsk/resources/glsl/gl_common.fs.glsl
@@ -1,11 +1,82 @@
-uniform mat4 uMVP;
-uniform sampler2D uSource;
-uniform sampler2D uMask;
-uniform float uAlpha;
+uniform sampler2D u_source;
+uniform sampler2D u_mask;
+uniform mat4 u_projection;
+uniform mat4 u_modelview;
+uniform float u_alpha;
uniform int uBlendMode;
+uniform vec4 u_viewport;
varying vec2 vUv;
+
+struct RoundedRect
+{
+ vec4 bounds;
+ vec4 corner_widths;
+ vec4 corner_heights;
+};
+
+float
+ellipsis_dist (vec2 p, vec2 radius)
+{
+ if (radius == vec2(0, 0))
+ return 0.0;
+
+ vec2 p0 = p / radius;
+ vec2 p1 = 2.0 * p0 / radius;
+
+ return (dot(p0, p0) - 1.0) / length (p1);
+}
+
+float
+ellipsis_coverage (vec2 point, vec2 center, vec2 radius)
+{
+ float d = ellipsis_dist (point - center, radius);
+ return clamp (0.5 - d, 0.0, 1.0);
+}
+
+float
+rounded_rect_coverage (RoundedRect r, vec2 p)
+{
+ if (p.x < r.bounds.x || p.y < r.bounds.y ||
+ p.x >= r.bounds.z || p.y >= r.bounds.w)
+ return 0.0;
+
+ vec2 rad_tl = vec2(r.corner_widths.x, r.corner_heights.x);
+ vec2 rad_tr = vec2(r.corner_widths.y, r.corner_heights.y);
+ vec2 rad_br = vec2(r.corner_widths.z, r.corner_heights.z);
+ vec2 rad_bl = vec2(r.corner_widths.w, r.corner_heights.w);
+
+ vec2 ref_tl = r.bounds.xy + vec2( r.corner_widths.x, r.corner_heights.x);
+ vec2 ref_tr = r.bounds.zy + vec2(-r.corner_widths.y, r.corner_heights.y);
+ vec2 ref_br = r.bounds.zw + vec2(-r.corner_widths.z, -r.corner_heights.z);
+ vec2 ref_bl = r.bounds.xw + vec2( r.corner_widths.w, -r.corner_heights.w);
+
+ float d_tl = ellipsis_coverage(p, ref_tl, rad_tl);
+ float d_tr = ellipsis_coverage(p, ref_tr, rad_tr);
+ float d_br = ellipsis_coverage(p, ref_br, rad_br);
+ float d_bl = ellipsis_coverage(p, ref_bl, rad_bl);
+
+ vec4 corner_coverages = 1.0 - vec4(d_tl, d_tr, d_br, d_bl);
+
+ bvec4 is_out = bvec4(p.x < ref_tl.x && p.y < ref_tl.y,
+ p.x > ref_tr.x && p.y < ref_tr.y,
+ p.x > ref_br.x && p.y > ref_br.y,
+ p.x < ref_bl.x && p.y > ref_bl.y);
+
+ return 1.0 - dot(vec4(is_out), corner_coverages);
+}
+
+RoundedRect
+rounded_rect_shrink (RoundedRect r, vec4 amount)
+{
+ vec4 new_bounds = r.bounds + vec4(1.0,1.0,-1.0,-1.0) * amount.wxyz;
+ vec4 new_widths = max (r.corner_widths - amount.wyyw, 0.0);
+ vec4 new_heights = max (r.corner_heights - amount.xxzz, 0.0);
+
+ return RoundedRect (new_bounds, new_widths, new_heights);
+}
+
vec4 Texture(sampler2D sampler, vec2 texCoords) {
return texture2D(sampler, texCoords);
}
diff --git a/gsk/resources/glsl/gl_common.vs.glsl b/gsk/resources/glsl/gl_common.vs.glsl
index 3db2e4dc07..8d52641d1f 100644
--- a/gsk/resources/glsl/gl_common.vs.glsl
+++ b/gsk/resources/glsl/gl_common.vs.glsl
@@ -1,4 +1,5 @@
-uniform mat4 uMVP;
+uniform mat4 u_projection;
+uniform mat4 u_modelview;
attribute vec2 aPosition;
attribute vec2 aUv;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]