From e31566d430093fb084da2e7f4f4ed1b66326edef Mon Sep 17 00:00:00 2001 From: Richard Date: Thu, 11 Nov 2021 01:10:47 -0300 Subject: Improve shader version selection --- glow/src/shader/common/triangle.frag | 18 ++++++++++++++++++ glow/src/shader/common/triangle.vert | 11 +++++++++++ glow/src/shader/compatibility/quad.frag | 9 +++++++-- glow/src/shader/compatibility/quad.vert | 2 -- glow/src/shader/compatibility/triangle.frag | 8 -------- glow/src/shader/compatibility/triangle.vert | 13 ------------- glow/src/shader/core/quad.frag | 25 +++++++++++++++++-------- glow/src/shader/core/quad.vert | 4 +--- glow/src/shader/core/triangle.frag | 9 --------- glow/src/shader/core/triangle.vert | 13 ------------- 10 files changed, 54 insertions(+), 58 deletions(-) create mode 100644 glow/src/shader/common/triangle.frag create mode 100644 glow/src/shader/common/triangle.vert delete mode 100644 glow/src/shader/compatibility/triangle.frag delete mode 100644 glow/src/shader/compatibility/triangle.vert delete mode 100644 glow/src/shader/core/triangle.frag delete mode 100644 glow/src/shader/core/triangle.vert (limited to 'glow/src/shader') diff --git a/glow/src/shader/common/triangle.frag b/glow/src/shader/common/triangle.frag new file mode 100644 index 00000000..e8689f2e --- /dev/null +++ b/glow/src/shader/common/triangle.frag @@ -0,0 +1,18 @@ +#ifdef GL_ES +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else +precision mediump float; +#endif +#endif + +#ifdef HIGHER_THAN_300 +out vec4 fragColor; +#define gl_FragColor fragColor +#endif + +in vec4 v_Color; + +void main() { + gl_FragColor = v_Color; +} \ No newline at end of file diff --git a/glow/src/shader/common/triangle.vert b/glow/src/shader/common/triangle.vert new file mode 100644 index 00000000..d0494a5f --- /dev/null +++ b/glow/src/shader/common/triangle.vert @@ -0,0 +1,11 @@ +uniform mat4 u_Transform; + +in vec2 i_Position; +in vec4 i_Color; + +out vec4 v_Color; + +void main() { + gl_Position = u_Transform * vec4(i_Position, 0.0, 1.0); + v_Color = i_Color; +} \ No newline at end of file diff --git a/glow/src/shader/compatibility/quad.frag b/glow/src/shader/compatibility/quad.frag index c2634c65..8ea5693d 100644 --- a/glow/src/shader/compatibility/quad.frag +++ b/glow/src/shader/compatibility/quad.frag @@ -1,5 +1,10 @@ -#version 100 +#ifdef GL_ES +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else precision mediump float; +#endif +#endif uniform float u_ScreenHeight; @@ -10,7 +15,7 @@ varying vec2 v_Scale; varying float v_BorderRadius; varying float v_BorderWidth; -float _distance(in vec2 frag_coord, in vec2 position, in vec2 size, float radius) +float _distance(vec2 frag_coord, vec2 position, vec2 size, float radius) { // TODO: Try SDF approach: https://www.shadertoy.com/view/wd3XRN vec2 inner_size = size - vec2(radius, radius) * 2.0; diff --git a/glow/src/shader/compatibility/quad.vert b/glow/src/shader/compatibility/quad.vert index 0d02e9d0..abe70c0e 100644 --- a/glow/src/shader/compatibility/quad.vert +++ b/glow/src/shader/compatibility/quad.vert @@ -1,5 +1,3 @@ -#version 100 - uniform mat4 u_Transform; uniform float u_Scale; diff --git a/glow/src/shader/compatibility/triangle.frag b/glow/src/shader/compatibility/triangle.frag deleted file mode 100644 index 58fca553..00000000 --- a/glow/src/shader/compatibility/triangle.frag +++ /dev/null @@ -1,8 +0,0 @@ -#version 100 -precision mediump float; - -varying vec4 v_Color; - -void main() { - gl_FragColor = v_Color; -} diff --git a/glow/src/shader/compatibility/triangle.vert b/glow/src/shader/compatibility/triangle.vert deleted file mode 100644 index 975c9781..00000000 --- a/glow/src/shader/compatibility/triangle.vert +++ /dev/null @@ -1,13 +0,0 @@ -#version 100 - -uniform mat4 u_Transform; - -attribute vec2 i_Position; -attribute vec4 i_Color; - -varying vec4 v_Color; - -void main() { - v_Color = i_Color; - gl_Position = u_Transform * vec4(i_Position, 0.0, 1.0); -} diff --git a/glow/src/shader/core/quad.frag b/glow/src/shader/core/quad.frag index 18fd5baa..57e2e8e7 100644 --- a/glow/src/shader/core/quad.frag +++ b/glow/src/shader/core/quad.frag @@ -1,4 +1,15 @@ -#version 130 +#ifdef GL_ES +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else +precision mediump float; +#endif +#endif + +#ifdef HIGHER_THAN_300 +out vec4 fragColor; +#define gl_FragColor fragColor +#endif uniform float u_ScreenHeight; @@ -9,9 +20,7 @@ in vec2 v_Scale; in float v_BorderRadius; in float v_BorderWidth; -out vec4 o_Color; - -float distance(in vec2 frag_coord, in vec2 position, in vec2 size, float radius) +float fDistance(vec2 frag_coord, vec2 position, vec2 size, float radius) { // TODO: Try SDF approach: https://www.shadertoy.com/view/wd3XRN vec2 inner_size = size - vec2(radius, radius) * 2.0; @@ -35,10 +44,10 @@ void main() { vec2 fragCoord = vec2(gl_FragCoord.x, u_ScreenHeight - gl_FragCoord.y); // TODO: Remove branching (?) - if(v_BorderWidth > 0) { + if(v_BorderWidth > 0.0) { float internal_border = max(v_BorderRadius - v_BorderWidth, 0.0); - float internal_distance = distance( + float internal_distance = fDistance( fragCoord, v_Pos + vec2(v_BorderWidth), v_Scale - vec2(v_BorderWidth * 2.0), @@ -56,7 +65,7 @@ void main() { mixed_color = v_Color; } - float d = distance( + float d = fDistance( fragCoord, v_Pos, v_Scale, @@ -66,5 +75,5 @@ void main() { float radius_alpha = 1.0 - smoothstep(max(v_BorderRadius - 0.5, 0.0), v_BorderRadius + 0.5, d); - o_Color = vec4(mixed_color.xyz, mixed_color.w * radius_alpha); + gl_FragColor = vec4(mixed_color.xyz, mixed_color.w * radius_alpha); } diff --git a/glow/src/shader/core/quad.vert b/glow/src/shader/core/quad.vert index 30f28d52..b1fb2365 100644 --- a/glow/src/shader/core/quad.vert +++ b/glow/src/shader/core/quad.vert @@ -1,5 +1,3 @@ -#version 130 - uniform mat4 u_Transform; uniform float u_Scale; @@ -17,7 +15,7 @@ out vec2 v_Scale; out float v_BorderRadius; out float v_BorderWidth; -const vec2 positions[4] = vec2[]( +vec2 positions[4] = vec2[]( vec2(0.0, 0.0), vec2(0.0, 1.0), vec2(1.0, 0.0), diff --git a/glow/src/shader/core/triangle.frag b/glow/src/shader/core/triangle.frag deleted file mode 100644 index 39c2ff6f..00000000 --- a/glow/src/shader/core/triangle.frag +++ /dev/null @@ -1,9 +0,0 @@ -#version 130 - -in vec4 v_Color; - -out vec4 o_Color; - -void main() { - o_Color = v_Color; -} diff --git a/glow/src/shader/core/triangle.vert b/glow/src/shader/core/triangle.vert deleted file mode 100644 index 895652ea..00000000 --- a/glow/src/shader/core/triangle.vert +++ /dev/null @@ -1,13 +0,0 @@ -#version 130 - -uniform mat4 u_Transform; - -in vec2 i_Position; -in vec4 i_Color; - -out vec4 v_Color; - -void main() { - gl_Position = u_Transform * vec4(i_Position, 0.0, 1.0); - v_Color = i_Color; -} -- cgit