summaryrefslogtreecommitdiff
path: root/src/render/Shaders.hpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-04-05 17:01:44 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-04-05 17:01:44 +0200
commitdcb6fc269a1360f6d46836d34db4964779ce5879 (patch)
tree431323fbd5a8a789c86780715e0ea7e791da2851 /src/render/Shaders.hpp
parent3385269dcadf286aaab0f8e23147a956c13d7699 (diff)
support all shaders rounded and fix RGBX borders
Diffstat (limited to 'src/render/Shaders.hpp')
-rw-r--r--src/render/Shaders.hpp82
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