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 zcmZvcYg1cQ6oxm2KrggfYm3(!Y*n<1ZKXG{l!`5CQK&fM-83Z-qL710h%$y$I@u-sLvDWa2jJ(cI&OShOdxskPT!L*+QNqMjwiyjZz_{zerGlEyq^U zA$(KnWc%&LW@Dzmb#Xpq>%u&L##HEyyq$WpwvlC>#(r>`x*zQWf!O7tiMCk^fu?Yrl+)Ad&A*ZvXX$ z{eFRN4ez}DeaY&tNq)Y-&QMPK*R19WyV#k^neSUx^XVV`)e3CBbF~9K}1*hHn zrQLaH7keghfwu}A`)Ptx`g8FzH^{lW7e9OW8>Yf)tn=MQBDdK4RmR@0z@CBktBk#0 z;_Kvd2Hzp>f0gX+{riHG_p@(%x=9!JSnG)X&cqzf;XWcCIa}z?WR*(R`T>zs{LHz) z?%azuoRv2BB@UYpkaN@K9>wbJuUY8s&AV}p+h<=tA-;XqF`sey?~V0$_M=Y+ zv44H<7M#Cr=inEdkCL3d2e)5v&S#AsIL|&}y#CtFZ=c>lZU2zrD&kpN-~Rmk9bLiC zGd)t$eS?EPTIimu@2QFS)4uJi0TAIxnD?>%Lgv zsCyc$kNkt8#!Kkt(Pj;2B^NcO(d7cajBXzhe+FG2dE=|Ba^e39dO7}8uxA{5d<|V6 zdE-3`xrl!qUH`yupjVNIKZmZ5yz!o$oWEJm>TSfFvxqr7pYw=(_*_6YuIzIWEI-MK z8S@S@g6L8o z>&Ka2N4GzHoR4=|E^6OEmn-jm5iB1*H_?ZE-p}oi-jXHoA~N6yv;P2WTzOx&!19s% z_G5gO;pF3;`VieX`3Ib<=kXC@O>L7favvkk$os3^{rX##kJ+!FmwzLlfPF)}Pv-a( z(MLXFR?*8bYhYudm%Hft$Vbd)=+>U(RWt88VsG9lYZ#+X)cqX&4x-;f-ZQap<-eG- B&QAaU literal 372 zcmYk1OA7&E6owCDW-zWPb|U-90x7Yvn9c0`04W=VDdY$GRW{1|e1?2==A8F(F5?wP zp;^H~D_h+@uWdy!W|0LhC+Q}QueW_XnT~NZ%yULOO?8%(iPP?IMyMzvMN2+-El}lY zs@X$LzSw_1n4WCA&W_o|>Ga=ooaB0691o2C#T`v%_RwuHS9eth;s%PI{M-O$??B(O wGJgTT$T2s-p;wi4>Q4u=6KfA?E4)vI}-Xr z7|(ySi-r_kOroXo11qNG=wkY1w)iSuvLOCf-wRYEzAbRhzt5v9mC6<*Ro8Gq@;v>X zxJHxC1g(b3qeXN%TP)=+*)aL(>i#ILXO1wrai_D9yo}Kj9DCMdz&&BCZhmru?MY?Ysm|*)(ph5ZrNm_>YMEvCNr ze|w+Y>WQp}k~y9+I&01q(Q?j@fIn9KwQ@<=6z1qGM{sVusM(zLr delta 765 zcmYLG+e!ja6y0aMk_nYam?fHzLC}LxP1=~2Q+82^q9?JKLNLu6^yUxrGR>#>+As7) zA+*-aSVtCX@3q(2XV3O)?PE0_(DD%xB@v0rjU6wjm|e+*iXvj#gGo9pI>MK3t6>fA ztl`*tM=D|bbSJ0QmF^s<^cFpu=c{x(Z`ICd-0nSDa7Ex7sC1bPc|sBt16=F&AKTrL z+le{Pq;)%N_eRhC;VXOrIq_uoj_G`>ddfu1w|HV6iK{tHEiqk8!AbyFxEWIm0yR_? zKGUBCGWvRcg9%RFBe#d)$Jmps0PI1HUtB{E&bckJ0s0qmZsz6YY_8p_=_b5~ki$R{ z$Z(5b_NB%ek%jLF%(+?D{hT|bmPB3xX8{H5`1vtno{T?V6ft|1!I*Vd3zYqfN`$49iu3SNKK|7FtgM>Wlmg@e=TfJFM3LdZ^RG|KJ=jfhIis z<_li~{b_YyQz8%2z^E(S)@tfRE9`feYYkfD7ZmB`kzFeRHgAANU0_ C>Oph>