From 27c06758e4e2fb9cc06233ec967bde62f447de0f Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Tue, 5 Apr 2022 15:50:47 +0200 Subject: basic window rounded corners --- src/render/Shaders.hpp | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) (limited to 'src/render/Shaders.hpp') diff --git a/src/render/Shaders.hpp b/src/render/Shaders.hpp index a9140aca..78892d5f 100644 --- a/src/render/Shaders.hpp +++ b/src/render/Shaders.hpp @@ -38,11 +38,52 @@ void main() { inline const std::string TEXFRAGSRCRGBA = R"#( precision mediump float; -varying vec2 v_texcoord; +varying vec2 v_texcoord; // is in 0-1 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 = texture2D(tex, v_texcoord) * alpha; })#"; @@ -66,4 +107,4 @@ uniform float alpha; void main() { gl_FragColor = texture2D(texture0, v_texcoord) * alpha; -})#"; +})#"; \ No newline at end of file -- cgit v1.2.3