From 64e786fe287eaa13a2824a931457fb4e73708f22 Mon Sep 17 00:00:00 2001 From: GoldenThumbs Date: Sun, 18 Jul 2021 16:45:13 -0500 Subject: [PATCH] Add example shaders_shapes_outline.c (#1883) --- examples/shaders/resources/LICENSE.md | 2 + examples/shaders/resources/egg.png | Bin 0 -> 316 bytes .../resources/shaders/glsl100/outline.fs | 35 ++++++++ .../resources/shaders/glsl330/outline.fs | 36 ++++++++ examples/shaders/resources/torus.png | Bin 0 -> 446 bytes examples/shaders/shaders_shapes_outline.c | 84 ++++++++++++++++++ 6 files changed, 157 insertions(+) create mode 100644 examples/shaders/resources/egg.png create mode 100644 examples/shaders/resources/shaders/glsl100/outline.fs create mode 100644 examples/shaders/resources/shaders/glsl330/outline.fs create mode 100644 examples/shaders/resources/torus.png create mode 100644 examples/shaders/shaders_shapes_outline.c diff --git a/examples/shaders/resources/LICENSE.md b/examples/shaders/resources/LICENSE.md index 96458eca5..b08a555ab 100644 --- a/examples/shaders/resources/LICENSE.md +++ b/examples/shaders/resources/LICENSE.md @@ -9,3 +9,5 @@ | raysan.png | [@raysan5](https://github.com/raysan5) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | - | | space.png | ❔ | ❔ | - | | texel_checker.png | [@raysan5](https://github.com/raysan5) | [CC0](https://creativecommons.org/publicdomain/zero/1.0/) | Made with [UV Checker Map Maker](http://uvchecker.byvalle.com/) | +| egg.png | [@GoldenThumbs](https://github.com/GoldenThumbs) | +| torus.png | [@GoldenThumbs](https://github.com/GoldenThumbs) | diff --git a/examples/shaders/resources/egg.png b/examples/shaders/resources/egg.png new file mode 100644 index 0000000000000000000000000000000000000000..c852495237f21303f98b8a8a5c8318caeb9030b8 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G}l0G|-o|NsC0`Sa)5vuD??UAun$`kgy>?%%(E@#4iRSFRj7bZGzn{YQ@; zJ#*&Fnl)?Y%$c)f$&$5e*LHMtR9042S6A26)a2yk08N_SKkE&U5-$nz3kDj91u#5w zcoqj#!dc)ES79XVpet09wT0>FVdQ&MBb@0HOVlIRF3v literal 0 HcmV?d00001 diff --git a/examples/shaders/resources/shaders/glsl100/outline.fs b/examples/shaders/resources/shaders/glsl100/outline.fs new file mode 100644 index 000000000..67410b3a7 --- /dev/null +++ b/examples/shaders/resources/shaders/glsl100/outline.fs @@ -0,0 +1,35 @@ +#version 100 + +precision mediump float; + +// Input vertex attributes (from vertex shader) +varying vec2 fragTexCoord; +varying vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; +uniform vec2 texScale; + +// Function for drawing outlines on alpha-blended textures +vec4 DrawOutline(sampler2D tex, vec2 uv, vec2 lineScale, vec3 lineCol) +{ + vec2 texelScale = 1.0 / lineScale; + vec4 center = texture2D(tex, uv); // We sample the center texel, (with all color data) + // Next we sample four corner texels, but only for the alpha channel (this is for the outline) + vec4 corners; + corners.x = texture2D(tex, uv+vec2( texelScale.x, texelScale.y)).a; + corners.y = texture2D(tex, uv+vec2( texelScale.x,-texelScale.y)).a; + corners.z = texture2D(tex, uv+vec2(-texelScale.x, texelScale.y)).a; + corners.w = texture2D(tex, uv+vec2(-texelScale.x,-texelScale.y)).a; + + float outline = min(dot(corners, vec4(1.0)), 1.0); + vec4 col = mix(vec4(0.0), vec4(lineCol, 1.0), outline); + col = mix(col, center, center.a); + return col; +} + +void main() +{ + gl_FragColor = DrawOutline(texture0, fragTexCoord, texScale, vec3(0.0)); +} \ No newline at end of file diff --git a/examples/shaders/resources/shaders/glsl330/outline.fs b/examples/shaders/resources/shaders/glsl330/outline.fs new file mode 100644 index 000000000..c1be1b5de --- /dev/null +++ b/examples/shaders/resources/shaders/glsl330/outline.fs @@ -0,0 +1,36 @@ +#version 330 + +// Input vertex attributes (from vertex shader) +in vec2 fragTexCoord; +in vec4 fragColor; + +// Input uniform values +uniform sampler2D texture0; +uniform vec4 colDiffuse; +uniform vec2 texScale; + +// Output fragment color +out vec4 finalColor; + +// Function for drawing outlines on alpha-blended textures +vec4 DrawOutline(sampler2D tex, vec2 uv, vec2 lineScale, vec3 lineCol) +{ + vec2 texelScale = 1.0 / lineScale; + vec4 center = texture(tex, uv); // We sample the center texel, (with all color data) + // Next we sample four corner texels, but only for the alpha channel (this is for the outline) + vec4 corners; + corners.x = texture(tex, uv+vec2( texelScale.x, texelScale.y)).a; + corners.y = texture(tex, uv+vec2( texelScale.x,-texelScale.y)).a; + corners.z = texture(tex, uv+vec2(-texelScale.x, texelScale.y)).a; + corners.w = texture(tex, uv+vec2(-texelScale.x,-texelScale.y)).a; + + float outline = min(dot(corners, vec4(1.0)), 1.0); + vec4 col = mix(vec4(0.0), vec4(lineCol, 1.0), outline); + col = mix(col, center, center.a); + return col; +} + +void main() +{ + finalColor = DrawOutline(texture0, fragTexCoord, texScale, vec3(0.0)); +} \ No newline at end of file diff --git a/examples/shaders/resources/torus.png b/examples/shaders/resources/torus.png new file mode 100644 index 0000000000000000000000000000000000000000..399d7825782cf4aa90b585e3447ee9bb0fffdd72 GIT binary patch literal 446 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%LhP0G|-oKdh|3ykkCVQ_5TbEe;F9QFfcr3V7Sc8 ze3pab0|UcD28Le@4Br?SUNA5`V_^6R)WXbsg@NG&1H*L&hBwU2--U$!Xlwtov^>bb zu#bV^0xRo7Il1@l?%(3$4>K_AXJ$SuBy>qj>#n8cQD)|&oSdh4cz_OhqI2mekkTm$ z@(cb?JYYC}jk5=+kF&rdvY3H^4`>75VaDV6D^h@h-JULvAsWHG=Wg;fD+sU#h=$w| z_+EQ|?*ISx?U&k@>AzJ``94p8jd$O(_zNY6FWeX8U$`vw_B78?5w uE!V!UHd