diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-04-05 17:01:44 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-04-05 17:01:44 +0200 |
| commit | dcb6fc269a1360f6d46836d34db4964779ce5879 (patch) | |
| tree | 431323fbd5a8a789c86780715e0ea7e791da2851 /src/render/Shaders.hpp | |
| parent | 3385269dcadf286aaab0f8e23147a956c13d7699 (diff) | |
support all shaders rounded and fix RGBX borders
Diffstat (limited to 'src/render/Shaders.hpp')
| -rw-r--r-- | src/render/Shaders.hpp | 82 |
1 files changed, 82 insertions, 0 deletions
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 |
