From f36e765845174bb6d4c761dc6d149dfc369a4f79 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Thu, 18 Jul 2019 16:50:03 +0900 Subject: [PATCH 01/10] Change flashlight float precision to highp --- osu.Game.Resources/Shaders/sh_Flashlight.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osu.Game.Resources/Shaders/sh_Flashlight.h b/osu.Game.Resources/Shaders/sh_Flashlight.h index 2189f11..1d612e1 100644 --- a/osu.Game.Resources/Shaders/sh_Flashlight.h +++ b/osu.Game.Resources/Shaders/sh_Flashlight.h @@ -1,5 +1,5 @@ #ifdef GL_ES - precision mediump float; + precision highp float; #endif varying vec2 v_Position; From 9ba9ae77b9e37a4f63524f03065b04af5853e37f Mon Sep 17 00:00:00 2001 From: David Zhao Date: Thu, 18 Jul 2019 21:02:47 +0900 Subject: [PATCH 02/10] Only mark diff parameter as high precision --- osu.Game.Resources/Shaders/sh_CircularFlashlight.fs | 3 ++- osu.Game.Resources/Shaders/sh_Flashlight.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs index 84aafd5..4030a8c 100644 --- a/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs +++ b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs @@ -1,6 +1,7 @@ #include "sh_Flashlight.h" -vec4 getColourAt(vec2 diff, vec2 size, vec4 originalColour) +// highp diff prevents loss in precision when calculating smoothing distance on GL_ES platforms +vec4 getColourAt(highp vec2 diff, vec2 size, vec4 originalColour) { float dist = length(diff); float flashlightRadius = length(size); diff --git a/osu.Game.Resources/Shaders/sh_Flashlight.h b/osu.Game.Resources/Shaders/sh_Flashlight.h index 1d612e1..2189f11 100644 --- a/osu.Game.Resources/Shaders/sh_Flashlight.h +++ b/osu.Game.Resources/Shaders/sh_Flashlight.h @@ -1,5 +1,5 @@ #ifdef GL_ES - precision highp float; + precision mediump float; #endif varying vec2 v_Position; From 7675deb816483191d5a1281b6120aaaecc11a642 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Fri, 19 Jul 2019 14:58:33 +0900 Subject: [PATCH 03/10] Update precisions --- osu.Game.Resources/Shaders/sh_CircularFlashlight.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs index 4030a8c..bef9492 100644 --- a/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs +++ b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs @@ -1,7 +1,7 @@ #include "sh_Flashlight.h" -// highp diff prevents loss in precision when calculating smoothing distance on GL_ES platforms -vec4 getColourAt(highp vec2 diff, vec2 size, vec4 originalColour) +// highp precision is necessary for vertex positions to prevent catastrophic failure on GL_ES platforms +vec4 getColourAt(highp vec2 diff, highp vec2 size, lowp vec4 originalColour) { float dist = length(diff); float flashlightRadius = length(size); From 751ded4dd9493273ca529713b4310c8a6c202e8c Mon Sep 17 00:00:00 2001 From: David Zhao Date: Fri, 19 Jul 2019 15:20:26 +0900 Subject: [PATCH 04/10] define highp and lowp for non GL_ES platforms --- osu.Game.Resources/Shaders/sh_Flashlight.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/osu.Game.Resources/Shaders/sh_Flashlight.h b/osu.Game.Resources/Shaders/sh_Flashlight.h index 2189f11..a66f923 100644 --- a/osu.Game.Resources/Shaders/sh_Flashlight.h +++ b/osu.Game.Resources/Shaders/sh_Flashlight.h @@ -1,5 +1,8 @@ #ifdef GL_ES precision mediump float; +#else + #define lowp + #define highp #endif varying vec2 v_Position; From d58ad077c84cb65e55720253e3c71f6dbc26738c Mon Sep 17 00:00:00 2001 From: David Zhao Date: Fri, 19 Jul 2019 15:22:38 +0900 Subject: [PATCH 05/10] Add comment --- osu.Game.Resources/Shaders/sh_Flashlight.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osu.Game.Resources/Shaders/sh_Flashlight.h b/osu.Game.Resources/Shaders/sh_Flashlight.h index a66f923..c3fd4c5 100644 --- a/osu.Game.Resources/Shaders/sh_Flashlight.h +++ b/osu.Game.Resources/Shaders/sh_Flashlight.h @@ -1,6 +1,8 @@ #ifdef GL_ES precision mediump float; #else + // Since glsl 1.1 doesn't define precision qualifiers but GL_ES does, + // Define them as nothing to avoid compilation issues. #define lowp #define highp #endif From 96286f8c6f40c04509d70e16f9424f7d446cfac8 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Mon, 22 Jul 2019 20:02:18 +0900 Subject: [PATCH 06/10] Explicitly define precision for all variables, fall back to medium precision --- .../Shaders/sh_CircularFlashlight.fs | 6 +++--- osu.Game.Resources/Shaders/sh_Flashlight.h | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs index bef9492..27a7372 100644 --- a/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs +++ b/osu.Game.Resources/Shaders/sh_CircularFlashlight.fs @@ -1,10 +1,10 @@ #include "sh_Flashlight.h" // highp precision is necessary for vertex positions to prevent catastrophic failure on GL_ES platforms -vec4 getColourAt(highp vec2 diff, highp vec2 size, lowp vec4 originalColour) +lowp vec4 getColourAt(highp vec2 diff, highp vec2 size, lowp vec4 originalColour) { - float dist = length(diff); - float flashlightRadius = length(size); + highp float dist = length(diff); + highp float flashlightRadius = length(size); return originalColour * vec4(1.0, 1.0, 1.0, smoothstep(flashlightRadius, flashlightRadius * smoothness, dist)); } \ No newline at end of file diff --git a/osu.Game.Resources/Shaders/sh_Flashlight.h b/osu.Game.Resources/Shaders/sh_Flashlight.h index c3fd4c5..3a2a258 100644 --- a/osu.Game.Resources/Shaders/sh_Flashlight.h +++ b/osu.Game.Resources/Shaders/sh_Flashlight.h @@ -1,5 +1,9 @@ #ifdef GL_ES precision mediump float; + // Not all GPUs support high precision, so we should fall back to medium precision. + #ifndef GL_FRAGMENT_PRECISION_HIGH + #define highp + #endif #else // Since glsl 1.1 doesn't define precision qualifiers but GL_ES does, // Define them as nothing to avoid compilation issues. @@ -7,17 +11,20 @@ #define highp #endif -varying vec2 v_Position; -varying vec4 v_Colour; -uniform vec2 flashlightPos; -uniform vec2 flashlightSize; -uniform float flashlightDim; + +varying highp vec2 v_Position; +varying lowp vec4 v_Colour; + +uniform highp vec2 flashlightPos; +uniform highp vec2 flashlightSize; + +uniform lowp float flashlightDim; const float smoothness = 1.1; -vec4 getColourAt(vec2, vec2, vec4); +lowp vec4 getColourAt(vec2, vec2, vec4); void main(void) { From c12541bb28a7ca1c933958b2d1e705f023ad29ed Mon Sep 17 00:00:00 2001 From: David Zhao Date: Tue, 23 Jul 2019 15:44:15 +0900 Subject: [PATCH 07/10] remove unnecessary pre-processor directives --- osu.Game.Resources/Shaders/sh_Flashlight.h | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/osu.Game.Resources/Shaders/sh_Flashlight.h b/osu.Game.Resources/Shaders/sh_Flashlight.h index 3a2a258..5f411a2 100644 --- a/osu.Game.Resources/Shaders/sh_Flashlight.h +++ b/osu.Game.Resources/Shaders/sh_Flashlight.h @@ -1,19 +1,9 @@ -#ifdef GL_ES - precision mediump float; - // Not all GPUs support high precision, so we should fall back to medium precision. - #ifndef GL_FRAGMENT_PRECISION_HIGH - #define highp - #endif -#else - // Since glsl 1.1 doesn't define precision qualifiers but GL_ES does, - // Define them as nothing to avoid compilation issues. +#ifndef GL_ES #define lowp + #define mediump #define highp #endif - - - varying highp vec2 v_Position; varying lowp vec4 v_Colour; From 8bc6f5a9860570deaf21b50cf7d889663613e65e Mon Sep 17 00:00:00 2001 From: David Zhao Date: Tue, 23 Jul 2019 18:58:49 +0900 Subject: [PATCH 08/10] specify precision for rectangular flashlight too --- osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs b/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs index 8426ca7..ef58b05 100644 --- a/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs +++ b/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs @@ -1,10 +1,10 @@ #include "sh_Flashlight.h" -vec4 getColourAt(vec2 diff, vec2 size, vec4 originalColour) +vec4 getColourAt(highp vec2 diff, highp vec2 size, lowp vec4 originalColour) { diff = abs(diff); - float alpha = length(smoothstep(size, size * smoothness, diff)); + lowp float alpha = length(smoothstep(size, size * smoothness, diff)); return originalColour * vec4(1.0, 1.0, 1.0, alpha); } \ No newline at end of file From 6448d6051f97bb19cf8594254f96e8086927f467 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Wed, 24 Jul 2019 17:20:14 +0900 Subject: [PATCH 09/10] Remove compiler definitions --- osu.Game.Resources/Shaders/sh_Flashlight.h | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/osu.Game.Resources/Shaders/sh_Flashlight.h b/osu.Game.Resources/Shaders/sh_Flashlight.h index 5f411a2..b9157e8 100644 --- a/osu.Game.Resources/Shaders/sh_Flashlight.h +++ b/osu.Game.Resources/Shaders/sh_Flashlight.h @@ -1,9 +1,3 @@ -#ifndef GL_ES - #define lowp - #define mediump - #define highp -#endif - varying highp vec2 v_Position; varying lowp vec4 v_Colour; @@ -19,4 +13,4 @@ lowp vec4 getColourAt(vec2, vec2, vec4); void main(void) { gl_FragColor = mix(getColourAt(flashlightPos - v_Position, flashlightSize, v_Colour), vec4(0.0, 0.0, 0.0, 1.0), flashlightDim); -} \ No newline at end of file +} From fb90b1a6687a50bd4c4909b64ca4c69abfb56787 Mon Sep 17 00:00:00 2001 From: David Zhao Date: Thu, 25 Jul 2019 11:24:15 +0900 Subject: [PATCH 10/10] specify for method as well --- osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs b/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs index ef58b05..6730fee 100644 --- a/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs +++ b/osu.Game.Resources/Shaders/sh_RectangularFlashlight.fs @@ -1,10 +1,10 @@ #include "sh_Flashlight.h" -vec4 getColourAt(highp vec2 diff, highp vec2 size, lowp vec4 originalColour) +lowp vec4 getColourAt(highp vec2 diff, highp vec2 size, lowp vec4 originalColour) { diff = abs(diff); lowp float alpha = length(smoothstep(size, size * smoothness, diff)); return originalColour * vec4(1.0, 1.0, 1.0, alpha); -} \ No newline at end of file +}