From dcb6fc269a1360f6d46836d34db4964779ce5879 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Tue, 5 Apr 2022 17:01:44 +0200 Subject: support all shaders rounded and fix RGBX borders --- src/render/Shaders.hpp | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) (limited to 'src/render/Shaders.hpp') diff --git a/src/render/Shaders.hpp b/src/render/Shaders.hpp index 78892d5f..b8239c57 100644 --- a/src/render/Shaders.hpp +++ b/src/render/Shaders.hpp @@ -93,7 +93,48 @@ varying vec2 v_texcoord; uniform sampler2D tex; uniform float alpha; +uniform vec2 topLeft; +uniform vec2 bottomRight; +uniform vec2 fullSize; +uniform float radius; + void main() { + + vec2 pixCoord = fullSize * v_texcoord; + + if (pixCoord[0] < topLeft[0]) { + // we're close left + if (pixCoord[1] < topLeft[1]) { + // top + if (distance(topLeft, pixCoord) > radius) { + gl_FragColor = vec4(0,0,0,0); + return; + } + } else if (pixCoord[1] > bottomRight[1]) { + // bottom + if (distance(vec2(topLeft[0], bottomRight[1]), pixCoord) > radius) { + gl_FragColor = vec4(0,0,0,0); + return; + } + } + } + else if (pixCoord[0] > bottomRight[0]) { + // we're close right + if (pixCoord[1] < topLeft[1]) { + // top + if (distance(vec2(bottomRight[0], topLeft[1]), pixCoord) > radius) { + gl_FragColor = vec4(0,0,0,0); + return; + } + } else if (pixCoord[1] > bottomRight[1]) { + // bottom + if (distance(bottomRight, pixCoord) > radius) { + gl_FragColor = vec4(0,0,0,0); + return; + } + } + } + gl_FragColor = vec4(texture2D(tex, v_texcoord).rgb, 1.0) * alpha; })#"; @@ -105,6 +146,47 @@ varying vec2 v_texcoord; uniform samplerExternalOES texture0; uniform float alpha; +uniform vec2 topLeft; +uniform vec2 bottomRight; +uniform vec2 fullSize; +uniform float radius; + void main() { + + vec2 pixCoord = fullSize * v_texcoord; + + if (pixCoord[0] < topLeft[0]) { + // we're close left + if (pixCoord[1] < topLeft[1]) { + // top + if (distance(topLeft, pixCoord) > radius) { + gl_FragColor = vec4(0,0,0,0); + return; + } + } else if (pixCoord[1] > bottomRight[1]) { + // bottom + if (distance(vec2(topLeft[0], bottomRight[1]), pixCoord) > radius) { + gl_FragColor = vec4(0,0,0,0); + return; + } + } + } + else if (pixCoord[0] > bottomRight[0]) { + // we're close right + if (pixCoord[1] < topLeft[1]) { + // top + if (distance(vec2(bottomRight[0], topLeft[1]), pixCoord) > radius) { + gl_FragColor = vec4(0,0,0,0); + return; + } + } else if (pixCoord[1] > bottomRight[1]) { + // bottom + if (distance(bottomRight, pixCoord) > radius) { + gl_FragColor = vec4(0,0,0,0); + return; + } + } + } + gl_FragColor = texture2D(texture0, v_texcoord) * alpha; })#"; \ No newline at end of file -- cgit v1.2.3