From a0234d5bcea5b25f575af01d3a8e0296b2d0395c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Tue, 8 Oct 2019 00:14:11 +0200 Subject: [PATCH] Draft fragment shader for rounded rectangles --- wgpu/src/shader/quad.frag | 28 ++++++++++++++++++++++++++-- wgpu/src/shader/quad.frag.spv | Bin 372 -> 2900 bytes wgpu/src/shader/quad.vert | 5 +++++ wgpu/src/shader/quad.vert.spv | Bin 2188 -> 2364 bytes 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/wgpu/src/shader/quad.frag b/wgpu/src/shader/quad.frag index 1aca250f..1fc28bc1 100644 --- a/wgpu/src/shader/quad.frag +++ b/wgpu/src/shader/quad.frag @@ -1,9 +1,33 @@ #version 450 layout(location = 0) in vec4 v_Color; +layout(location = 1) in vec2 v_Pos; +layout(location = 2) in vec2 v_Scale; layout(location = 0) out vec4 o_Color; -void main() { - o_Color = v_Color; +float rounded(in vec2 frag_coord, in vec2 position, in vec2 size, float radius, float s) +{ + vec2 inner_size = size - vec2(radius, radius) * 2.0; + vec2 top_left = position + vec2(radius, radius); + vec2 bottom_right = top_left + inner_size; + + vec2 top_left_distance = top_left - frag_coord; + vec2 bottom_right_distance = frag_coord - bottom_right; + + vec2 distance = vec2( + max(max(top_left_distance.x, bottom_right_distance.x), 0), + max(max(top_left_distance.y, bottom_right_distance.y), 0) + ); + + float d = sqrt(distance.x * distance.x + distance.y * distance.y); + + return 1.0 - smoothstep(radius - s, radius + s, d); +} + +void main() { + o_Color = vec4( + v_Color.xyz, + v_Color.w * rounded(gl_FragCoord.xy, v_Pos, v_Scale, 5.0, 1.0) + ); } diff --git a/wgpu/src/shader/quad.frag.spv b/wgpu/src/shader/quad.frag.spv index 33218c8352cb45830a18173f6307f44473e15f75..19733ecf8d1e46638a7bbaf5ac5037aa079903c7 100644 GIT binary patch literal 2900 zcmZQ(Qf6mhU}Rut;9w|cfB-=TCI&_Z1_o{hHZbk(6YQf`T#}+^Vrl?V!N3=CkLo0ypgl89trV2Ea5U`S?QU`S1Ac$WDsCrU?|Ej%}Ys5(I`tZvWDR_L+dm{YmgpR25ykKMTzP0$@%$3 zDG)Ip1_p+L{Nl`#%zUsrKxXqYFfbHnR)L%Wwu=vBc4A6qX)#C-GXplV1e( z2Pk~Y;Cwc4Sf}U2yA>s-J3~SQH@7#P5DAkM(Tz|Oz`=7ZELFt9LiFff3{K;j@iCzKD; zqsYL)zy(zgQU}8zH6X0bzydZ)9O8ZlQ3e(UU8r3kA&@+XuLt5VFff4lAahNS_#k;R z22hSd$a{n38|*>u4Tstf$}=GMMS$}I0|Q9hnt_D@#0SMSD2IXMqo8KNjdqDQbL(K%~Pk`zNxf5hQNIxhJK>9)QDNuP(c!A_Wd{CT#!Hj_w948>ZfP_G9_`$%$z{c& z0D-~{BnR>%h!0|e{09m@5F6w-P};C$-~^|;LU1|B0JaBY9!MWZJxE8W zBMb}-Ahm%|F;LzHg#*Z~FfmY}1QG*<2TZJ#fq?-e1`3}526k|GmO;xukb00j$b697 zKxq&p_m_c@!GeL20TkDuumhFNAbUXh$ee*0oZmqC8O8>c!7w(c>;cND={#D>o%BvWd;TYkQ$IUNIxiSL1HlVs%ZMvz-<8r2ACh!85kHq zYCz&3{h+u2iNW-1Le<0gTF^2SreB+ZfdQljBo5LKiaU@PD9?i8N}quNT$h5%S&$i^ zZ~`?vK;keph71hgIu%)s5d#AQNSud(9h{$xp=BG$e2{*SJWS3MNe-kAREERMHiy~| zD#u~=TQD#%fW%>HETQ%ztFdBWU;v53?65|%1Ee1$50kS&k^`v&*$<0zTLuOOko!Pt zK;Z*Q%OEkB-S!L&;PwKt-yIkj7(n7MHI7)+I599VfW%>Ci8BKO14ti49Mtk+U~qxz zL-v;|14JBVwi^~T?hFhJAaR)49t;c&AblWlP`U%fp(g_a1ISL091jB x9Hu9TfdSm+;$h$byDb>%Hc*-Z*#Xi6QUkL$gn@wpRDOfh{bOKa0P#U(B>aacOtK;I6DIi0|OZ6CT8X_FfcH1GB7Z3PfXRdW&tzv zU6#=yW}$G{AB8i@aw Lfsw(2fsp|KFF6vb diff --git a/wgpu/src/shader/quad.vert b/wgpu/src/shader/quad.vert index 3392d43d..87f6cc53 100644 --- a/wgpu/src/shader/quad.vert +++ b/wgpu/src/shader/quad.vert @@ -10,6 +10,8 @@ layout (set = 0, binding = 0) uniform Globals { }; layout(location = 0) out vec4 o_Color; +layout(location = 1) out vec2 o_Pos; +layout(location = 2) out vec2 o_Scale; void main() { mat4 i_Transform = mat4( @@ -20,5 +22,8 @@ void main() { ); o_Color = i_Color; + o_Pos = i_Pos; + o_Scale = i_Scale; + gl_Position = u_Transform * i_Transform * vec4(v_Pos, 0.0, 1.0); } diff --git a/wgpu/src/shader/quad.vert.spv b/wgpu/src/shader/quad.vert.spv index d517796b4112b7f23e6252035eaeba90942b174c..0d13df6ccde78277451fd58746a35e4092af3a3a 100644 GIT binary patch delta 886 zcmeAX+#|%x%%sfDz`)4B&cMMCGLhGmk$0lABCjKR!4)F(;LQm4S`HVd6t^Ne2c9NY4SO%q+>w&tqU?U}tccEXXL$ z=rCCqOnNd(%YsY>sRbG3%D}+jo|B)Hm{ZKa#=yqlI=PWioYx&B4Yka7@=`|cM0W;= zGvpXRE@of=@jo-qU;O|3<4mxGcbcyf^>o01ai3&NE=v=g#pA@MB@8y z-pUltSg*jq!eGU~zyPuy_Sn5oKUuaAshLV^DyGqc%iua|CpZWhz)l0H2U+38z`y_!hw;4`7#O%17#Joo zurh$;eHa)RKx(`h80r~7ia>$u2XYew14AG11VKVQ^qzU~tdLPfE-w2Ac%pgXBu%Ly8jfiqrCoav4||m>HZvf(#4{AUz(F z&oX*TdN8np-2;-~1`!}qq zD^xwqEy^H4G%3xJz=9ydKmwq^1$h8unKMKI14si%o(JUd z&4#SMnd%)GSQ$XlE({D{e}e3=Wncj-b!A{+0Exr+ZVU_zTnr2hlNeaR^6m@_3?MZi zagZ8N9C(6^W?*0lWME|g`PqwsfdM22aym@R8!E=gz!1q0z`za;ARh(>29RQqq%Z>m zgCqk3!$byFu$(VAQWzLOYCsM)Wnf_NV_;wa1sKS|b_~p5K1khP21W)821W(|GU`Ee